Learn how to create cascading dropdowns in Power Apps with multi-level, searchable, and offline-ready examples. Complete end-to-end guide with formulas, tips, and best practices.
✨ Introduction
Cascading dropdowns are essential for building dynamic, interactive forms in Power Apps. They allow hierarchical selections where one dropdown determines the options in the next.
Example Scenarios:
- Country → State → City
- Product Category → Product → Sub-Product
In this tutorial, we’ll cover:
- Multi-level cascading dropdowns
- Searchable combo boxes
- Offline-friendly collections
- Dynamic defaults and conditional formatting
By the end, you’ll have a fully functional cascading dropdown system in Power Apps.
1️⃣ What Are Cascading Dropdowns?
Cascading dropdowns filter options in one dropdown based on the selection in another.
Real-world Example:
| Country | State | City |
|---|---|---|
| USA | NY | New York |
| USA | CA | Los Angeles |
| India | MH | Mumbai |
💡 Tip: Cascading dropdowns prevent invalid selections and improve user experience.
2️⃣ End-to-End Example: Country → State → City
Step 1: Prepare the Data Source
- Create a SharePoint list
Locationswith columns:Country,State,City. - Populate it with hierarchical data (as above).
- Ensure there are no blanks or duplicates.
Step 2: Load Data into a Collection (Offline-Friendly)
In your app’s OnStart property, add:
ClearCollect(colLocations, Locations)
💡 Tip: Collections improve performance and enable offline usage.
Step 3: Create the Country Dropdown
- Insert a Combo Box control → rename
cmbCountry. - Set Items property:
Distinct(colLocations, Country)
- Set DisplayFields:
["Result"] - Enable Searchable for easier selection.
Step 4: Create the State Dropdown
- Insert Combo Box → rename
cmbState. - Set Items property:
Distinct(
Filter(
colLocations,
Country = cmbCountry.Selected.Result
),
State
)
- Enable Searchable
- Disable until a country is selected:
cmbState.Disabled = IsBlank(cmbCountry.Selected.Result)
Step 5: Create the City Dropdown
- Insert Combo Box → rename
cmbCity. - Set Items property:
Distinct(
Filter(colLocations, State = cmbState.Selected.Result),
City
)
- Enable Searchable
- Disable until a state is selected:
cmbCity.Disabled = IsBlank(cmbState.Selected.Result)
Step 6: Optional – Default Selections
cmbState.DefaultSelectedItems = LookUp(colLocations, Country = cmbCountry.Selected.Result, State)
cmbCity.DefaultSelectedItems = LookUp(colLocations, State = cmbState.Selected.Result, City)
💡 Tip: Defaults guide users and reduce errors.
Step 7: Test Your App
- Run the app.
- Select a Country → State → City.
- Child dropdowns update dynamically.
- Use the search boxes for fast selection.
3️⃣ Advanced Features & Tips
3.1 Searchable Dropdowns
- Use Combo Box instead of Dropdown for large datasets.
- Enable Searchable property for type-ahead filtering.
✅ Benefits: Faster selection, better UX.
3.2 Multi-Level Cascading Dropdowns
For complex hierarchies (e.g., Country → State → City → Area), extend the logic:
// State
Distinct(
Filter(
colLocations,
Country = cmbCountry.Selected.Result
),
State
)
// City
Distinct(
Filter(
colLocations,
State = cmbState.Selected.Result
),
City
)
// Area
Distinct(
Filter(
colLocations,
City = cmbCity.Selected.Result
),
Area
)
💡 Tip: Always disable child dropdowns until the parent selection is made.
3.3 Using Collections for Offline Apps
- Load data in a collection on app start.
- Use the collection for dropdowns to improve performance and allow offline usage.
3.4 Conditional Formatting & Dynamic UX
- Disable child dropdowns until the parent is selected:
cmbState.Disabled = IsBlank(cmbCountry.Selected.Result)
cmbCity.Disabled = IsBlank(cmbState.Selected.Result)
- Highlight missing selections with border color:
BorderColor = If(
IsBlank(
cmbState.Selected.Result
),
Red,
Gray
)
- Use LookUp for dynamic default values.
3.5 Performance Tips
- Use
Distinct()to remove duplicates. - Limit records with
FirstN()if needed. - Use delegable data sources (Dataverse, SQL) for >2,000 records.
- Prefer collections for offline or repeated filtering.
4️⃣ Common Issues & Fixes
| ❌ Issue | ✅ Fix |
|---|---|
| Child dropdown not updating | Use .Selected.Result or .Selected.Value |
| Large datasets slow | Use collections or delegable sources |
| Blank or incorrect defaults | Validate parent selection and use LookUp() |
5️⃣ Quick Reference Formulas
| Dropdown | Items Formula |
|---|---|
| Country | Distinct(colLocations, Country) |
| State | Distinct(Filter(colLocations, Country = cmbCountry.Selected.Result), State) |
| City | Distinct(Filter(colLocations, State = cmbState.Selected.Result), City) |
| Disabled Logic | cmbState.Disabled = IsBlank(cmbCountry.Selected.Result) |


Leave a comment