首页 > 解决方案 > 带有子查询和 IF ELSE 的 DAX 查询

问题描述

DAX 的新手,我正在尝试创建一个下面的 DAX 查询,但是,我不知道该怎么做,我有一个度量值(用户选择的值),我想使用它传递给查询,并使用我想将动态参数传递给过滤器。以下是我想要实现的目标。

TABLE_SUM = CALCULATE(SUM('TABLE'[Total]), FILTER('TABLE', 'TABLE'[Filter_1] = [Selected-val-1] && 'TABLE'[Filter_2] = "CONSTANT1" && 'TABLE'[Filter_3] = "CONSTANT2" && 'TABLE'[Filter_4] IN (IF ([Selected-val-2] =="All", DISTINCT('TABLE'[Filter_4]),[Selected-val-2]))) )

IFall被选中然后我想要 'TABLE'[Filter_4]其他我想要传递的不同值[Selected-val-2]

我收到is not a valid table错误...如果我删除 If else 条件并仅在IN子句内应用 true 条件,我不会收到错误,但这并不能解决我的目的。

标签: powerbidax

解决方案


您收到错误的原因是您IF返回的错误结果是一个标量而不是一个表。'TABLE'[Filter_4] IN <Some Scalar>不是有效的 DAX。您可以通过将最后一个替换[Selected-val-2]为单个元素列表来解决此问题,{ [Selected-val-2] }.

@RADO 是正确的,您可以重构最后一行。

'TABLE'[Filter_4]
    IN (
        IF (
            [Selected-val-2] == "All",
            DISTINCT ( 'TABLE'[Filter_4] ),
            [Selected-val-2]
        )
    )

让我们看看这两种情况:'TABLE'[Filter_4]有 (1) 一个值或 (2) 有多个值(或没有值)。然后上面的减少到


(1) 条件[Selected-val-2] == "All"为假:

'TABLE'[Filter_4] IN [Selected-val-2]

因为SELECTEDVALUE ( 'TABLE2'[Filter_4], "All" )相当于

IF ( HASONEVALUE ( 'TABLE2'[Filter_4] ), VALUES ( 'TABLE2'[Filter_4] ), "All" ),因为我们在情况(1)中,这减少到

'TABLE'[Filter_4] IN VALUES ( 'TABLE2'[Filter_4] )

(2) 条件[Selected-val-2] == "All"为真:

'TABLE'[Filter_4] IN  DISTINCT ( 'TABLE'[Filter_4] )

这两者基本等价'TABLE'[Filter_4] IN DISTINCT ( 'TABLE'[Filter_4] ).


推荐阅读