使用 IF 语句的 SSAS 表格 DAX

SSAS Tabular DAX using of IF Statement

我在 SQL 中写了这个查询:

SELECT
   CustomerId,
   CustomerType,
   CASE WHEN CustomerStatus = 'VIP' 
        THEN CustomerDiscountType
        ELSE NULL
   END AS CustomerDiscountType
FROM Customer

我想在 DAX 查询中这样写: 我知道我可以这样写:

EVALUATE
(
    SUMMARIZE
    (
        'Customer',
        'Customer'[CustomerId],
        'Customer'[Type],
        'Customer'[DiscountType],
        "Customer VIP", IF('Customer'[Status] = "VIP", 'Customer'[DiscountType], BLANK())
    )
)

但是当我写 if 条件时,我也需要在那个查询中包含属性 'Customer'[DiscountType],但是我想写那个 IF 的列名陈述 "DiscountType",但我不可能像下面这样。

EVALUATE
(
    SUMMARIZE
    (
        'Customer',
        'Customer'[CustomerId],
        'Customer'[Type],
        "DiscountType", IF('Customer'[Status] = "VIP", 'Customer'[DiscountType], BLANK())
    )
)

由于存在 DiscountType 列,它失败并出现此错误: 函数 'SUMMARIZE' 无法添加列 [DiscountType],因为它已经存在。

您可以使用 SELECTCOLUMNS 函数代替 SUMMARIZE。我认为错误是由于 IF 函数 returns DiscountType 列引起的,它已经存在于您的 Customer table 中。此外,我不确定 SUMMARIZE 是否可以在没有像 DAX 表达式中使用的任何聚合的情况下工作。

试试这个表达式:

EVALUATE
 (
    SELECTCOLUMNS (
        'Customer',
        "CustomerId", 'Customer'[CustomerId],
        "Type", 'Customer'[Type],
        "DiscountType", IF ( 'Customer'[Status] = "VIP", 'Customer'[DiscountType], BLANK () )
    )
)

更新: OP 通过评论告诉我们使用的版本是 SSAS 2014,它不支持 SELECTCOLUMNS 函数。

您可以混合使用 SUMMARIZEADDCOLUMNS 函数来获得预期结果。

EVALUATE
 (
    SUMMARIZE (
        ADDCOLUMNS (
            ADDCOLUMNS (
                DISTINCT ( Customer[CustomerID] ),
                "Type", CALCULATE ( VALUES ( Customer[Type] ) ),
                "Status", CALCULATE ( VALUES ( Customer[Status] ) ),
                "DiscountType1", CALCULATE ( VALUES ( Customer[DiscountType] ) )
            ),
            "DiscountType", IF ( [Status] = "VIP", [DiscountType1], BLANK () )
        ),
        [CustomerId],
        [Type],
        [DiscountType]
    )
)

它没有经过测试,但应该可以工作,如果这对您有帮助,请告诉我。