filter - 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 表达式有不同的结果吗?
解决方案
我同意@msta42a。如果您的切片器使用的是 DateTable,那么这就是我所期望的。你可以这样写:
firstDateYear2020 =
CALCULATE (
MIN ( 'SP Index 20201028'[Date] ),
ALL ( 'DateTable' ),
YEAR ( 'DateTable'[Date] ) = 2020
)
这样做的原因是 ALL 仅删除它所引用的表上的过滤器,但不会删除来自其他表的过滤器。因此,您已成功删除了专门针对该列的任何过滤器,'SP Index 20201028'[Date]
但如果这不是用于切片器的列,那么切片器仍会应用过滤器,因为它来自上游的另一个表。对表的过滤仅在关系的下游流动。
推荐阅读
- java - JMAP 会导致 Full GC 吗?
- json - 有没有办法将不同的变量与 json 进行比较?
- go - 未命名结构类型的方法
- android - 在项目中使用 Realm 符合 Google Play 64 位
- symfony - 有没有办法在我的处理程序方法中确定哪些订阅的事件触发了处理程序?
- google-cloud-platform - 基于实例数的 GCP GCE SLA 的复合计算?
- javascript - 最简单的图像格式:PPM 到 dataURI
- c# - 从网络数据复制到逻辑数据或将数据作为类成员
- javascript - 编写此正则表达式的替代方法,因为它无法在 chrome 以外的其他浏览器中运行
- azure-sql-data-warehouse - 未找到 Azure 数据仓库 SELECT n'char' 列