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.
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 Activity
WarehouseActivity =
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 WareHouseSiteCode
WarehousSiteCode =
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 WareHouseCode
WareHouseActivity summarized = SUMMARIZE(
WarehouseActivity,
WarehouseActivity[WarehouseCode],
"
WareHouseActivityAdjusted sum
", SUM(WarehouseActivity[WareHouseActivityAdjusted])
)
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.
- JenniferZen3 years agoRegular Visitor
Thank you very much for the detailed answer. Really appreciate it! 🙂
- Anonymous3 years agoNot applicable
Glad hear that the solution worked 🙂