带子查询和IF ELSE的DAX查询

时间:2020-06-03 05:54:35

标签: powerbi dax

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

org.opentest4j.AssertionFailedError: Expected java.lang.RuntimeException to be thrown, but nothing was thrown.

如果选择了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]))) ),那么我想要all的不同值,否则我想传递'TABLE'[Filter_4]吗?

我收到[Selected-val-2]错误...如果删除if条件,而仅在is not a valid table子句中应用真实条件,我不会收到错误,但不能解决我的目的

1 个答案:

答案 0 :(得分:0)

出现错误的原因是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] )

这两个都是basically equivalent'TABLE'[Filter_4] IN DISTINCT ( 'TABLE'[Filter_4] )