Power Bi中基于多条件两列的switch语句
Switch statement based on the two columns with multiple conditions in Power Bi
我有两列 A 和 B,两列都包含文本,有时还包含文本和数字。
我想使用 DAX 基于 A 列和 B 列按照以下规则生成新的计算列。
如果 A 列等于 DNK,B 列等于 Apple,则结果正常
如果 A 列等于 DNK,B 列不等于 Apple,则结果不正确
如果 A 列等于 DNK 且 B 列为 NA,则结果为 XX。
DNK 期望基于具有多个场景的 A 列和 B 列得到三种不同的结果,对于 ADNK 和 BJB 也是如此。
如果 A 列等于 ADNK,B 列等于 Orange,则结果正常
如果 A 列等于 ADNK,B 列不等于 Orange,则结果不正确
如果 A 列等于 ADNK 且 B 列为 NA,则结果为 XX。
如果 A 列等于 BJB,B 列等于 Apple1,则结果正常
如果 A 列等于 BJB,B 列不等于 Apple1,则结果不正确
如果 A 列等于 BJB 且 B 列为 NA,则结果为 XX。
A B RESULT
DNK APPLE OK
DNK APPLE OK
DNK ORANGE NOT OK
DNK ORANGE NOT OK
DNK APPLE OK
DNK APPLE OK
DNK NA XX
DNK NA XX
ADNK ORANGE OK
ADNK ORANGE OK
ADNK ORANGE OK
ADNK ORANGE OK
ADNK NA XX
ADNK APPLE NOT OK
ADNK APPLE NOT OK
BJB APPLE1 OK
BJB ORANGE1 NOT OK
BJB APPLE1 OK
BJB ORANGE1 NOT OK
BJB APPLE1 OK
BJB APPLE1 OK
BJB NA XX
BJB NA XX
BJB ORANGE1 NOT OK
BJB APPLE1 OK
根据你的要求,你可以通过两种方式实现
一个。通过如下优化 SWITCH
desiredColumn1 =
SWITCH (
TRUE (),
[A] <> BLANK ()
&& [B] = "NA", "XX",
[A]="DNK"&&[B]="Apple"||[A]="ADNK"&&[B]="Orange"||[A]="BJB"&&[B]="Apple1","ok",
"not ok"
)
b。通过构建白名单 Table 并在事实中迭代
desiredColumn2 =
VAR _whiteList =
DATATABLE (
"a1", STRING,
"b1", STRING,
"c1", STRING,
{
{ "DNK", "Apple", "ok" },
{ "DNK", "NA", "XX" },
{ "ADNK", "Orange", "ok" },
{ "ADNK", "NA", "XX" },
{ "BJB", "Apple1", "ok" },
{ "BJB", "NA", "XX" }
}
)
VAR _fromList =
MAXX (
FILTER (
_whiteList,
[a1] = EARLIER ( 'Table'[A] )
&& [b1] = EARLIER ( 'Table'[B] )
),
[c1]
)
RETURN
IF ( _fromList = BLANK (), "not ok", _fromList )
我有两列 A 和 B,两列都包含文本,有时还包含文本和数字。
我想使用 DAX 基于 A 列和 B 列按照以下规则生成新的计算列。
如果 A 列等于 DNK,B 列等于 Apple,则结果正常
如果 A 列等于 DNK,B 列不等于 Apple,则结果不正确
如果 A 列等于 DNK 且 B 列为 NA,则结果为 XX。
DNK 期望基于具有多个场景的 A 列和 B 列得到三种不同的结果,对于 ADNK 和 BJB 也是如此。
如果 A 列等于 ADNK,B 列等于 Orange,则结果正常
如果 A 列等于 ADNK,B 列不等于 Orange,则结果不正确
如果 A 列等于 ADNK 且 B 列为 NA,则结果为 XX。
如果 A 列等于 BJB,B 列等于 Apple1,则结果正常
如果 A 列等于 BJB,B 列不等于 Apple1,则结果不正确
如果 A 列等于 BJB 且 B 列为 NA,则结果为 XX。
A B RESULT
DNK APPLE OK
DNK APPLE OK
DNK ORANGE NOT OK
DNK ORANGE NOT OK
DNK APPLE OK
DNK APPLE OK
DNK NA XX
DNK NA XX
ADNK ORANGE OK
ADNK ORANGE OK
ADNK ORANGE OK
ADNK ORANGE OK
ADNK NA XX
ADNK APPLE NOT OK
ADNK APPLE NOT OK
BJB APPLE1 OK
BJB ORANGE1 NOT OK
BJB APPLE1 OK
BJB ORANGE1 NOT OK
BJB APPLE1 OK
BJB APPLE1 OK
BJB NA XX
BJB NA XX
BJB ORANGE1 NOT OK
BJB APPLE1 OK
根据你的要求,你可以通过两种方式实现
一个。通过如下优化 SWITCH
desiredColumn1 =
SWITCH (
TRUE (),
[A] <> BLANK ()
&& [B] = "NA", "XX",
[A]="DNK"&&[B]="Apple"||[A]="ADNK"&&[B]="Orange"||[A]="BJB"&&[B]="Apple1","ok",
"not ok"
)
b。通过构建白名单 Table 并在事实中迭代
desiredColumn2 =
VAR _whiteList =
DATATABLE (
"a1", STRING,
"b1", STRING,
"c1", STRING,
{
{ "DNK", "Apple", "ok" },
{ "DNK", "NA", "XX" },
{ "ADNK", "Orange", "ok" },
{ "ADNK", "NA", "XX" },
{ "BJB", "Apple1", "ok" },
{ "BJB", "NA", "XX" }
}
)
VAR _fromList =
MAXX (
FILTER (
_whiteList,
[a1] = EARLIER ( 'Table'[A] )
&& [b1] = EARLIER ( 'Table'[B] )
),
[c1]
)
RETURN
IF ( _fromList = BLANK (), "not ok", _fromList )