SUMMARIZECOLUMNS

返回一组组的摘要表。

语法

SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)  

parameters

术语定义
groupBy_columnName对基表的完全限定的列引用(表 [列]),其返回的表中包含不同的值。 每个 groupBy_columnName 列都与后续指定的列交叉联接(不同的表)或自动共存(相同的表)。
filterTable添加到指定为 groupBy_columnName 参数的所有列的筛选上下文中的表表达式。 筛选器表中存在的值用于在执行交叉联接/自动共存之前进行筛选。
name表示要用于指定的后续表达式的列名称的字符串。
表达式任何返回单个值(而不是表)的 DAX 表达式。

返回值

一个表,它根据指定的分组包含所提供列的值的组合。 返回的表中仅包含符合后列条件的行:提供的表达式种至少有一个为其返回非空值。 如果一行的所有表达式的计算结果都为 BLANK/NULL,则该行不包含在返回的表中。

备注

  • 此函数不保证结果的任何排序顺序。

  • 不能在 groupBy_columnName 参数中多次指定某一列。 例如,下面的公式无效。

    SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )

  • 在已计算的列或行级安全性 (RLS) 规则中使用时,不支持在 DirectQuery 模式下使用此函数。

筛选器上下文

请考虑下列查询:

SUMMARIZECOLUMNS (     'Sales Territory'[Category],     FILTER('Customer', 'Customer' [First Name] = "Alicia") )

在此查询中,如果没有度量值,则 groupBy 列不包含 FILTER 表达式中的任何列(例如来自“客户”表的列)。 筛选器不应用于 groupBy 列。 “销售区域”和“客户”表可通过“分销商销售”事实数据表间接关联。 由于它们不是直接关联的,因此筛选器表达式不执行任何操作,并且 groupBy 列不受影响。

但是,对于以下查询:

SUMMARIZECOLUMNS (     'Sales Territory'[Category], 'Customer' [Education],     FILTER('Customer', 'Customer'[First Name] = "Alicia") )

groupBy 包含一个受筛选器影响的列,该筛选器应用于 groupBy 结果。

使用 IGNORE

可通过在 BLANK/NULL 计算中省略特定表达式,使用 IGNORE 语法修改 SUMMARIZECOLUMNS 函数的行为。 未使用 IGNORE 返回 BLANK/NULL 的所有表达式的行将被排除,且与使用 IGNORE 的表达式的计算结果是否为 BLANK/NULL 无关。 IGNORE 只能在 SUMMARIZECOLUMNS 表达式中使用。

示例

SUMMARIZECOLUMNS(     Sales[CustomerId], "Total Qty",     IGNORE( SUM( Sales[Qty] ) ),     "BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 ) )

这将汇总 Sales[CustomerId] 列,为给定分组中的所有客户创建小计。 不使用 IGNORE,结果为:

CustomerIdTotalQtyBlankIfTotalQtyIsNot3
A5
B33
C33

使用 IGNORE

CustomerIdTotalQtyBlankIfTotalQtyIsNot3
B33
C33

已忽略所有表达式,

SUMMARIZECOLUMNS(     Sales[CustomerId], "Blank",     IGNORE( Blank() ), "BlankIfTotalQtyIsNot5",     IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) ) )

即使这两个表达式在某些行中都返回空白,它们也被包含在内,因为返回了空白的表达式均被忽略了。

CustomerIdTotalQtyBlankIfTotalQtyIsNot3
A5
B
C

使用 NONVISUAL

NONVISUAL 函数将 SUMMARIZECOLUMNS 函数中的值筛选器标记为不影响度量值,但它仅应用于 groupBy 列。 NONVISUAL 只能在 SUMMARIZECOLUMNS 表达式中使用。

示例

DEFINEMEASURE FactInternetSales[Sales] = SUM(FactInternetSales[Sales Amount])EVALUATESUMMARIZECOLUMNS(    DimDate[CalendarYear],    NONVISUAL(TREATAS({ 2007, 2008 }, DimDate[CalendarYear])),    "Sales", [Sales],    "Visual Total Sales", CALCULATE([Sales], ALLSELECTED(DimDate[CalendarYear])))ORDER BY [CalendarYear]

返回结果,其中 [直观总销售额] 是所有年份的总计:

DimDate[CalendarYear][销售额][直观总销售额]
20079,791,060.3029,358,677.22
20089,770,899.7429,358,677.22

与此相反,未使用 NONVISUAL 函数的相同查询:

DEFINEMEASURE FactInternetSales[Sales] = SUM(FactInternetSales[Sales Amount])EVALUATESUMMARIZECOLUMNS(    DimDate[CalendarYear],    TREATAS({ 2007, 2008 }, DimDate[CalendarYear]),    "Sales", [Sales],    "Visual Total Sales", CALCULATE([Sales], ALLSELECTED(DimDate[CalendarYear])))ORDER BY [CalendarYear]

返回结果,其中 [直观总销售额] 是两个选定年份的总计:

DimDate[CalendarYear][销售额][直观总销售额]
20079,791,060.3019,561,960.04
20089,770,899.7419,561,960.04

使用 ROLLUPADDISSUBTOTAL

添加 ROLLUPADDISSUBTOTAL 语法后,通过向基于 groupBy_columnName 列的结果添加汇总行/小计行来修改 SUMMARIZECOLUMNS 函数的行为。 ROLLUPADDISSUBTOTAL 只能在 SUMMARIZECOLUMNS 表达式中使用。

有单个小计的示例

DEFINEVAR vCategoryFilter =  TREATAS({ "Accessories", "Clothing" }, Product[Category])VAR vSubcategoryFilter =   TREATAS({ "Bike Racks", "Mountain Bikes" }, Product[Subcategory])EVALUATE  SUMMARIZECOLUMNS  (    ROLLUPADDISSUBTOTAL    (      Product[Category], "IsCategorySubtotal", vCategoryFilter,      Product[Subcategory], "IsSubcategorySubtotal", vSubcategoryFilter    ),    "Total Qty", SUM(Sales[Qty])  )  ORDER BY  [IsCategorySubtotal] DESC, [Category],  [IsSubcategorySubtotal] DESC, [Subcategory]

返回下表,

类别SubcategoryIsCategorySubtotalIsSubcategorySubtotal总数量
TrueTrue60398
AccessoriesFalseTrue36092
Accessories自行车车架FalseFalse328
Bikes山地自行车FalseFalse4970
ClothingFalseTrue9101

有多个小计的示例

SUMMARIZECOUMNS (     Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),     ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] ) )

销售额按州省/自治区/直辖市、客户、日期分组,包含以下内容的小计:1. 按州省/自治区/直辖市、按日期所得的销售额 2. 按州省/自治区/直辖市、按客户所得销售额 3. 汇总客户和日期销售额,得到州销售额。

返回下表,

CustomerIDIsCustomerSubtotal状态总数量DateIsDateSubtotal
AFALSEWA52014/7/10
BFALSEWA12014/7/10
BFALSEWA22014/7/11
CFALSEOR22014/7/10
CFALSEOR12014/7/11
trueWA62014/7/10
trueWA22014/7/11
trueOR22014/7/10
trueOR12014/7/11
AFALSEWA5true
BFALSEWA3true
CFALSEOR3TRUE
TRUEWA8TRUE
TRUEOR3true

使用 ROLLUPGROUP

SUMMARIZE 函数一样,ROLLUPGROUP 可与 ROLLUPADDISSUBTOTAL 一起使用,以指定要包含的摘要组/粒度(小计)(减少返回的小计行数)。 ROLLUPGROUP 只能在 SUMMARIZECOLUMNS 或 SUMMARIZE 表达式中使用。

有多个小计的示例

SUMMARIZECOLUMNS(     ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),     ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] ) )

仍按城市和省/自治区/直辖市分组,但在报告小计时汇总在一起返回下表,

状态CustomerIdIsCustomerSubtotal总数量城市IsCityStateSubtotal
WAAFALSE2Bellevuefalse
WABFALSE2Bellevuefalse
WAAFALSE3Redmondfalse
WABfalse1Redmondfalse
ORCFALSE3Portlandfalse
WAtrue4Bellevuefalse
WAtrue4Redmondfalse
ORtrue3Portlandfalse
Afalse5FALSE
BFALSE3true
CFALSE3TRUE
true11true

请参阅

SUMMARIZE

results matching ""

    No results matching ""