DAX中筛选条件求和浅见

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DAX中筛选条件求和浅见相关的知识,希望对你有一定的参考价值。

参考技术A 偶然发现了这篇我在2017年刚接触Power BI时写的文章,就转到这里和大家聊聊吧

起因是QQ群里的一个问题,即

Power BI DAX 度量:考虑视觉对象的筛选上下文,计算列中值的出现次数

【中文标题】Power BI DAX 度量:考虑视觉对象的筛选上下文,计算列中值的出现次数【英文标题】:Power BI DAX measure: Count occurences of a value in a column considering the filter context of the visual 【发布时间】:2022-01-23 21:11:56 【问题描述】:

我想计算一列中值的出现次数。在我的情况下,我想要计算的值是 TRUE()。 假设我的表名为 Table 并且有两列:

boolean value
TRUE()  A
FALSE() B
TRUE()  A
TRUE()  B

目前我找到的所有解决方案都是这样的:

count_true = COUNTROWS(FILTER(Table, Table[boolean] = TRUE()))

问题是我仍然希望显示度量的视觉(卡片)考虑过滤器(来自切片器)以减少表格。因此,如果我有一个设置为 value = A 的切片器,则具有 count_true 度量的卡片应该显示 2 而不是 3。

据我了解,FILTER 函数总是会覆盖视觉过滤器上下文。

为了进一步解释我的意图:在较早的时候,TRUE/FALSE 列的值是 1/0,我可以通过使用 SUM 函数来实现我的目标,该函数没有指定过滤器上下文,只是在视觉过滤器中起作用上下文。

【问题讨论】:

【参考方案1】:

我认为您提供的 DAX 应该可以工作,只要它是一个度量,而不是一个计算列。 (计算列无法从报告中读取过滤器上下文。)

在评估度量时,

count_true = COUNTROWS ( FILTER ( Table, Table[boolean] = TRUE() ) )

FILTER 中的第一个参数不一定是完整表,但该表已经被本地过滤器上下文过滤(包括报表/页面/视觉过滤器以及切片器选择和本地上下文,例如行/列矩阵视觉)。

因此,如果您通过切片器选择 Value = "A",则 FILTER 中的表已被过滤为仅包含 "A" 值。

【讨论】:

奇怪的是,当我今天使用相同的 DAX 度量(无法在我的报告中创建计算列)代码尝试它时它起作用了。可能是缓存问题或其他一些奇怪的错误,卡片的视觉效果没有受到昨天切片机的影响。【参考方案2】:

我不确定这是否能解决您的问题,但在我看来它是更有效的 dax:

count_true = CALCULATE(COUNTROWS(Table), Table[boolean])

如果在更改度量以使用此格式后仍然存在问题,则可能是模型存在潜在问题。还有可能适用于此处的功能 KEEPFILTERS,但我认为使用 KEEPFILTERS 会使您的情况过于复杂。

【讨论】:

我不确定是否是,但如果此版本的实际查询计划与 OP 相同,我不会感到惊讶。 这是一个有趣的观点。我认为通过从表过滤器切换到列过滤器会提高性能,但研究实际的查询计划会很有趣。此外,其中一部分是在黑暗中拍摄的,因为我认为发布的原始问题还没有为我们提供足够的信息。 是的,总的来说,你的直觉是正确的。不过,对于简单的措施,我认为优化引擎可能还不错。

以上是关于DAX中筛选条件求和浅见的主要内容,如果未能解决你的问题,请参考以下文章

excel按条件求和 excel按条件求和具体步骤

excel表中,怎样筛选出多个条件的数据

DAX从入门到精通 3-6-1 了解values和distinct

DAX从入门到精通 5-7 介绍allselected函数

C#的问题,怎么在List集合中筛选数据?

C#的问题,怎么在List集合中筛选数据?