🚀Advanced Cascading Dropdowns in Power Apps: Step-by-Step Guide with Examples

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:

CountryStateCity
USANYNew York
USACALos Angeles
IndiaMHMumbai

💡 Tip: Cascading dropdowns prevent invalid selections and improve user experience.


2️⃣ End-to-End Example: Country → State → City

Step 1: Prepare the Data Source

  1. Create a SharePoint list Locations with columns: Country, State, City.
  2. Populate it with hierarchical data (as above).
  3. 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

  1. Insert a Combo Box control → rename cmbCountry.
  2. Set Items property:
Distinct(colLocations, Country)
  1. Set DisplayFields: ["Result"]
  2. Enable Searchable for easier selection.

Step 4: Create the State Dropdown

  1. Insert Combo Box → rename cmbState.
  2. Set Items property:
Distinct(
    Filter(
        colLocations, 
        Country = cmbCountry.Selected.Result
    ),
    State
)
  1. Enable Searchable
  2. Disable until a country is selected:
cmbState.Disabled = IsBlank(cmbCountry.Selected.Result)

Step 5: Create the City Dropdown

  1. Insert Combo Box → rename cmbCity.
  2. Set Items property:
Distinct(
    Filter(colLocations, State = cmbState.Selected.Result),
    City
)
  1. Enable Searchable
  2. 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

  1. Run the app.
  2. Select a CountryStateCity.
  3. Child dropdowns update dynamically.
  4. 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 updatingUse .Selected.Result or .Selected.Value
Large datasets slowUse collections or delegable sources
Blank or incorrect defaultsValidate parent selection and use LookUp()

5️⃣ Quick Reference Formulas

DropdownItems Formula
CountryDistinct(colLocations, Country)
StateDistinct(Filter(colLocations, Country = cmbCountry.Selected.Result), State)
CityDistinct(Filter(colLocations, State = cmbState.Selected.Result), City)
Disabled LogiccmbState.Disabled = IsBlank(cmbCountry.Selected.Result)

Leave a comment

About Me

Hi! I’m Ayush Purohit — a tech enthusiast who loves building solutions, exploring new tools, and sharing practical tips. This blog is where I break down complex concepts into simple, actionable advice to help you learn, experiment, and grow in your tech journey.