See your company like never before
Power BI deep-dives, migration playbooks, and data strategy for enterprise teams.


Join dozens of organizations who have moved to Beyond The Analytics. Book your personalized demo today
Build multi-parameter scenario models in Power BI with what-if parameters, GENERATESERIES, and DAX patterns for revenue and margin forecasting.
Quick answer: What-if parameters are interactive sliders in Power BI that let report users adjust numeric assumptions — price, volume, cost, discount rate — and instantly see the impact on calculated measures, without changing the underlying data.
Most tutorials introduce what-if parameters as a slider that adjusts a single number. That undersells their value. In practice, what-if parameters are the foundation of scenario analysis in Power BI: they let finance teams and executive stakeholders model "what happens if we raise prices by 8%?" or "what happens if headcount grows by 30?" directly inside a report, with no developer intervention.
The feature works by generating a calculated table using the DAX GENERATESERIES function, then exposing that table as a slicer. When a user moves the slider, a companion measure captures the selected value via SELECTEDVALUE, and every dependent measure recalculates instantly. No data refresh, no Power Query reload — just real-time recalculation in the VertiPaq engine.
This guide covers multi-parameter scenario models, DAX patterns for revenue and margin sensitivity, GCC-specific use cases like VAT modelling and currency scenarios, and the practical limitations you need to know before building production reports. If you are new to DAX, our CALCULATE deep dive covers the filter context fundamentals that underpin every measure here.
Quick answer: Go to the Modeling tab, select New Parameter, choose Numeric Range, set your minimum, maximum, and increment, and Power BI automatically creates a calculated table, a companion measure, and an optional slicer.
Here is the process, as documented in the official Microsoft Learn guide:
Price Adjustment %.-20), Maximum (e.g., 20), and Increment (e.g., 1).0 for no adjustment).Power BI generates three things behind the scenes:
| Component | What It Does |
|---|---|
| Calculated table | GENERATESERIES(-20, 20, 1) — a single-column table containing every value from -20 to 20 in steps of 1 |
| Companion measure | SELECTEDVALUE('Price Adjustment %'[Price Adjustment %], 0) — returns the slider's current position, defaulting to 0 |
| Slicer visual | A slider control bound to the calculated table, placed on the report canvas |
The calculated table is disconnected — it has no relationship to your fact or dimension tables. It influences your model only through measures that reference its SELECTEDVALUE companion. This is an important architectural point: what-if parameters do not filter your data. They inject a user-controlled variable into your DAX calculations.
The second argument to SELECTEDVALUE is the alternate result — the value returned when no single item is selected. Setting this to 0 means "no adjustment" is the default, keeping baseline calculations intact when users have not touched the slider.
Quick answer: Create separate what-if parameters for each variable (price, volume, cost), then combine their SELECTEDVALUE measures in a single DAX measure that calculates the scenario-adjusted result.
Single-parameter models are useful for quick sensitivity checks, but real decisions involve multiple moving variables. A pricing change affects revenue, which affects margin, which changes break-even volume. Modelling these interactions requires combining two or more what-if parameters in the same measure.
| Parameter | Min | Max | Increment | Default |
|---|---|---|---|---|
| Price Change % | -30 | 30 | 1 | 0 |
| Volume Change % | -30 | 30 | 1 | 0 |
| Cost Change % | -20 | 20 | 1 | 0 |
Start with your baseline, then layer the parameter adjustments:
Baseline Revenue =
SUMX(
Sales,
Sales[Quantity] * Sales[Unit Price]
)Scenario Revenue =
SUMX(
Sales,
Sales[Quantity]
* (1 + [Volume Change % Value] / 100)
* Sales[Unit Price]
* (1 + [Price Change % Value] / 100)
)Scenario COGS =
SUMX(
Sales,
Sales[Quantity]
* (1 + [Volume Change % Value] / 100)
* Sales[Unit Cost]
* (1 + [Cost Change % Value] / 100)
)Scenario Margin % =
DIVIDE(
[Scenario Revenue] - [Scenario COGS],
[Scenario Revenue]
)Create card visuals for both Baseline Revenue and Scenario Revenue, or use a clustered bar chart. The delta measure tells the story:
Revenue Impact % =
DIVIDE(
[Scenario Revenue] - [Baseline Revenue],
[Baseline Revenue]
)When a finance director moves the price slider to +5%, volume to -3%, and cost to +2%, every visual recalculates simultaneously — scenario analysis that would take a spreadsheet model hours to set up, delivered in a governed Power BI report.
Quick answer: Use measure branching — start with atomic base measures, then compose scenario-adjusted variants that multiply or offset by the what-if parameter values, keeping each layer independently testable.
A common GCC retail scenario — what happens when you apply a promotional discount?
Discounted Revenue =
[Baseline Revenue] * (1 - [Discount % Value] / 100)Discount Cost =
[Baseline Revenue] - [Discounted Revenue]Place the discount parameter on the X axis of a line chart with Discounted Revenue as the value to visualise the revenue erosion curve across the full discount range.
For CFOs who want to see how margin responds to simultaneous price and cost changes, build a matrix visual with Price Change % on rows and Cost Change % on columns, using Scenario Margin % as the value. The result is a sensitivity table showing margin at every combination — directly analogous to Excel's two-variable data table, but interactive and filterable by product line, region, or time period.
Break-Even Units =
DIVIDE(
SUM( CostCenter[Fixed Cost] ),
DIVIDE(
[Scenario Revenue] - [Scenario COGS],
SUMX( Sales, Sales[Quantity] * (1 + [Volume Change % Value] / 100) )
)
)This recalculates dynamically as users adjust parameters — giving operations teams an instant read on units needed under different pricing scenarios.
Quick answer: What-if parameters create a DAX calculated table and slicer for interactive scenario modelling at report time; Power Query parameters control data connections at refresh time; field parameters let users switch which columns or measures appear in visuals.
This three-way distinction causes consistent confusion. As RADACAD documents in detail, these parameter types operate in different layers of the Power BI stack:
| Aspect | What-If Parameter | Power Query Parameter | Field Parameter |
|---|---|---|---|
| Created in | Modeling tab | Power Query Editor | Modeling tab |
| Stored as | DAX table + measure | M query value | DAX calculated table |
| Takes effect | Instantly (DAX recalc) | After data refresh | Instantly (visual swap) |
| Purpose | Scenario modelling | Dynamic source paths | Switching displayed fields |
A Power Query parameter might hold a file path like \\server\finance\2026\ that changes which folder gets loaded at refresh time. A what-if parameter holds a growth rate of 8% that adjusts a revenue projection when the slicer moves. A field parameter lets users toggle a chart between revenue, profit, and volume. One shapes data before it enters the model; the second shapes calculations; the third shapes visual presentation.
Quick answer: The primary constraints are a 1,000-value cap on the generated table, slicer sampling that rounds user inputs, and the lack of relationship-based filtering — all with documented workarounds.
The slicer visual behind a what-if parameter caps display at approximately 1,002 values via the SAMPLE function. If your range and increment produce more — say, 0 to 100 in steps of 0.1 (1,001 values) — the slicer samples evenly, and users cannot select every value.
Workaround: Reduce granularity, narrow the range, or build a manual disconnected table with exactly the values you need.
When sampling occurs, users may type 7.09 and see it snap to 7.12. For financial models where precision matters, use a dropdown slicer instead of a slider, or keep the value count under 1,000.
What-if tables are disconnected — no relationships, no RLS support, no cross-filtering. The parameter value is available only through its SELECTEDVALUE measure.
Parameters can only be created or modified in Power BI Desktop, not in the Power BI Service or Fabric web authoring. Users in the Service can interact with sliders but cannot change the parameter definition.
Quick answer: GCC enterprises use what-if parameters for VAT impact modelling, currency scenario planning for non-pegged currencies, headcount scaling under Vision 2030 hiring growth, and oil price sensitivity on project budgets.
The UAE applies VAT at 5%, while Saudi Arabia raised its rate to 15% in July 2020. Create a VAT Rate % what-if parameter (min: 0, max: 20, increment: 0.5):
Revenue Incl VAT =
[Baseline Revenue] * (1 + SELECTEDVALUE('VAT Rate %'[VAT Rate %], 5) / 100)This lets finance teams model "what if UAE raises VAT to 8%?" — a question that appears in every quarterly planning cycle for multi-country GCC operations.
The AED is pegged to the USD at 3.6725 and the SAR at 3.75, but businesses still need to model exchange rate sensitivity for non-pegged currencies (GBP, EUR, INR) that affect supply chain and expatriate payroll costs:
Adjusted Import Cost =
[Baseline Import Cost] * (1 + [FX Rate Adjustment % Value] / 100)With 64% of GCC CEOs planning headcount increases according to PwC's 2025 CEO Survey, workforce cost modelling is high-priority:
Projected Headcount Cost =
[Current Headcount Cost]
+ SELECTEDVALUE('New Hires'[New Hires], 0)
* [Average Loaded Cost Per Employee]The loaded cost measure should include salary, housing allowance, medical insurance, and end-of-service gratuity — standard GCC compensation components that push per-head cost well above base salary.
Quick answer: Combine what-if parameters with bookmarks for named scenarios, conditional formatting for threshold alerts, and SWITCH-based measures for side-by-side scenario comparison.
Create Base Case, Optimistic, and Pessimistic bookmarks — each with sliders at predefined positions. Users click a button to switch between scenarios without manually adjusting sliders, which is essential for board-ready reports shared across GCC offices.
Margin Alert =
IF( [Scenario Margin %] < 0.15, "Below Target", "On Track" )Use this to drive background colours on cards or table cells — red when margin drops below 15%, green when it holds.
Use a SWITCH pattern to display multiple pre-set scenarios in a single matrix without requiring slider interaction:
Scenario Label =
SWITCH(
SELECTEDVALUE('Scenario'[Scenario]),
1, "Base Case",
2, "Optimistic (+10% Volume, -5% Cost)",
3, "Pessimistic (-10% Volume, +8% Cost)"
)If you are migrating scenario models from Excel into Power BI, our Excel to Power BI migration guide covers how to translate Data Tables, Goal Seek, and Solver patterns into DAX-based approaches.
No. The slicer visual samples values when the generated table exceeds approximately 1,000 rows. For finer granularity, create a manual disconnected table using DATATABLE or import a custom value list from Power Query. This bypasses the GENERATESERIES constraint while preserving the same SELECTEDVALUE measure pattern.
Users can interact with sliders in the Power BI Service and in embedded reports. However, the parameter definition — table, range, and increment — can only be created or modified in Power BI Desktop.
What-if parameters inject a user-controlled numeric value into DAX calculations — they answer "what happens if this number changes?" Field parameters let users switch which measures or columns appear in a visual — they answer "which metric do I want to see?" The two features solve different problems and can be used together.
Power Query parameters operate at data refresh time — they control source connections and transformation logic in M code. What-if parameters operate at report interaction time — they adjust DAX calculations instantly without a data refresh. One shapes what data enters the model; the other shapes how that data is calculated.
No. What-if parameter tables are disconnected from the data model and cannot be referenced in RLS role definitions. For scenario-based security, build that logic into your data model using standard dimension tables with relationships.
This occurs when the parameter generates more than approximately 1,000 values. The slicer applies sampling via the SAMPLE function, distributing selections evenly across the range. The fix is to reduce the range, increase the increment, or switch the slicer to dropdown format.
Create a "Reset to Defaults" bookmark with all sliders at their default positions, then add a button linked to that bookmark. Users can also clear individual slicer selections using the eraser icon to revert to the default value.
Yes. What-if parameters modify measure calculations, not filter context on date dimensions. You can create a Growth Rate % parameter and apply it to a DATEADD-based forecast measure to project next year's revenue at different assumed growth rates. The time intelligence function handles date shifting; the what-if parameter controls the growth multiplier.
The impact is minimal for most reports. Each parameter adds a small disconnected table (under 1,000 rows) and a SELECTEDVALUE measure. The real cost is in measure complexity — a formula multiplying five parameters over a million-row fact table is slower than a simple sum, but that is a measure design issue, not a parameter issue. Optimise your base measures before layering scenario adjustments.
Microsoft Partner · Dubai
Your business intelligence partner for the GCC
Have a data challenge or a project in mind? Reach out and let's explore how we can help.
Clients we've worked with






