SUMMARIZECOLUMNS

グループのセットに対するサマリー テーブルを返します。

構文

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

パラメーター

用語 定義
groupBy_columnName 返されるテーブルに個別の値が含まれるベース テーブルへの完全修飾列参照 (Table [Column])。 各 groupBy_columnName 列は、その後に指定される列とクロス結合 (異なるテーブル) または auto-exist (同じテーブル) されます。
filterTable groupBy_columnName の引数として指定されたすべての列のフィルター コンテキストに追加されるテーブル式。 フィルター テーブルに存在する値は、クロス結合/auto-exist を行う前にフィルター処理するために使用されます。
name 指定した後続の式に使用する列名を表す文字列。
expression 単一の値 (テーブルではなく) を返す任意の DAX 式。

戻り値

指定したグループに基づいて、指定された列の値の組み合わせを含むテーブル。 返されるテーブルには、指定された式のうち少なくとも 1 つが空白以外の値を返す行だけが含まれます。 行のすべての式が空白または NULL に評価される場合、その行は返されるテーブルには含まれません。

解説

  • この関数では、結果の並べ替え順序は保証されません。

  • groupBy_columnName パラメーターでは、1 つの列を複数回指定することはできません。 たとえば、次の式は無効です。

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

  • この関数は、計算列または行レベルのセキュリティ (RLS) ルールで使用される場合、DirectQuery モードでの使用はサポートされません。

フィルター コンテキスト

次のようなクエリについて考えます。

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

このクエリでは、メジャーを使用しない場合、groupBy 列には FILTER 式 (たとえば、Customer テーブル) の列が含まれません。 このフィルターは、groupBy 列には適用されません。 Sales Territory および Customer テーブルは、Reseller の売上ファクト テーブルを通じて間接的に関連付けられている場合があります。 これらは直接関連付けられているわけではないため、フィルター式は no-op であり、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 Total Qty BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

IGNORE を使用した場合、次のようになります。

CustomerId Total Qty BlankIfTotalQtyIsNot3
B 3 3
C 3 3

すべての式が無視されます。

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

どちらの式も、一部の行に対して空白が返される場合でも、空白を返す無視されない式が存在しないため、含まれています。

CustomerId 空白 BlankIfTotalQtyIsNot5
A 5
B
C

NONVISUAL を使用する場合

NONVISUAL 関数を使用して、SUMMARIZECOLUMNS 関数の値フィルターを、メジャー値に影響を与えず、groupBy 列にのみ適用するものとしてマークします。 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] が 2 つの選択した年の合計となる結果が返されます。

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 列に基づいて、ロールアップまたは小計行を結果に追加することで、SUMMARIZECOLUMNS 関数の動作を変更できます。 ROLLUPADDISSUBTOTAL は SUMMARIZECOLUMNS 式内でのみ使用できます。

小計が 1 つの例

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 Total Qty
True True 60398
Accessories False True 36092
Accessories バイク ラック False False 328
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 State Total Qty Date IsDateSubtotal
A false WA 5 2014/7/10
B false WA 1 2014/7/10
B false WA 2 2014/7/11
C false OR 2 2014/7/10
C false OR 1 2014/7/11
true WA 6 2014/7/10
true WA 2 2014/7/11
true OR 2 2014/7/10
true OR 1 2014/7/11
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 関数と同様に、ROLLUPGROUPROLLUPADDISSUBTOTAL と共に使用して、含めるサマリー グループまたは粒度 (小計) を指定して、返される小計行の数を減らすことができます。 ROLLUPGROUP は、SUMMARIZECOLUMNS または SUMMARIZE 式内でのみ使用できます。

小計が複数の例

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

まだ都市および州別にグループ化されていますが、小計を報告するときにまとめてロールされ、次のテーブルが返されます。

State CustomerId IsCustomerSubtotal Total Qty City IsCityStateSubtotal
WA A false 2 ベルビュー false
WA B false 2 ベルビュー false
WA A false 3 レドモンド false
WA B false 1 レドモンド false
OR C false 3 Portland false
WA true 4 ベルビュー false
WA true 4 レドモンド false
OR true 3 Portland false
A false 5 FALSE
B false 3 true
C false 3 TRUE
true 11 TRUE

SUMMARIZE