powerbi - 带和不带 FILTER 的 DAX 计算函数
问题描述
CALCULATE
如果我们使用和不使用 FILTER 函数,函数的结果有什么区别。假设我们有这两个措施:
Measure1 = CALCULATE([X], 'FactTable'[Color]="Red")
Measure2 = CALCULATE([X], FILTER('FactTable', 'FactTable'[Color]="Red")
更新
有没有办法通过使用其他函数来修改Measure2,例如ALL
或,以便它返回与Measure1ALLSELECTED
完全相同的结果?
解决方案
不仅结果,而且两种措施获得这些结果的方式也不相同。
我创建了两个类似于您的示例的度量来测试这一点:
TestAvgNoFilter = CALCULATE([PrcAvg]; cal[ReadDate]=DATE(2018;05;23))
TestAvgFilter = CALCULATE([PrcAvg]; filter(cal; cal[ReadDate]=DATE(2018;05;23)))
当我只是将它们都放入数据透视表而不使用任何其他字段或切片器时,它们当然都显示相同的结果:
然而:
使用
FILTER
具有显着的性能影响,可以清楚地看到查询计划和存储引擎与公式引擎的利用率。它创建了额外的临时表,它需要与来自报告/数据透视表本身(行、列、切片器)的现有过滤器“交互”。您不会注意到单个单元格中的简单平均值,但如果您的 [x] 度量本身很复杂并且有许多“初始”过滤器,则计算时间的差异可能会很大。FILTER
保留和迭代初始过滤器上下文,而直接使用的过滤器表达式CALCULATE
忽略它。看看当我将 ReadDate 添加到数据透视表时会发生什么:
这正是没有的度量FILTER
更快的原因:它不关心列中的日期 - 它已经计算了一个“真实”值,而具有的度量FILTER
根据每一行的初始过滤器评估自身。
两列中的结果都可以被认为是正确的 - 这实际上完全取决于解释以及您如何命名度量;)。
作为一般规则,我建议您在不需要FILTER
时不要使用。在真正需要的时候省电。
推荐阅读
- regex - Redshift 中的 REGEXP_SUBSTR 函数不返回预期值
- google-apps-script - 使用谷歌工作表文件中的值范围复制格式
- mysql - 如何使用查询生成器根据实际字段中的表进行条件 mysql 左连接
- java - 有没有办法改变 JButton 的“选定”颜色?
- ios - OC 崩溃:将 NSMutableString 作为 NSString 返回以使用
- wordpress - 从 Wordpress 中的 URL 中删除特定类别
- java - Vert.x Auth - 缺少权限会产生 500 而不是 403
- java - 用于 n 个特殊字符部分的 Java 字符串拆分/删除
- javascript - 无法将新添加的行排序到 html 表
- python - 计算python中每个目标变量的百分比