使用 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
函数。
您可以混合使用 SUMMARIZE
和 ADDCOLUMNS
函数来获得预期结果。
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]
)
)
它没有经过测试,但应该可以工作,如果这对您有帮助,请告诉我。
我在 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
函数。
您可以混合使用 SUMMARIZE
和 ADDCOLUMNS
函数来获得预期结果。
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]
)
)
它没有经过测试,但应该可以工作,如果这对您有帮助,请告诉我。