excel - DAX 筛选器上下文
问题描述
我想知道这两个 DAX 表达式之间有什么区别,每个表达式都返回我需要的内容:
(1) =calculate([PctMkt], FILTER ( ALL ( BondDim), BondDim[Quality] = "HY" ))
(2) =calculate([PctMkt], ALL(BondDim), BondDim[Quality] = "HY" )
DAX 引擎是否使这两个表达式等价?(2) 只是 (1) 的简写吗?另外,(1)会更快地计算吗?试图通过“破解”计算的度量来确保我不会在数据透视表中造成问题。这些措施允许用户向下钻取到较低粒度,同时将较高级别的数据保留在数据透视表的上下文中。
解决方案
一个更简单、类似的问题是众所周知的。
CALCULATE (
[PctMkt],
BondDim[Quality] = "HY"
)
CALCULATE (
[PctMkt],
FILTER (
ALL ( BondDim[Quality] ),
BondDim[Quality] = "HY"
)
)
你的公式需要更多的思考。
当 ALL 用作 CALCULATE 的参数时,它只删除过滤器(如REMOVEFILTERS)而不是充当表表达式。
当ALL ( < table > )
用作 FILTER 的参数时,它必然是一个表表达式。
我给出的第一个链接详细说明了这种区别如何产生重要影响。我将在这里提供另一个示例:
假设在来自 each 的列上与(并且不是双向的)MarketDim
存在一对多关系,并且表如下:BondDim
ID
BondDim MarketDim
Quality ID ID Pct
------------- ----------
HY 1 1 5%
VY 1 2 10%
XY 2 3 20%
让我们假设[PctMkt] := MAX ( MarketDim[Pct] )
然后,在您的第一个公式(1)
中, FILTER 参数如下表:
Quality ID
-------------
HY 1
因此,结果(1)
只能是5%
(或空白),因为ID = 1
是唯一的选择。
在您的第二个公式(2)
中,没有表参数,因为ALL ( BondDim )
仅删除过滤器并且BondDim[Quality] = "HY"
仅作用于单个列。没有表参数,因为MarketDim
过滤器BondDim
但反之亦然(因为它是单向关系),这些列过滤器参数都对我定义的度量没有任何影响(尽管它可能对您的实际度量有影响)。
因此,结果(2)
与 just 相同CALCULATE ( [PctMkt] )
,20%
除非有过滤MarketDim
要 exclude ID = 3
。
注意:如果对列或模型中过滤的任何表列进行操作,则此简化(2)
不成立。即过滤器在关系中传播“下游”而不是“上游”。[PctMkt]
BondDim
BondDim
推荐阅读
- r - 在 R 中使用 predict() 知道 newdata 参数中的一些但不是全部的预测变量值
- jquery - Nodejs错误发送错误响应以供Jquery捕获
- python - 使用 Python 将表格写入 Excel 时遇到问题
- r - R:为什么 append() 将数据框的每一列分配给列表而不是数据框对象?
- visual-studio-code - 防止在 VSCode 中输入多个空格,但行首除外
- vba - 有没有比遍历文档段落更快的方法?
- aws-glue - 忽略对象键;只添加 JSON 正文?
- java - 如何在循环中存储用户的先前值?
- google-cloud-platform - 在没有负载平衡的情况下在本地和云服务器 IP 之间切换
- r - 环境如何记住它的存在?