首页 > 解决方案 > Dax:使用过滤器和所有计算,结果不是预期的

问题描述

我有一个从 2000/01/01 到 2020/1028 的过滤日期表和一个 SP 索引的事实表。模型设置如下:

在此处输入图像描述

我使用这个表达式:

firstDateYear2020 =
CALCULATE (
    MIN ( 'SP Index 20201028'[Date] ),
    FILTER (
        ALL ( 'SP Index 20201028'[Date] ),
        YEAR ( 'SP Index 20201028'[Date] ) = 2020
    )
)

获得2020年SP指数的第一天。

在报表视图中,添加日期切片,可以看到2020年的第一个日期,当切片器的状态日期小于2020/01/01时,DAX表达式按预期返回日期(2020/01/01或2020/01 /02)

在此处输入图像描述

但是,当我选择大于 2020/01/01 的开始时间时,DAX 表达式会返回所选的开始日期而不是第一个日期 2020,我预计它的行为与上述相同。

我在过滤器中使用 ALL 的 DAX 表达式,我认为它会忽略切片器效果,但是,当开始时间大于 2020/01/01 时,切片器看起来仍然有效果?你能帮我解释一下为什么这个 DAX 表达式有不同的结果吗?

在此处输入图像描述

标签: filterpowerbifilteringdaxcalculated-columns

解决方案


我同意@msta42a。如果您的切片器使用的是 DateTable,那么这就是我所期望的。你可以这样写:

firstDateYear2020 =
CALCULATE (
    MIN ( 'SP Index 20201028'[Date] ),
    ALL ( 'DateTable' ),
    YEAR ( 'DateTable'[Date] ) = 2020
)

这样做的原因是 ALL 仅删除它所引用的表上的过滤器,但不会删除来自其他表的过滤器。因此,您已成功删除了专门针对该列的任何过滤器,'SP Index 20201028'[Date]但如果这不是用于切片器的列,那么切片器仍会应用过滤器,因为它来自上游的另一个表。对表的过滤仅在关系的下游流动。


推荐阅读