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 ,try below measure
In DAX, you can implement the logic from your SQL query using the IF and LOOKUPVALUE functions. Here's an example of how you can write the DAX expression:
WarehouseCode =
IF (
'WarehouseActivity'[WarehouseCode] = "---",
ISNULL (
LOOKUPVALUE(
'WarehouseSite'[WarehouseSiteCode],
'WarehouseSite'[WarehouseCode],
'WarehouseActivity'[WarehouseCode]
),
"---"
),
'WarehouseActivity'[WarehouseCode]
)- JenniferZen3 years agoRegular Visitor
Hi,
Thank you for you help!
I will have to add sum to the final line , right ?
- Anonymous3 years agoNot applicable
- JenniferZen3 years agoRegular Visitor
Thanks for your help .. I am not able to get it to work ..