SUMMARIZECOLUMNS
Gælder for: Beregning af målingsvisualisering for beregnet kolonne i beregnet tabel
Returnerer en oversigtstabel over et sæt grupper.
Syntaks
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
Parametre
Begreb | Definition |
---|---|
groupBy_columnName | En fuldt kvalificeret kolonnereference (Table[Column]) til en basistabel, hvor de entydige værdier er inkluderet i den returnerede tabel. Hver groupBy_columnName kolonne er joinforbundet (forskellige tabeller) eller fandtes automatisk (samme tabel) med de efterfølgende angivne kolonner. |
filterTable | Et tabeludtryk, der føjes til filterkonteksten for alle kolonner, der er angivet som groupBy_columnName argumenter. De værdier, der findes i filtertabellen, bruges til at filtrere, før cross-join/auto-exist udføres. |
navn | En streng, der repræsenterer det kolonnenavn, der skal bruges til det efterfølgende angivne udtryk. |
udtryk | Ethvert DAX-udtryk, der returnerer en enkelt værdi (ikke en tabel). |
Returværdi
En tabel, der indeholder kombinationer af værdier fra de angivne kolonner baseret på den angivne gruppering. Det er kun rækker, hvor mindst ét af de angivne udtryk returnerer en ikke-tom værdi, der er inkluderet i den returnerede tabel. Hvis alle udtryk evalueres til BLANK/NULL for en række, medtages denne række ikke i den returnerede tabel.
Bemærkninger
Denne funktion garanterer ikke nogen sorteringsrækkefølge for resultaterne.
En kolonne kan ikke angives mere end én gang i parameteren groupBy_columnName. Følgende formel er f.eks. ugyldig.
SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )
Denne funktion understøttes ikke til brug i DirectQuery-tilstand, når den bruges i beregnede kolonner eller RLS-regler (row-level security).
Filterkontekst
Overvej følgende forespørgsel:
SUMMARIZECOLUMNS (
'Sales Territory'[Category],
FILTER('Customer', 'Customer' [First Name] = "Alicia")
)
Uden en måling indeholder groupBy-kolonnerne i denne forespørgsel ingen kolonner fra udtrykket FILTER (f.eks. fra tabellen Customer). Filteret anvendes ikke på groupBy-kolonnerne. Tabellerne Sales Territory og Customer kan være indirekte relateret via faktatabellen Reseller sales. Da de ikke er direkte relateret, er filterudtrykket et no-op, og groupBy-kolonnerne påvirkes ikke.
Men med denne forespørgsel:
SUMMARIZECOLUMNS (
'Sales Territory'[Category], 'Customer' [Education],
FILTER('Customer', 'Customer'[First Name] = "Alicia")
)
GroupBy-kolonnerne indeholder en kolonne, der påvirkes af filteret, og dette filter anvendes på groupBy-resultaterne.
Med IGNORE
IGNORE-syntaksen kan bruges til at ændre funktionsmåden for funktionen SUMMARIZECOLUMNS ved at udelade bestemte udtryk fra BLANK/NULL-evalueringen. Rækker, hvor alle udtryk, der ikke bruger IGNORE, returnerer BLANK/NULL, udelades uafhængigt af, om de udtryk, der bruger IGNORE, evalueres til BLANK/NULL eller ej. IGNORE kan kun bruges i et SUMMARIZECOLUMNS-udtryk.
Eksempel
SUMMARIZECOLUMNS(
Sales[CustomerId], "Total Qty",
IGNORE( SUM( Sales[Qty] ) ),
"BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 )
)
Dette akkumulerer kolonnen Sales[CustomerId] og opretter en subtotal for alle kunder i den angivne gruppering. Uden IGNORE er resultatet:
CustomerId | Samlet antal | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
F | 3 | 3 |
L | 3 | 3 |
Med IGNORE,
CustomerId | Samlet antal | BlankIfTotalQtyIsNot3 |
---|---|---|
F | 3 | 3 |
L | 3 | 3 |
Alle-udtrykket ignoreres,
SUMMARIZECOLUMNS(
Sales[CustomerId], "Blank",
IGNORE( BLANK() ), "BlankIfTotalQtyIsNot5",
IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) )
)
Selvom begge udtryk returnerer tomme for nogle rækker, medtages de, da der ikke er nogen ikke-diagnosticerede udtryk, der returnerer tomme.
CustomerId | Tom | BlankIfTotalQtyIsNot5 |
---|---|---|
A | 5 | |
F | ||
C |
Med NONVISUAL
Funktionen NONVISUAL markerer et værdifilter i funktionen SUMMARIZECOLUMNS, som ikke påvirker målingsværdier, men kun gælder for groupBy-kolonner. NONVISUAL kan kun bruges i et SUMMARIZECOLUMNS-udtryk.
Eksempel
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]
Returnerer resultatet, hvor [Visual Total Sales] er totalen på tværs af alle år:
DimDate[CalendarYear] | [Salg] | [Samlet salg af visualiseringer] |
---|---|---|
2007 | 9,791,060.30 | 29,358,677.22 |
2008 | 9,770,899.74 | 29,358,677.22 |
I modsætning hertil er den samme forespørgsel uden funktionen 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]
Returnerer resultatet, hvor [Visual Total Sales] er totalen på tværs af de to valgte år:
DimDate[CalendarYear] | [Salg] | [Samlet salg af visualiseringer] |
---|---|---|
2007 | 9,791,060.30 | 19,561,960.04 |
2008 | 9,770,899.74 | 19,561,960.04 |
Med ROLLUPADDISSUBTOTAL
Tilføjelsen af syntaksen ROLLUPADDISSUBTOTAL ændrer funktionsmåden for funktionen SUMMARIZECOLUMNS ved at føje akkumulerede rækker/subtotalrækker til resultatet baseret på de groupBy_columnName kolonner. ROLLUPADDISSUBTOTAL kan kun bruges i et SUMMARIZECOLUMNS-udtryk.
Eksempel med enkelt subtotal
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]
Returnerer følgende tabel,
Kategori | Underkategori | IsCategorySubtotal | IsSubcategorySubtotal | Samlet antal |
---|---|---|---|---|
True | True | 60398 | ||
Accessories | Falsk | True | 36092 | |
Accessories | Cykelstativer | Falsk | Falsk | 328 |
Cykler | Mountain Bikes | Falsk | Falsk | 4970 |
Tøj | Falsk | True | 9101 |
Eksempel med flere subtotaler
SUMMARIZECOLUMNS (
Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] )
)
Salg grupperes efter delstat, efter kunde, efter dato med subtotaler for 1. Salg efter delstat, efter dato 2. Salg efter delstat, efter kunde 3. Opløftet på både kunde og dato, der fører til salg efter delstat.
Returnerer følgende tabel,
CustomerID | IsCustomerSubtotal | State | Samlet antal | Dato | IsDateSubtotal |
---|---|---|---|---|---|
A | FALSE | WA | 5 | 7/10/2014 | |
F | FALSE | WA | 0 | 7/10/2014 | |
F | FALSE | WA | 2 | 7/11/2014 | |
C | FALSE | ELLER | 2 | 7/10/2014 | |
C | FALSE | ELLER | 0 | 7/11/2014 | |
SANDT | WA | 6 | 7/10/2014 | ||
SANDT | WA | 2 | 7/11/2014 | ||
SANDT | ELLER | 2 | 7/10/2014 | ||
SANDT | ELLER | 0 | 7/11/2014 | ||
A | FALSE | WA | 5 | SANDT | |
F | FALSE | WA | 3 | SANDT | |
C | FALSE | ELLER | 3 | SANDT | |
SANDT | WA | 8 | SANDT | ||
SANDT | ELLER | 3 | SANDT |
Med ROLLUPGROUP
Ligesom med funktionen SUMMARIZE kan ROLLUPGROUP bruges sammen med ROLLUPADDISSUBTOTAL til at angive, hvilke oversigtsgrupper/granulariteter (subtotaler), der skal medtages, hvilket reducerer antallet af returnerede rækker med subtotaler. ROLLUPGROUP kan kun bruges i et SUMMARIZECOLUMNS- eller SUMMARIZE-udtryk .
Eksempel med flere subtotaler
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] )
)
Stadig grupperet efter City og State, men akkumuleret, når der rapporteres en subtotal, returnerer følgende tabel,
State | CustomerId | IsCustomerSubtotal | Samlet antal | City | IsCityStateSubtotal |
---|---|---|---|---|---|
WA | A | FALSE | 2 | Bellevue | FALSE |
WA | F | FALSE | 2 | Bellevue | FALSE |
WA | A | FALSE | 3 | Vejle | FALSE |
WA | F | FALSE | 0 | Vejle | FALSE |
ELLER | C | FALSE | 3 | Portland | FALSE |
WA | SANDT | 4 | Bellevue | FALSE | |
WA | SANDT | 4 | Vejle | FALSE | |
ELLER | SANDT | 3 | Portland | FALSE | |
A | FALSE | 5 | FALSE | ||
F | FALSE | 3 | SANDT | ||
C | FALSE | 3 | SANDT | ||
SANDT | 11 | SANDT |
Kontekstafhængige SummarizeColumns
Baggrund
Indtil februar 2023 understøtter SUMMARIZECOLUMNS overhovedet ikke evaluering inden for en kontekstovergang. I produkter, der blev udgivet før denne måned, gjorde denne begrænsning SUMMARIZECOLUMNS ikke nyttig i de fleste af målingerne – det var ikke muligt at kalde en måling SUMMARIZECOLUMNS i alle tilfælde af kontekstovergang, herunder andre SUMMARIZECOLUMNS-sætninger.
Fra februar 2023 blev kontekstovergangen understøttet i nogle få scenarier, men ikke under alle betingelser. De understøttede og begrænsede sager er som følger:
SummarizeColumns-type | Eksternt filter med en enkelt kolonne | Eksternt filter med mere end én kolonne | Eksterne GroupBy-kolonner |
---|---|---|---|
SummarizeColumns med Kun GroupBy | OK | OK | OK |
SummarizeColumns med filtre/målinger | OK | FEJL | FEJL |
Fra juni 2024 aktiverer vi kontekstafhængige SummarizeColumns, som gør det muligt at evaluere SummarizeColumns i en hvilken som helst kontekstovergang. SummarizeColumns understøttes nu fuldt ud:
SummarizeColumns-type | Eksternt filter med en enkelt kolonne | Eksternt filter med mere end én kolonne | Eksterne GroupBy-kolonner |
---|---|---|---|
SummarizeColumns med Kun GroupBy | OK | OK | OK |
SummarizeColumns med filtre/målinger | OK | OK | OK |
Denne opdatering indeholder dog også ændringer af funktionsmåden for SummarizeColumns, som kan ændre resultaterne af eksisterende udtryk:
SelfValue-semantik for eksterne filtre
Vi introducerer et semantisk koncept med navnet SelfValue, som ændrer, hvordan filtre fra eksterne tabeller interagerer med GroupBy-kolonner i SummarizeColumns. Denne ændring giver ikke filtre fra en anden tabel adgang til at påvirke GroupBy-kolonnerne, selvom tabellerne er relateret via en filter efter-relation. Et eksempel, der illustrerer virkningen af denne ændring, omfatter følgende udtryk:
CalculateTable(
SummarizeColumns(
'Reseller Sales'[ResellerKey],
'Reseller Sales'[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Før denne opdatering gælder TreatAs-filteret for GroupBy-handlingen i SummarizeColumns, hvor relationen mellem 'Product'[Product Key] og 'Reseller Sales' [ProductKey] anvendes. Forespørgselsresultaterne omfatter derfor kun rækker, hvor 'Reseller Sales'[ProductKey] er lig med 229. Efter opdateringen filtreres GroupBy-kolonner i SummarizeColumns dog ikke længere efter kolonner fra eksterne tabeller, selvom der findes en relation mellem dem. Derfor filtreres kolonnen GroupBy i eksemplet ovenfor 'Reseller Sales'[ProductKey] ikke af kolonnen 'Product'[ProductKey]. Derfor indeholder forespørgslen rækker, hvor 'Reseller Sales'[ProductKey] ikke er lig med 229.
Hvis du foretrækker at bevare den tidligere funktionsmåde, kan du omskrive udtrykket ved hjælp af Summarize i stedet for SummarizeColumns, som vist nedenfor:
CalculateTable(
SUMMARIZE(
'Reseller Sales',
[ResellerKey],
[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Dette omskrevne udtryk bevarer den oprindelige semantik, hvor GroupBy-handlingen ikke påvirkes af den SelfValue-begrænsning, der blev introduceret af opdateringen.
Rækkevalidering for groupby-kolonner, der er fuldt dækket af Treatas
Før denne opdatering var alle GroupBy-kolonner fra en bestemt tabel fuldt dækket af et enkelt Treatas-filter fra den samme tabel, som vist nedenfor, i en SummarizeColumns-funktion:
SummarizeColumns(
Geography[Country],
Geography[State],
Treatas(
{("United States", "Alberta")},
Geography[Country],
Geography[State]
)
)
Resultatet af ovenstående forespørgsel omfatter de rækker, der er angivet i Treatas-filteret, uanset om de er gyldige eller ej. Resultatet vil f.eks. være en tabel med en enkelt række ("USA", "Alberta"), selvom der ikke fandtes en sådan række med [Country] = "USA" og [State] = "Alberta" i tabellen 'Geography'.
Dette problem blev kendt og er blevet løst af opdateringen. Efter opdateringen filtreres sådanne ugyldige rækker fra, og der returneres kun gyldige rækker fra tabellen GroupBy. Resultatet af ovenstående forespørgsel ville derfor være tomt, da der ikke er nogen gyldige rækker, der svarer til de angivne værdier [Country] og [State] i tabellen 'Geography'.
Tillad ikke blandede Keepfilters/overriddefilters på samme tabel/klynge
Den seneste opdatering har introduceret en midlertidig begrænsning, der udløser en fejlmeddelelse, der angiver:
"SummarizeColumns filters with keepfilters behavior and overridefilters behavior are mixed within one cluster, which is not allowed. Consider adding keepfilters() to all filters of summarizecolumns."
Denne fejl opstår, når både normale filtre (som tilsidesætter eksisterende filtre) og filtre med de angivne KeepFilters findes i den samme tabel/klynge. Eksempler:
Evaluate CalculateTable(
SummarizeColumns(
Product[Color],
KeepFilters(
TreatAs(
{( "Washington")}
, Geography[State]
)
),
TreatAs(
{("United States"), ("Canada")}
, Geography[Country]
)
)
,TreatAs({("Alberta")}, Geography[State])
,TreatAs({("Canada")}, Geography[Country])
)
I ovenstående udtryk er der to filtre i tabellen 'Geography': én med KeepFilters angivet og én uden. Disse filtre overlapper med eksterne filtre på forskellige kolonner. I øjeblikket er denne konfiguration ikke tilladt, fordi de to filtre er grupperet i et internt, og systemet kan ikke bestemme den korrekte funktionsmåde for tilsidesættelse af filteret for det grupperede filter i sådanne tilfælde.
Bemærk, at denne begrænsning er midlertidig. Vi udvikler aktivt løsninger for at fjerne denne begrænsning i fremtidige opdateringer. Hvis du støder på denne fejl, anbefaler vi, at du justerer filtrene i SummarizeColumns ved at tilføje eller fjerne KeepFilters efter behov for at sikre ensartet tilsidesættelse af funktionsmåden i hver tabel.