SUMMARIZECOLUMNS

適用於:匯出數據行匯出數據表量值視覺計算

傳回一組群組的摘要資料表。

語法

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

參數

詞彙 定義
groupBy_columnName 對基底資料表的完整資料行參考 (Table[Column]),所傳回資料表中包含了基底資料表的相異值。 每個 groupBy_columnName 資料行會與後續指定資料行交叉聯結 (不同資料表),或自動存在 (相同資料表)。
filterTable 資料表運算式,這個運算式會新增至指定為 groupBy_columnName 引數的所有資料行篩選內容。 篩選資料表中出現的值,用來在執行交叉聯結/自動存在之前進行篩選。
NAME 字串,其代表要用於後續指定運算式的資料行名稱。
expression 傳回單一值 (而非資料表) 的任何 DAX 運算式。

傳回值

資料表,其包含來自所提供資料行的值組合 (根據指定的群組)。 傳回的資料表中所包含資料列,僅限於至少其中一個所提供運算式傳回非空白值的資料列。 如果所有運算式針對某個資料列都評估為空白/Null,則該資料列不會包含在傳回的資料表中。

備註

  • 此函式不保證結果的任何排序次序。

  • groupBy_columnName 參數中不能多次指定某個資料行。 例如,下列公式無效。

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

  • 在計算結果欄或資料列層級安全性 (RLS) 規則中使用時,不支援在 DirectQuery 模式中使用此函式。

篩選內容

請考慮以下查詢:

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

在此查詢中,如果沒有量值,groupBy 資料行就不會包含來自 FILTER 運算式 (例如,來自 Customer 資料表) 的任何資料行。 篩選不會套用至 groupBy 資料行。 「銷售領域」和「客戶」資料表可能會透過「轉售商銷售」事實資料表而間接相關。 因為不是直接相關,所以篩選運算式不會有任何作用,且 groupBy 資料行不會受到影響。

不過,使用此查詢:

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

groupBy 資料行會包含受篩選影響的資料行,且該篩選會套用至 groupBy 結果。

使用 IGNORE

IGNORE 語法可以藉由省略空白/Null 評估中的特定運算式,而用來修改 SUMMARIZECOLUMNS 函式的行為。 對於不使用 IGNORE 而使所有運算式傳回空白/Null 的資料列,將會予以排除,而不論使用 IGNORE 的運算式是否評估為空白/Null。 IGNORE 只能用在 SUMMARIZECOLUMNS 運算式內。

範例

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

這會彙總 Sales[CustomerId] 資料行,並會為指定群組中的所有客戶建立小計。 如果沒有 IGNORE,則結果會是:

CustomerId 總數量 BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

使用 IGNORE

CustomerId 總數量 BlankIfTotalQtyIsNot3
B 3 3
C 3 3

忽略所有運算式,

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

雖然兩個運算式針對部分資料列傳回空白,但因為沒有傳回空白的非忽略運算式,所以包含在內。

CustomerId Blank BlankIfTotalQtyIsNot5
A 5
B
C

使用 NONVISUAL

NONVISUAL 函式會將 SUMMARIZECOLUMNS 函式中的值篩選標記為不影響量值,但僅適用於分組依據資料行。 NONVISUAL 只能用在 SUMMARIZECOLUMNS 運算式內。

範例

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

傳回結果,其中 [Visual Total Sales] 是所有年份的總計:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 9,791,060.30 29,358,677.22
2008 9,770,899.74 29,358,677.22

相反地,沒有 NONVISUAL 函式的相同查詢:

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

傳回結果,其中 [Visual Total Sales] 是兩個選定年份的總計:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 9,791,060.30 19,561,960.04
2008 9,770,899.74 19,561,960.04

使用 ROLLUPADDISSUBTOTAL

新增 ROLLUPADDISSUBTOTAL 語法,其會藉由根據 groupBy_columnName 資料行將彙總/小計資料列新增至結果來修改 SUMMARIZECOUMNS 函式的行為。 ROLLUPADDISSUBTOTAL 只能用在 SUMMARIZECOLUMNS 運算式內。

具有單一小計的範例

DEFINE
VAR 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]

傳回下列資料表,

類別 子類別 IsCategorySubtotal IsSubcategorySubtotal 總數量
True True 60398
配件 False True 36092
配件 Bike Racks False False 328
Bikes Mountain Bikes False False 4970
Clothing False True 9101

具有多個小計的範例

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

銷售額會依州/省、依日期分類,小計為 1。 依州/省的銷售額 (依日期 2)。 依州/省的銷售額 (依客戶 3)。 將客戶和前置日期都彙總到依州/省的銷售額。

傳回下列資料表,

CustomerID IsCustomerSubtotal 州/省 總數量 Date IsDateSubtotal
A FALSE WA 5 2014/7/10
B FALSE WA 1 2014/7/10
B FALSE WA 2 7/11/2014
C FALSE OR 2 2014/7/10
C FALSE OR 1 7/11/2014
TRUE WA 6 2014/7/10
TRUE WA 2 7/11/2014
TRUE OR 2 2014/7/10
TRUE OR 1 7/11/2014
A FALSE WA 5 TRUE
B FALSE WA 3 TRUE
C FALSE OR 3 TRUE
TRUE WA 8 TRUE
TRUE OR 3 TRUE

使用 ROLLUPGROUP

SUMMARIZE 函式一樣,ROLLUPGROUP 可以與 ROLLUPADDISSUBTOTAL 搭配使用,以指定要包含哪些摘要群組/資料細微性 (小計) (減少傳回的小計資料列數目)。 ROLLUPGROUP 只能用在 SUMMARIZECOLUMNS 或 SUMMARIZE 運算式內。

具有多個小計的範例

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

仍依城市和州/省分組,但在報告傳回下列資料表的小計時一起彙總,

州/省 CustomerId IsCustomerSubtotal 總數量 City IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA B FALSE 2 Bellevue FALSE
WA A FALSE 3 Redmond FALSE
WA B FALSE 1 Redmond FALSE
OR C FALSE 3 Portland FALSE
WA TRUE 4 Bellevue FALSE
WA TRUE 4 Redmond FALSE
OR TRUE 3 Portland FALSE
A FALSE 5 FALSE
B FALSE 3 TRUE
C FALSE 3 TRUE
TRUE 11 TRUE

SUMMARIZE