Creating Dependent Dropdown Menus in Power Apps
Guide to building cascading dropdowns that limit choices based on prior selections, with step-by-step implementation.
Cascading dropdowns, also called dependent dropdowns, guide users through a series of choices where each selection restricts the next. For example, selecting a product category limits the available suppliers, and then choosing a supplier shows only the products they offer. This approach reduces errors and simplifies data entry in Power Apps.
Building an Office Supply Ordering App
Consider an internal app for ordering office supplies. Employees pick a category, then a supplier, and finally a specific product. The catalog data lives in a SharePoint list called Catalog with these columns:
- Category (text)
- Supplier (text)
- Product (text)
Sample data in the list:
| Category | Supplier | Product |
|---|---|---|
| Paper | Staples | A4 copy paper 500 sheets |
| Paper | Staples | Premium glossy paper |
| Paper | OfficeMax | A4 recycled paper |
| Pens | Pilot | G2 gel pen blue |
| Pens | Pilot | G2 gel pen black |
| Pens | Sharpie | Permanent marker fine point |
| Furniture | Ikea | Standing desk |
| Furniture | Ikea | Task chair |
| Furniture | OfficeMax | Desk lamp LED |
A second SharePoint list, Orders, stores completed requests with columns for Category, Supplier, and Product (plus the built-in Created By and Created columns).
Setting Up the App
- In Power Apps Studio, start a blank app.
- Connect both SharePoint lists as data sources.
- Add three label + dropdown pairs: Category, Supplier, and Product. Name them
ddlCategory,ddlSupplier, andddlProduct. - Add a Submit button.
Populating the Dropdowns
Category Dropdown – Distinct Values
The first dropdown shows every unique category. Use Distinct to avoid duplicates.
Distinct(Catalog, Category)
Supplier Dropdown – Filtered by Selected Category
The second dropdown displays only suppliers that belong to the chosen category. Combine Filter and Distinct.
Distinct( Filter(Catalog, Category = ddlCategory.Selected.Value), Supplier )
Product Dropdown – Filtered by Both Category and Supplier
The third dropdown shows products matching both prior selections. This prevents errors if the same supplier name appears under multiple categories.
Filter( Catalog, Category = ddlCategory.Selected.Value && Supplier = ddlSupplier.Selected.Value )
Now the dropdowns cascade. But we need three more refinements: blank defaults, resets on parent change, and disabled child dropdowns.
Adding Blank Options
Without a blank option, child dropdowns automatically show the first filtered item when a parent changes, which is confusing. Prepend a blank row using Ungroup and Table.
Ungroup(
Table(
{Value: Blank()},
{Value: Distinct(Catalog, Category)}
),
"Value"
)Ungroup(
Table(
{Value: Blank()},
{Value: Distinct(
Filter(Catalog, Category = ddlCategory.Selected.Value),
Supplier
)}
),
"Value"
)Ungroup(
Table(
{Value: Blank()},
{Value: Filter(
Catalog,
Category = ddlCategory.Selected.Value && Supplier = ddlSupplier.Selected.Value
)}
),
"Value"
)Set the Default property of each dropdown to Blank().
Resetting When Parent Changes
When a category changes, the supplier and product dropdowns should clear. Likewise, changing the supplier clears the product.
Add this to the OnChange property of ddlCategory:
Reset(ddlSupplier); Reset(ddlProduct);
Add this to OnChange of ddlSupplier:
Reset(ddlProduct);
Disabling Dropdowns Until Previous Selection
Prevent users from selecting a supplier before a category is chosen. Set the DisplayMode property of ddlSupplier:
If( IsBlank(ddlCategory.Selected.Value), DisplayMode.Disabled, DisplayMode.Edit )
Similarly for ddlProduct:
If( IsBlank(ddlSupplier.Selected.Value), DisplayMode.Disabled, DisplayMode.Edit )
Saving the Order to a SharePoint List
Add a Submit button and place this code in its OnSelect:
// Save order to the Orders list
Patch(
Orders,
Defaults(Orders),
{
Category: ddlCategory.Selected.Value,
Supplier: ddlSupplier.Selected.Value,
Product: ddlProduct.Selected.Value
}
);
// Reset all dropdowns for the next entry
Reset(ddlCategory);
Reset(ddlSupplier);
Reset(ddlProduct);Performance and Delegation Considerations
When your SharePoint list exceeds 2,000 items, Distinct and Filter may only return the first batch unless you apply additional filters or switch to a delegation‑safe source like Dataverse or SQL. For moderate lookup tables, the pattern above works well; for larger catalogs, consider a different data source.
Common Mistakes and Troubleshooting
- Filtering not working: Verify column names exactly match your SharePoint list. Use
.Valuewhen referencing a text column from a dropdown:ddlCategory.Selected.Value. - Resets have no effect: Ensure the child dropdown’s Default property is
Blank(). The Reset function returns the control to its default value. - Child dropdowns not clearing on parent change: Did you add the Reset calls to the parent’s OnChange?
- Blank option missing: The Ungroup trick requires the inner table to have a column named
Value. If your data source column has a different name, wrap it accordingly.
Final Recommendation
Cascading dropdowns are a simple but powerful pattern to constrain user input. By combining Distinct, Filter, Ungroup, and Reset, you can build a smooth, error‑proof selection experience. Always test with your actual data volume and adjust for delegation if needed.
References
- Original article: Create Cascading (Dependent) Dropdowns In Power Apps – Matthew Devaney
- Microsoft Learn: Use cascading dropdowns in Power Apps (search “cascading dropdowns Power Apps”)
- Microsoft Learn: Delegation overview for Power Apps (search “delegation power apps”)
Learn how small coding practices—like using descriptive names, flattening conditions, and simplifying logic—can make your apps easier to update and less error-prone.
Move past the gallery and discover the hidden patterns for validation, navigation, and smart submission handling in your data entry forms.
PowerShell unlocks admin capabilities that the Power Platform admin center simply doesn’t offer—from recovering deleted apps to blocking trial licenses. Here’s how to wield them safely.