DAX:翻译《介绍SUMMARIZECOLUMNS》
原文:Introducing SUMMARIZECOLUMNS
FilterTable参数是一个表达式,用于定义返回数据行的基表。如果所有Expression参数的值都是Blank,那么这一行不会包含在返回值中。
建议用SUMMARIZECOLUMNS来代替SUMMARIZE函数,和ADDCOLUMNS/SUMMARIZE的组合。下面两个DAX的结果是一样的:
Sales by Year and Color new style =
SUMMARIZECOLUMNS (
'Date'[Calendar Year],
'Product'[Color],
"Sales Amount", SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )
)
Sales by Year and Color using Crossjoin =
FILTER (
SUMMARIZE (
CROSSJOIN (
VALUES ( 'Date'[Calendar Year] ),
VALUES ( 'Product'[Color] )
),
'Date'[Calendar Year],
'Product'[Color],
"Sales Amount", SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )
),
NOT ( ISBLANK ( [Sales Amount] ) )
)
Sales by Year and Color optimized
=
ADDCOLUMNS
(
SUMMARIZE
(
Sales
,
'Date'[Calendar Year]
,
'Product'[Color]
)
,
"Sales Amount"
,
CALCULATE
(
SUMX
(
Sales
,
Sales[Quantity]
*
Sales[Unit Price]
)
)
)
一,SUMMARIZECOLUMNS函数中的FilterTable
SUMMARIZECOLUMNS 版本没有第一个参数,用来指定用于连接操作的基表。如果存在聚合表达式,那么DAX 引擎从聚合表达式中推断出这样的基表,从而产生跟基表等效的结果。但是,如果您不包含任何聚合表达式,则会得到一个交叉连接。
1,SUMMARIZECOLUMNS函数中不存在Filter Table参数
例如,下面2个DAX表达式的结果是相同的:
Sales by Year and Color crossjoin implicit = SUMMARIZECOLUMNS ( 'Date'[Calendar Year], 'Product'[Color] ) Sales by Year and Color crossjoin explicit = CROSSJOIN ( VALUES ( 'Date'[Calendar Year] ), VALUES ( 'Product'[Color] ) )
2,SUMMARIZECOLUMNS函数中存在Filter Table参数
下面两个DAX的查询结果是相同的,在SUMMARIZECOLUMNS函数中添加FilterTable参数,用来指定聚合的基表:
Sales by Year and Color summarize = SUMMARIZE ( Sales, 'Date'[Calendar Year], 'Product'[Color] ) Sales by Year and Color summarizecolumns = SUMMARIZECOLUMNS ( 'Date'[Calendar Year], 'Product'[Color], Sales )
二,NONVISUAL函数
NONVISUAL是一个函数,这个函数的作用就是把filter设置为不可见,也就是说,把FilterTable参数标记为只作用于GroupBy_ColumnName,而不会影响最终的Measure值。
-- NONVISUAL marks a SUMMARIZECOLUMNS filter so that it does -- not affect measures using ALLSELECTED as part of their calculation. -- It can be used to obtain non-visual totals at the query level. DEFINE MEASURE Sales[Amount ALLSELECTED] = CALCULATE ( [Sales Amount], ALLSELECTED ( 'Date'[Calendar Year] ) ) EVALUATE SUMMARIZECOLUMNS ( 'Date'[Calendar Year], TREATAS ( { "CY 2008", "CY 2009" }, 'Date'[Calendar Year] ), "Amount", [Sales Amount], "Amount ALLSELECTED", [Amount ALLSELECTED] ) EVALUATE SUMMARIZECOLUMNS ( 'Date'[Calendar Year], NONVISUAL ( TREATAS ( { "CY 2008", "CY 2009" }, 'Date'[Calendar Year] ) ), "Amount", [Sales Amount], "Amount ALLSELECTED", [Amount ALLSELECTED] )
三,SUMMARIZECOLUMNS缺失Row Context,只有Filter Context
SUMMARIZE 和 SUMMARIZECOLUMNS 之间的另一个区别是,SUMMARIZE 在指定聚合的表达式中同时保持行上下文和筛选上下文处于活动状态,而 SUMMARIZECOLUMNS 仅提供筛选上下文而不提供行上下文。
Sales by Year and Color correction summarize = SUMMARIZE ( Sales, 'Date'[Calendar Year Number], 'Product'[Color], "Sales Amount", VAR delta = 'Date'[Calendar Year Number] - 2007 VAR correction = 1 + ( delta / 100 ) RETURN correction * SUMX ( Sales, [Quantity] * Sales[Unit Price] ) )
因为使用 SUMMARIZECOLUMNS 时,没有要分组的列的行上下文,所以您必须使用 VALUES 从筛选上下文中检索这样的值,假设如果您没有在汇总中评估表达式,则只有一个活动值:
Sales by Year and Color correction summarizecolumns = SUMMARIZECOLUMNS ( 'Date'[Calendar Year Number], 'Product'[Color], "Sales Amount", VAR delta = VALUES ( 'Date'[Calendar Year Number] ) - 2007 VAR correction = 1 + ( delta / 100 ) RETURN correction * SUMX ( Sales, [Quantity] * Sales[Unit Price] ) )
如果您在 SUMMARIZECOLUMNS 中激活了汇总,那么您必须考虑到筛选上下文中将有多个值。在这种情况下,在调用 VALUES 之前,需要使用 HASONEVALUE 检查是否存在多个值。
Sales by Year and Color correction summarizecolumns with subtotals = SUMMARIZECOLUMNS ( ROLLUPADDISSUBTOTAL ( 'Date'[Calendar Year Number], "All Years" ), 'Product'[Color], "Sales Amount", VAR delta = IF ( HASONEVALUE ( 'Date'[Calendar Year Number] ), VALUES ( 'Date'[Calendar Year Number] ) - 2007, 0 ) VAR correction = 1 + ( delta / 100 ) RETURN correction * SUMX ( Sales, [Quantity] * Sales[Unit Price] ) )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
2017-02-27 数据压缩