【问题标题】:Switch statement based on the two columns with multiple conditions in Power BiPower Bi中基于多条件两列的switch语句
【发布时间】:2021-12-09 11:21:41
【问题描述】:

我有两列是 A 和 B,两列都包含文本,有时包含文本和数字。

我想使用基于 A 列和 B 列的 DAX 生成新的计算列,并遵循以下规则。

如果 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

【问题讨论】:

    标签: if-statement switch-statement dax daxstudio


    【解决方案1】:

    根据您的要求,您可以通过两种方式实现它

    一个。通过优化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.通过构建一个白名单表并在事实上进行迭代

    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 列中有 50 种不同的文本。(例如 - A 列,例如 DNK、ADNK、BJB、AJB、TTR、KAJ 等……而 B 列 Apple、Banana、Orange、Apple1 也是如此…… ..Apple2)每个名称都分配给每个产品,因此每次都维护参数很痛苦。如果可能的话,您能否告知是否有任何替代解决方案?我知道您已经给出了实现我想要的结果的最佳方法。
    • 如果我维护两个不同的表数据和条件表,那么有可能制作一个 DAX 公式吗?能否请您指教。
    • 特此附上文件供您参考dropbox.com/s/95vdwtijjttnx8o/… 我创建了两个表数据和条件,我应用以下公式 DR3 = IF(DATA[B]="NA","XX",IF ((DATA[A],DATA[B]) IN SUMMARIZE(CONDTION,CONDTION[A],CONDTION[B]),"OK","NOT OK")) 并且它给出了正确的结果,但我不确定它是否正确的方法。能否请您指教。
    • 是的,你可以按照这个方法。
    • 非常感谢您的回复和确认
    猜你喜欢
    • 2021-11-30
    • 2023-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多