Forum Discussion
DAX for Case statement
- Anonymous3 years ago
Here is a working example that (I think) solves your problem.
Kudos is appreciated if the solution was useful 😀
Code for reproducing the tables used in the solution is included.
Steps for creating a summarized table that implements the desired logic for summarizing activites from 2 different tables in Power BI:
0) Genereate reproducible data:
Table Warehouse ActivityWarehouseActivity = UNION( SELECTCOLUMNS( ROW( "WarehouseCodeKey", 1, "WarehouseCode", "A", "WarehouseActivity", 10 ), "WarehouseCodeKey", [WarehouseCodeKey], "WarehouseCode", [WarehouseCode], "WarehouseActivity", [WarehouseActivity] ), SELECTCOLUMNS( ROW( "WarehouseCodeKey", 2, "WarehouseCode", "B", "WarehouseActivity", 20 ), "WarehouseCodeKey", [WarehouseCodeKey], "WarehouseCode", [WarehouseCode], "WarehouseActivity", [WarehouseActivity] ), SELECTCOLUMNS( ROW( "WarehouseCodeKey", 3, "WarehouseCode", "---", "WarehouseActivity", 30 ), "WarehouseCodeKey", [WarehouseCodeKey], "WarehouseCode", [WarehouseCode], "WarehouseActivity", [WarehouseActivity] ) )
Table WareHouseSiteCodeWarehousSiteCode = SELECTCOLUMNS( ROW( "WarehouseCodeKey", 3, "WarehouseCode", "---", "WarehouseActivity", 40 ), "WarehouseCodeKey", [WarehouseCodeKey], "WarehouseCode", [WarehouseCode], "WarehouseActivity", [WarehouseActivity] )
1) In Power BI model view:
Connect your tables
- WareHouseActivity and
- WareHouseSiteCode
using warehouseCodeKey
2) Add column WarehouseActivityAdjused in table WareHouseActivity based on the sum-logic you described:WareHouseActivityAdjusted = IF( [WarehouseCode] = "---", LOOKUPVALUE( WarehousSiteCode[WarehouseActivity], WarehousSiteCode[WarehouseCode], "---" ), [WarehouseActivity] ), as shown in snip below:
3) Add a summary table that summarizes the data by WareHouseCodeWareHouseActivity summarized = SUMMARIZE( WarehouseActivity, WarehouseActivity[WarehouseCode], " WareHouseActivityAdjusted sum ", SUM(WarehouseActivity[WareHouseActivityAdjusted]) ), as shown in snippet below.
4) Connect summarized table to datamodel for filtering:
In order to filter the summarized table using your first table, you can connect them as shown below:
🤺Result:
First table can be used as slicer /filter:An equal solution using a simple SQL join and CASE statement is included here:
# 0) Generate test data WITH warehouseActivity AS( SELECT 1 AS WarehouseCodeKey, "A" AS WarehouseCode, 10 AS WarehouseActivity UNION ALL SELECT 2 AS WarehouseCodeKey, "B" AS WarehouseCode, 20 AS WarehouseActivity UNION ALL SELECT 3 AS WarehouseCodeKey, "---" AS WarehouseCode, 30 AS WarehouseActivity ), WarehousSiteCode AS( SELECT 3 AS WarehouseCodeKey, "---" AS WarehouseCode, 40 AS WarehouseActivity ) # SUM WareHouseActivity by WarehouseCode. # If WareHouseCode meet condition, use value from table WarehousSiteCode SELECT a.WarehouseCode, SUM( CASE WHEN a.WarehouseCode="---" THEN b.WarehouseActivity ELSE a.WareHouseActivity END ) AS WarehouseActivity FROM warehouseActivity a LEFT JOIN WarehousSiteCode b ON a.WarehouseCodeKey=b.WarehouseCodeKey GROUP BY WarehouseCode
JenniferZen
Please Accept as Solution if resolved your problem.
Hi,
Thank you for you help!
I will have to add sum to the final line , right ?
- JenniferZen3 years agoRegular Visitor
Thanks for your help .. I am not able to get it to work ..