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 )