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 |
Zugehöriger Inhalt
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für