SUMMARIZECOLUMNS

Gilt für:Berechnete SpalteBerechnete TabelleMeasureVisuelle Berechnung

Gibt eine Zusammenfassungstabelle für einen Satz von Gruppen zurück.

Syntax

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

Parameter

Begriff Definition
groupBy_columnName Ein vollqualifizierter Spaltenverweis (Table[Column]) auf eine Basistabelle, für die die einzelnen Werte in der zurückgegebenen Tabelle enthalten sind. Jede „groupBy_columnName“-Spalte wird mittels „Cross Join“ (unterschiedliche Tabellen) oder „Auto Exist“ (dieselbe Tabelle) mit den nachfolgenden angegebenen Spalten verbunden.
filterTable Ein Tabellenausdruck, der dem Filterkontext aller Spalten hinzugefügt wird, die als „groupBy_columnName“-Argumente angegeben sind. Die in der Filtertabelle vorhandenen Werte werden verwendet, um vor der Ausführung von „Cross Join“ bzw. „Auto Exist“ zu filtern.
name Eine Zeichenfolge, die den Spaltennamen darstellt, der für den nachfolgenden angegebenen Ausdruck verwendet werden soll.
expression Ein DAX-Ausdruck, der einen einzelnen Wert (keine Tabelle) zurückgibt.

Rückgabewert

Es wird eine Tabelle zurückgegeben, die Kombinationen von Werten aus den angegebenen Spalten basierend auf der angegebenen Gruppierung enthält. Nur Zeilen, für die mindestens ein angegebener Ausdruck einen nicht leeren Wert zurückgibt, sind in der zurückgegebenen Tabelle enthalten. Wenn alle Ausdrücke für eine Zeile mit BLANK/NULL ausgewertet werden, ist diese Zeile in der zurückgegebenen Tabelle nicht enthalten.

Bemerkungen

  • Diese Funktion garantiert keine Sortierreihenfolge für die Ergebnisse.

  • Eine Spalte kann im „groupBy_columnName“-Parameter nur einmal angegeben werden. Die folgende Formel ist beispielsweise ungültig.

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

  • Die Verwendung dieser Funktion im DirectQuery-Modus wird nicht unterstützt, wenn sie in berechneten Spalten oder RLS-Regeln (Row-Level Security) eingesetzt wird.

Filterkontext

Betrachten Sie die folgende Abfrage:

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

In dieser Abfrage enthalten die „groupBy“-Spalten ohne Measure keine Spalten aus dem FILTER-Ausdruck (z. B. aus der Tabelle „Customer“). Der Filter wird auf die „groupBy“-Spalten nicht angewendet. Die Tabellen „Sales Territory“ und „Customer“ können über die Faktentabelle zum Umsatz der Handelspartner indirekt miteinander verknüpft sein. Da sie nicht direkt miteinander verknüpft sind, ist der Filterausdruck kein Vorgang und die „groupBy“-Spalten sind hiervon nicht betroffen.

Die Abfrage sieht folgendermaßen aus:

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

Die „groupBy“-Spalten enthalten eine Spalte, die vom Filter betroffen ist, und dieser Filter wird auf die „groupBy“-Ergebnisse angewendet.

Mit IGNORE

Die IGNORE-Syntax kann verwendet werden, um das Verhalten der SUMMARIZECOLUMNS-Funktion zu ändern, indem bestimmte Ausdrücke in der Auswertung mit einem leeren Wert/NULL ausgelassen werden. Zeilen, für die alle Ausdrücke, in denen IGNORE nicht verwendet wird, einen leeren Wert/NULL zurückgeben, werden unabhängig davon ausgeschlossen, ob die Ausdrücke, die IGNORE verwenden, mit einem leeren Wert/NULL ausgewertet werden. IGNORE kann nur in einem SUMMARIZECOLUMNS-Ausdruck verwendet werden.

Beispiel

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

Führt ein Rollup für die „Sales[CustomerId]“-Spalte aus, und erstellt damit eine Zwischensumme für alle Kunden in der angegebenen Gruppierung. Ohne IGNORE lautet das Ergebnis wie folgt:

CustomerId Total Qty BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

Mit IGNORE:

CustomerId Total Qty BlankIfTotalQtyIsNot3
B 3 3
C 3 3

Alle Ausdrücke ignoriert:

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

Obwohl beide Ausdrücke für einige Zeilen einen leeren Wert zurückgeben, werden sie einbezogen, da keine nicht ignorierten Ausdrücke vorhanden sind, die einen leeren Wert zurückgeben.

CustomerId Leer BlankIfTotalQtyIsNot5
A 5
B
C

Mit NONVISUAL

Die NONVISUAL-Funktion kennzeichnet einen Wertfilter in der SUMMARIZECOLUMNS-Funktion als einen Filter, der keine Auswirkungen auf Measurewerte hat, sondern nur auf „groupBy“-Spalten angewendet wird. NONVISUAL kann nur in einem SUMMARIZECOLUMNS-Ausdruck verwendet werden.

Beispiel

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]

Gibt das Ergebnis zurück, wobei [Visual Total Sales] die Summe über alle Jahre ist:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 9.791.060,30 29.358.677,22
2008 9.770.899,74 29.358.677,22

Im Vergleich dazu die gleiche Abfrage ohne die NONVISUAL-Funktion:

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]

Gibt das Ergebnis zurück, wobei [Visual Total Sales] die Summe über die beiden ausgewählten Jahre ist:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 9.791.060,30 19.561.960,04
2008 9.770.899,74 19.561.960,04

Mit ROLLUPADDISSUBTOTAL

Durch das Hinzufügen der ROLLUPADDISSUBTOTAL-Syntax ändert sich das Verhalten der SUMMARIZECOLUMNS-Funktion, indem dem Ergebnis basierend auf den „groupBy_spaltenName“-Spalten Rollup-/Zwischensummenzeilen hinzugefügt werden. ROLLUPADDISSUBTOTAL kann nur in einem SUMMARIZECOLUMNS-Ausdruck verwendet werden.

Beispiel mit einer einzelnen Zwischensumme

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]

Gibt die folgende Tabelle zurück:

Category Unterkategorie IsCategorySubtotal IsSubcategorySubtotal Total Qty
True True 60398
Accessories False True 36092
Accessories Fahrradträger False False 328
Bikes Mountainbikes False False 4970
Clothing False True 9101

Beispiel mit mehreren Zwischensummen

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

Der Umsatz wurde nach Bundesland, Kunde und Datum mit Zwischensummen für 1 gruppiert. Umsatz nach Bundesland und Datum 2. Nach Bundesland und Kunde 3. Rollup für Kunde und Datum ergibt Umsatz nach Bundesland.

Gibt die folgende Tabelle zurück:

CustomerID IsCustomerSubtotal State Total Qty Datum IsDateSubtotal
A false WA 5 7/10/2014
B false WA 1 7/10/2014
B false WA 2 7/11/2014
C false oder 2 7/10/2014
C false oder 1 7/11/2014
true WA 6 7/10/2014
true WA 2 7/11/2014
true oder 2 7/10/2014
true oder 1 7/11/2014
A false WA 5 true
B false WA 3 true
C false oder 3 TRUE
TRUE WA 8 TRUE
TRUE oder 3 true

Mit ROLLUPGROUP

ROLLUPGROUP kann wie die SUMMARIZE-Funktion zusammen mit ROLLUPADDISSUBTOTAL verwendet werden, um anzugeben, welche Zusammenfassungsgruppen/Granularitäten (Zwischensummen) einbezogen werden sollen, um die Anzahl der zurückgegebenen Zwischensummenzeilen zu reduzieren. ROLLUPGROUP kann nur in einem SUMMARIZECOLUMNS- oder SUMMARIZE-Ausdruck verwendet werden.

Beispiel mit mehreren Zwischensummen

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

Wenn weiterhin nach Stadt und Bundesstaat gruppiert, beim Melden einer Zwischensumme jedoch ein gemeinsames Rollup ausgeführt wird, wird die folgende Tabelle zurückgegeben:

State CustomerId IsCustomerSubtotal Total Qty 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
oder C false 3 Portland false
WA true 4 Bellevue false
WA true 4 Redmond false
oder true 3 Portland false
A false 5 FALSE
B false 3 true
C false 3 TRUE
TRUE 11 TRUE

SUMMARIZE