0

我有两列是 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 列等于橙色,则结果正常

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

在此处输入图像描述

4

1 回答 1

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"
)

解决方案

湾。通过构建一个白名单表并在事实上对其进行迭代

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 )
于 2021-10-22T21:58:52.410 回答