Forum Discussion
DAX for Case statement
Hi,
Can someone please guide me as to how I can implement this case logic in DAX ?
SELECT
CASE WHEN WarehouseCode = '---' THEN ISNULL(WarehouseSiteCode,'---')
ELSE WarehouseCode END AS WarehouseCode ,
sum(Warehouseactivity) from warehouseActivity wa
left join dbo.warehouse dw on wa.WarehouseCodeKey=dw.WarehouseCodekey
left join dbo.WarehouseSite ws on dw.WarehouseCodekey=ws.WarehouseCodekey
Basically what I am doing is to find the sum of the activity based on a warehouse code but if the code is like '---' in the first table then it should look up the value into another table called WarehouseSiteCode to match on the code and return the sum , even if the user has just selected the first table in the filter ?
Thanks in advance
- 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.
9 Replies
- AnonymousNot applicable
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:
lessWarehouseCode = IF ( 'WarehouseActivity'[WarehouseCode] = "---", ISNULL ( LOOKUPVALUE( 'WarehouseSite'[WarehouseSiteCode], 'WarehouseSite'[WarehouseCode], 'WarehouseActivity'[WarehouseCode] ), "---" ), 'WarehouseActivity'[WarehouseCode] )- JenniferZenRegular Visitor
Hi,
Thank you for you help!
I will have to add sum to the final line , right ?
- AnonymousNot applicable
- AnonymousNot applicable
HI JenniferZen ,
please share the screenshot of the data you are getting.
- JenniferZenRegular Visitor
Thank you. Got it working like the Anonymous suggested. Appreciate all of your inputs 🙂
- AnonymousNot applicable
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.- JenniferZenRegular Visitor
Thank you very much for the detailed answer. Really appreciate it! 🙂
- AnonymousNot applicable
Glad hear that the solution worked 🙂