Hi all,
After struggling for a long time with combo boxes and cascading them, I've come up with an easy logic to follow when it comes to manipulating combo boxes.
So here are a few tips and tricks on this particular topic...
When you customize a form in PowerApps, the system automatically sets a field as a combo box if its datatype is one of the following:
- Choice field
- Lookup field
- Managed metadata field
- User field
But you already know this... 
The structure of the items in the combo box will then vary according to the field's data type:
{
Value
}
{
Id,
Value
}
{
Label,
Path,
TermGuid,
Value, /* <label>|<guid> */
WssId
}
{
Claims,
Department,
DisplayName,
Email,
JobTitle,
Picture
}
But you probably already know this as well.
What is interesting to understand is that, whatever the data type of the field (whatever the structure of the combo box items), the Items property will always be defined as:
Choices(<your datasource>.<your field>)
Here comes the important part...
Whatever you want to do with your combo box (define a default value, cascade combo boxes, filter the list of items in your combo box) consider the Choices(...) 'function' as your 'combo box datasource'. You have to respect the data type of your combo box items by always working with the Choices(...) 'items list'.
And forget about using the { '@odata.type' : "Microsoft.Azure.Connectors.SharePoint. ...", Id : ..., Value: ...} artefact (which is usefull in very limited cases, by example for setting a default user in a user field).
This means that, if you want to set a default value for your combo box, do it this way (always use the DefaultSelectedItems property):
LookUp(Choices(<your datasource>.<your field>), Value='<your default value>')
It also means that if you want to filter the list of items in your combo box, you have to do it this way:
Filter(Choices(<your datasource>.<your field>), <your filter condition>)
And if you want to cascade lookup combo boxes, you should do it this way:
Filter(
Choices(<datasource>.<lookup field>),
Id in ShowColumns(
Filter(<lookup list>,<your condition>),
"ID"
)
)
A bit of an explanation here...
The Filter(Choices(...),...) part does not change. We want to filter our combo box 'datasource'.
Then, for the filter condition, we can only use the Id or the Value properties. Here I use the Id property.
Now, the Id in... part means: "I want to specify which items in my Choices(...) I want to keep as items for the combo box."
Since the left-side of the in operator is the Id 'column', on the right side of the in operator I must have a list of ids. That's why I use the ShowColumns(..., "ID") function.
Finally, inside the ShowColumns function, the datasource (first parameter) is where I will filter my lookup items. And in the filter condition I can just filter on any other field in the lookup list.
Here is an example... Let's say you have the following lists:
- Countries
- Cities
- CityName (text)
- Country (lookup to Countries>CountryName)
- Companies
- CompanyName (text)
- CompanyCountry (lookup to Countries>CountryName)
- CompanyCity (lookup to Cities>CityName)
Let's say that you customize the Companies list form and that you want the following behavior: after choosing a country in CompanyCountry combo box, I want the CompanyCity combo box to show me only cities from that country.
Here is how you should set the Items property of the CompanyCity combo box:
Filter(
Choices(Companies.CompanyCity),
Id in ShowColumns(
Filter(Cities,Country.Id=DataCardValueCompanyCountry.Selected.Id),
"ID"
)
)
Note: PowerApps provides now an automatic way of cascading combo boxes:

Hope this helped...
Emmanuel