Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now! Learn more
Hi,
I have to do a variance analysis between actuals, forecast and budget but also devided into fx variance and operational variance. for this I have the following Power Query (simplified):
| Item | Version | Amount EUR | FX | USD @ ActualsFX | USD@ForecastFX | USD@BudgetFX |
| Salary | Actuals | 500 | 1,075 | 537,5 | 535 | 550 |
| T&E | Actuals | 600 | 1,075 | 645 | 642 | 660 |
| Other | Actuals | 800 | 1,075 | 860 | 856 | 880 |
| Salery | Forecast | 1000 | 1,07 | 1075 | 1070 | 1100 |
| T&E | Forecast | 600 | 1,07 | 645 | 642 | 660 |
| Other | Forecast | 800 | 1,07 | 860 | 856 | 880 |
| Salery | Budget | 400 | 1,1 | 430 | 428 | 440 |
| T&E | Budget | 600 | 1,1 | 645 | 642 | 660 |
| Other | Budget | 900 | 1,1 | 967,5 | 963 | 990 |
In Power Bi I have a slicer and I can select the Version.
First Example, the selection is "Actuals" and "Forecast" and the PowerBi Report should look like the following:
| Actuals | Forecast | Variance | Actuals@ForecastFX | FX Variance | Operational Variance | |
| Salary | 537,5 | 1070 | -532,5 | 535 | 2,5 | -535 |
| T&E | 645 | 642 | 3 | 642 | 3 | 0 |
| Other | 860 | 856 | 4 | 856 | 4 | 0 |
| Total | 2042,5 | 2568 | -525,5 | 2033 | 9,5 | -535 |
Second Example, the selection is "Actuals" and "Budget" and the PowerBi Report should look like the following:
| Actuals | Budget | Variance | Actual@BudgetFX | FX Variance | Operational Variance | |
| Salary | 537,5 | 428 | 109,5 | 550 | -12,5 | 122 |
| T&E | 645 | 642 | 3 | 660 | -15 | 18 |
| Other | 860 | 963 | -103 | 880 | -20 | -83 |
| Total | 2042,5 | 2033 | 9,5 | 2090 | -47,5 | 57 |
That means, dependent on what I select in the slicer the colmuns right next to "Variance" should show either "Actuals@ForecastFX" or "Actuals@BudgetFX". Any plan how I could solve this?
Thanks
Hi @rainer_muc ,
Per my test I could not achieve your issue based on slicer, as a workaround, consider using calculated table as shown below:
VarianceCalculationTable =
VAR SalaryActuals = CALCULATE(MAX('Table'[USD@ActualsFX]), 'Table'[Item] = "Salary", 'Table'[Version] = "Actuals")
VAR SalaryForecast = CALCULATE(MAX('Table'[USD@ForecastFX]), 'Table'[Item] = "Salary", 'Table'[Version] = "Forecast")
VAR SalaryFX = CALCULATE(MAX('Table'[FX]), 'Table'[Item] = "Salary")
VAR TEActuals = CALCULATE(MAX('Table'[USD@ActualsFX]), 'Table'[Item] = "T&E", 'Table'[Version] = "Actuals")
VAR TEForecast = CALCULATE(MAX('Table'[USD@ForecastFX]), 'Table'[Item] = "T&E", 'Table'[Version] = "Forecast")
VAR TEFX = CALCULATE(MAX('Table'[FX]), 'Table'[Item] = "T&E")
VAR OtherActuals = CALCULATE(MAX('Table'[USD@ActualsFX]), 'Table'[Item] = "Other", 'Table'[Version] = "Actuals")
VAR OtherForecast = CALCULATE(MAX('Table'[USD@ForecastFX]), 'Table'[Item] = "Other", 'Table'[Version] = "Forecast")
VAR OtherFX = CALCULATE(MAX('Table'[FX]), 'Table'[Item] = "Other")
VAR SalaryActualsForecastFX = CALCULATE(MAX('Table'[USD@ForecastFX]), 'Table'[Item] = "Salary", 'Table'[Version] = "Actuals")
VAR TEActualsForecastFX = CALCULATE(MAX('Table'[USD@ForecastFX]), 'Table'[Item] = "T&E", 'Table'[Version] = "Actuals")
VAR OtherActualsForecastFX = CALCULATE(MAX('Table'[USD@ForecastFX]), 'Table'[Item] = "Other", 'Table'[Version] = "Actuals")
RETURN
UNION(
SELECTCOLUMNS(
ROW(
"Item", "Salary",
"Actuals", SalaryActuals,
"Forecast", SalaryForecast,
"Variance", SalaryActuals - SalaryForecast,
"Actuals@ForecastFX", SalaryActualsForecastFX,
"FX Variance", SalaryActuals - SalaryActualsForecastFX,
"Operational Variance", (SalaryActuals - SalaryActualsForecastFX) - (SalaryActuals - SalaryForecast)
),
"Item", [Item],
"Actuals", [Actuals],
"Forecast", [Forecast],
"Variance", [Variance],
"Actuals@ForecastFX", [Actuals@ForecastFX],
"FX Variance", [FX Variance],
"Operational Variance", [Operational Variance]
),
SELECTCOLUMNS(
ROW(
"Item", "T&E",
"Actuals", TEActuals,
"Forecast", TEForecast,
"Variance", TEActuals - TEForecast,
"Actuals@ForecastFX", TEActualsForecastFX,
"FX Variance", TEActuals-TEActualsForecastFX ,
"Operational Variance", (TEActuals-TEActualsForecastFX)-(TEActuals - TEForecast)
),
"Item", [Item],
"Actuals", [Actuals],
"Forecast", [Forecast],
"Variance", [Variance],
"Actuals@ForecastFX", [Actuals@ForecastFX],
"FX Variance", [FX Variance],
"Operational Variance", [Operational Variance]
),
SELECTCOLUMNS(
ROW(
"Item", "Other",
"Actuals", OtherActuals,
"Forecast", OtherForecast,
"Variance", OtherActuals - OtherForecast,
"Actuals@ForecastFX", OtherActualsForecastFX,
"FX Variance", OtherActuals-OtherActualsForecastFX ,
"Operational Variance", (OtherActuals-OtherActualsForecastFX)-(OtherActuals - OtherForecast)
),
"Item", [Item],
"Actuals", [Actuals],
"Forecast", [Forecast],
"Variance", [Variance],
"Actuals@ForecastFX", [Actuals@ForecastFX],
"FX Variance", [FX Variance],
"Operational Variance", [Operational Variance]
)
)
Result:
Use the same logic for the Actual and Budget table.
Best regards,
Joyce
If this post helps, then please consider Accept it as the solution to help the other members find it more quickly.
The Power BI Data Visualization World Championships is back! Get ahead of the game and start preparing now!
| User | Count |
|---|---|
| 41 | |
| 39 | |
| 37 | |
| 29 | |
| 24 |
| User | Count |
|---|---|
| 122 | |
| 110 | |
| 83 | |
| 69 | |
| 68 |