powerbi - 我们什么时候使用 FILTER,什么时候在 CALCULATE 中使用 KEEPFILTERS?
问题描述
我创建了两个措施:
Revenue Red 1 = CALCULATE([Revenue], FILTER('Product', 'Product'[Color] = "Red"))
和
Revenue Red 2 = CALCULATE([Revenue], KEEPFILTERS('Product'[Color] = "Red"))
似乎表现相似
可以通过下载来调查测量行为
并添加上面的两个措施。
根据文档https://docs.microsoft.com/en-us/dax/keepfilters-function-dax我了解 CALCULATE 过滤器替换同一列上的任何过滤器,而 KEEPFILTERS 子句始终适用。但我仍然觉得这令人困惑,我想知道使用这两种结构的最佳实践是什么。任何见解将不胜感激。
解决方案
当您在表格上写下度量时:
Measure :=
CALCULATE (
[Revenue] ,
'Product'[Color] = "Red"
)
过滤器在查询时转换为:
Measure :=
CALCULATE (
[Revenue] ,
FILTER (
ALL ( 'Product'[Color] ) ,
'Product'[Color] = "Red"
)
)
请注意,当前过滤器上下文中的任何过滤器都会被该ALL
函数删除(而不是由其CALCULATE
本身)。
如果过滤器上下文对这一点很重要,您可以调用KEEPFILTERS
来改变语义,以便在指定列上保留过滤器。这意味着表单上的一个度量:
Measure :=
CALCULATE (
[Revenue] ,
KEEPFILTERS ( 'Product'[Color] = "Red" )
)
被翻译成:
Measure :=
CALCULATE (
[Revenue] ,
FILTER (
VALUES ( 'Product'[Color] ) ,
'Product'[Color] = "Red"
)
)
推荐阅读
- animation - 电枢 Python 动画
- vagrant - 是否可以创建一个多机流浪盒?
- c# - 如何在 ASP.NET Core 中处理多个 SPA 应用程序
- javascript - 无法将数组或对象转换为用于会话存储的 JSON 字符串
- serial-port - 尝试使用 JSSC [EXCEPTION_ACCESS_VIOLATION] 写入 COM 端口时出现致命错误
- python - Gevent 函数没有异步运行
- python - 使用 groupby 从 API 查找创建新列
- php - 解析字符串并使用键、值对创建数组
- netflix-eureka - 将 Eureka Client 注册为主机名而不是 localhost
- maven - maven pom.xml 排除传递和正常依赖