gpt4 book ai didi

powerbi - 过滤汇总列

转载 作者:行者123 更新时间:2023-12-02 14:28:44 25 4
gpt4 key购买 nike

如何为SUMMARIZECOLUMNS函数构建过滤表?

SUMMARIZECOLUMNS有以下模式:

SUMMARIZECOLUMNS( 
ColumnName1, ...
ColumnNameN,
FilterTable1, -- my question concerns this line
FilterTableN,
Name1, [measure1],
NameN, [measure2],
)

我已经检查过以下 3 种模式是否有效。它们返回相同的结果,至少对于我使用的简单示例数据而言是如此。

SUMMARIZECOLUMNS (
T[col],
FILTER( T, T[col] = "red" )
)
SUMMARIZECOLUMNS (
T[col],
CALCULATETABLE( T, T[col] = "red" )
)
SUMMARIZECOLUMNS (
T[col],
CALCULATETABLE ( T, KEEPFILTERS ( T[col] = "red" ) )
)

这些模式是否优于其他模式?

引用:https://www.sqlbi.com/articles/introducing-summarizecolumns/

更新

我对包含查询计划分析的答案感兴趣或链接到可靠的来源。如果您提及,我将不胜感激对来自的列进行分组时使用 SUMMARIZECOLUMNS 函数多个表。

最佳答案

您还可以按照 PowerBI 的方式使用 VAR 构建它们:

VAR  __MyFilterTable = FILTER( T, T[col] = "red" ) 

RETURN
SUMMARIZECOLUMNS (
T[col],
__MyFilterTable
)

哪个更有效将取决于过滤的复杂性,因此不一定存在“一刀切”的规则。对于简单的表级过滤器,只需 FILTER 就足够了。我警告您,在第 1 行中过滤整个表 T 是一个坏主意。仅过滤单个列的性能要高得多。当您过滤整个表时,DAX 在内存中具体化整个表,而以下仅具体化 T[col] 的一个值:

VAR  __MyFilterTable = FILTER( ALL(T[col]), T[col] = "red" ) // This is better.

RETURN
SUMMARIZECOLUMNS (
T[col],
__MyFilterTable
)

从概念上讲,您甚至可以做得更好。您基本上可以告诉 DAX,“我知道这是一个值,所以甚至不用在表中查找它。只需为我创建一个表并像我过滤它一样对待它。就像这样:

VAR  __MyFilterTable = TREATAS ({"red"}, T[col] )

RETURN
SUMMARIZECOLUMNS (
T[col],
__MyFilterTable
)

这也是 PowerBI 在执行过滤器时使用的模式。

顺便说一句,在顶部创建过滤表与使用 SUMMARIZECOLUMNS() 内联创建过滤表不会对速度产生任何影响。避免像您通常在此处所做的那样使用 CALCULATETABLE()。

您也可以这样做,尽管您通常不太可能看到速度提高:

CALCULATETABLE(
SUMMARIZECOLUMNS (
T[col]
),
KEEPFILTERS(T[col] = "red")
)

关于powerbi - 过滤汇总列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59931193/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com