SUMMARIZECOLUMNS
gjelder:beregnet kolonneberegnet tabellMeasurevisualobjektberegning
Returnerer en sammendragstabell over et sett med grupper.
Syntaks
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
Parametere
Term | Definisjon |
---|---|
groupBy_columnName |
En fullstendig kolonnereferanse (Tabell[Kolonne]) til en basistabell der de distinkte values er inkludert i den returnerte tabellen. Hver groupBy_columnName kolonne krysskobles (forskjellige tabeller) or eksisterer automatisk (samme tabell) med de etterfølgende angitte kolonnene. |
filterTable |
Et tabelluttrykk som legges til i filter kontekst for all kolonner angitt som groupBy_columnName argumenter. De values som finnes i filter tabellen, brukes til å filter før krysskobling/auto-eksisterer. |
name |
En streng som representerer kolonnenavnet som skal brukes for det etterfølgende uttrykket som er angitt. |
expression |
Alle DAX uttrykk som returnerer én enkelt value (not en tabell). |
Returner value
En tabell som inneholder kombinasjoner av values fra de angitte kolonnene basert på den angitte grupperingen. Bare rader der minst ett av de angitte uttrykkene returnerer en ikke-blankvalue inkluderes i tabellen som returneres. If all uttrykk evaluate for å BLANK/NULL for en rad, er denne raden not inkludert i tabellen som returneres.
Merknader
Denne funksjonen garanterer not enhver sorteringsrekkefølge for resultatene.
En kolonne kan ikke angis mer enn én gang i parameteren groupBy_columnName. Formelen nedenfor er for eksempel ugyldig.
SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )
Denne funksjonen støttes not for bruk i DirectQuery-modus når den brukes i beregnede kolonner or regler for sikkerhet på radnivå (RLS).
Filter kontekst
Vurder følgende spørring:
SUMMARIZECOLUMNS (
'Sales Territory'[Category],
FILTER('Customer', 'Customer' [First Name] = "Alicia")
)
I denne spørringen, uten measure inneholder groupBy kolonnene not kolonner fra FILTER-uttrykket (for eksempel fra kundetabell). filter brukes not på groupBy kolonnene. Tabellene salgsdistrikt and kunde kan være indirekte related gjennom tabellen forhandlersalg fact. Siden de er not direkte related, er filter-uttrykket en no-op andgroupBy kolonnene påvirkes not.
Men med denne spørringen:
SUMMARIZECOLUMNS (
'Sales Territory'[Category], 'Customer' [Education],
FILTER('Customer', 'Customer'[First Name] = "Alicia")
)
De groupBy kolonnene inneholder en kolonne som påvirkes av filterand som filter brukes på groupBy resultater.
Med IGNORE
Syntaksen for IGNORE kan brukes til å endre virkemåten til SUMMARIZECOLUMNS-funksjonen ved å utelate bestemte uttrykk fra BLANK/NULL-evalueringen. Rader som all uttrykk not ved hjelp av IGNORE returnerer BLANK/NULL, utelates uavhengig av om uttrykkene som bruker IGNOREevaluate til å BLANK/NULL-ornot. IGNORE kan bare brukes i et SUMMARIZECOLUMNS uttrykk.
Eksempel
SUMMARIZECOLUMNS(
Sales[CustomerId], "Total Qty",
IGNORE( SUM( Sales[Qty] ) ),
"BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 )
)
Dette ruller opp kolonnen Salg[CustomerId], og oppretter en delsum for all kunder i den angitte grupperingen. Uten IGNOREer resultatet:
CustomerId | Totalt antall | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
F | 3 | 3 |
L | 3 | 3 |
Med IGNORE,
CustomerId | Totalt antall | BlankIfTotalQtyIsNot3 |
---|---|---|
F | 3 | 3 |
L | 3 | 3 |
All uttrykk ignorert,
SUMMARIZECOLUMNS(
Sales[CustomerId], "Blank",
IGNORE( BLANK() ), "BlankIfTotalQtyIsNot5",
IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) )
)
Even selv om begge uttrykkene returnerer blank for noen rader, er de inkludert siden det ikke finnes noen ujusterte uttrykk som returnerer blank.
CustomerId | Blank | BlankIfTotalQtyIsNot5 |
---|---|---|
A | 5 | |
F | ||
L |
Med NONVISUAL
Funksjonen NONVISUAL markerer en valuefilter i SUMMARIZECOLUMNS funksjon som not som påvirker measurevalues, men bare gjelder for groupBy kolonner. NONVISUAL kan bare brukes i et SUMMARIZECOLUMNS uttrykk.
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 der [Totalt salg for visualobjekt] er totalsummen i all år:
DimDate[CalendarYear] | [Salg] | [Totalt salg for visualobjekt] |
---|---|---|
2007 | 9,791,060.30 | 29,358,677.22 |
2008 | 9,770,899.74 | 29,358,677.22 |
Den samme spørringen derimot utenNONVISUAL-funksjonen:
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 der [Visual Total Sales] er totalen i løpet av de to valgte årene:
DimDate[CalendarYear] | [Salg] | [Totalt salg for visualobjekt] |
---|---|---|
2007 | 9,791,060.30 | 19,561,960.04 |
2008 | 9,770,899.74 | 19,561,960.04 |
Med ROLLUPADDISSUBTOTAL
Tilføyelsen av ROLLUPADDISSUBTOTAL-syntaksen endrer virkemåten til SUMMARIZECOLUMNS-funksjonen ved å legge til rollup/delsumrader i resultatet basert på groupBy_columnName kolonner. ROLLUPADDISSUBTOTAL kan bare brukes i et SUMMARIZECOLUMNS uttrykk.
Eksempel med enkelt delsum
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 tabellen nedenfor:
Kategori | Underkategori | IsCategorySubtotal | IsSubcategorySubtotal | Totalt antall |
---|---|---|---|---|
True | True | 60398 | ||
Tilbehør | False | True | 36092 | |
Tilbehør | Sykkelstativer | False | False | 328 |
Sykler | Mountain Bikes | False | False | 4970 |
Klær | False | True | 9101 |
Eksempel med flere delsummer
SUMMARIZECOLUMNS (
Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] )
)
Salg grupperes etter delstat, sortert etter kunde, etter date, med delsummer for 1. Salg etter delstat, etter date 2. Salg etter delstat, sortert etter kunde 3. Fremhevet på både kunde anddate som fører til salg etter stat.
Returnerer tabellen nedenfor:
CustomerID | IsCustomerSubtotal | State | Totalt antall | Date | IsDateSubtotal |
---|---|---|---|---|---|
A | FALSE |
WA | 5 | 10.07.2014 | |
F | FALSE |
WA | 1 | 10.07.2014 | |
F | FALSE |
WA | 2 | 7/11/2014 | |
L | FALSE |
OR | 2 | 10.07.2014 | |
L | FALSE |
OR | 1 | 7/11/2014 | |
TRUE |
WA | 6 | 10.07.2014 | ||
TRUE |
WA | 2 | 7/11/2014 | ||
TRUE |
OR | 2 | 10.07.2014 | ||
TRUE |
OR | 1 | 7/11/2014 | ||
A | FALSE |
WA | 5 | TRUE |
|
F | FALSE |
WA | 3 | TRUE |
|
L | FALSE |
OR | 3 | TRUE |
|
TRUE |
WA | 8 | TRUE |
||
TRUE |
OR | 3 | TRUE |
Med ROLLUPGROUP
Som med SUMMARIZE-funksjonen kan ROLLUPGROUP brukes sammen med ROLLUPADDISSUBTOTAL for å angi hvilke sammendragsgrupper/detaljenheter (delsummer) som skal inkluderes, noe som reduserer antall delsumrader som returneres. ROLLUPGROUP kan bare brukes i et SUMMARIZECOLUMNSorSUMMARIZE uttrykk.
Eksempel med flere delsummer
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] )
)
Fortsatt gruppert etter poststed and delstat, men rullet sammen når du rapporterer en delsum, returnerer tabellen nedenfor:
State | CustomerId | IsCustomerSubtotal | Totalt antall | City | IsCityStateSubtotal |
---|---|---|---|---|---|
WA | A | FALSE |
2 | Bellevue | FALSE |
WA | F | FALSE |
2 | Bellevue | FALSE |
WA | A | FALSE |
3 | Sandvika | FALSE |
WA | F | FALSE |
1 | Sandvika | FALSE |
OR | L | FALSE |
3 | Portland | FALSE |
WA | TRUE |
4 | Bellevue | FALSE |
|
WA | TRUE |
4 | Sandvika | FALSE |
|
OR | TRUE |
3 | Portland | FALSE |
|
A | FALSE |
5 | FALSE |
||
F | FALSE |
3 | TRUE |
||
L | FALSE |
3 | TRUE |
||
TRUE |
11 | TRUE |
Kontekstavhengig SummarizeColumns
Bakgrunn
Frem til februar 2023 støttet SUMMARIZECOLUMNSnot evaluering i en kontekstovergang på all. I produkter som ble utgitt før denne month, gjorde denne begrensningen SUMMARIZECOLUMNSnot nyttig i de fleste målene – det var not mulig å kalle et measureSUMMARIZECOLUMNS i alle fall for kontekstovergang, inkludert andre SUMMARIZECOLUMNSstatements.
Fra februar 2023 ble kontekstovergangen støttet i noen få scenarioer, men not i all betingelsene. De støttede and begrensede tilfellene er som følger:
SummarizeColumns type | Eksterne Filter med én kolonne | Eksterne Filter med mer enn én kolonne | Eksterne GroupBy kolonner |
---|---|---|---|
SummarizeColumns bare med GroupBy | OK | OK | OK |
SummarizeColumns med Filters/Measures | OK | ERROR | ERROR |
Fra juni 2024 aktiverer vi kontekstavhengige SummarizeColumns som gjør at SummarizeColumns kan evalueres i en hvilken som helst kontekstovergang, SummarizeColumns i measure støttes now fullt ut:
SummarizeColumns type | Eksterne Filter med én kolonne | Eksterne Filter med mer enn én kolonne | Eksterne GroupBy kolonner |
---|---|---|---|
SummarizeColumns bare med GroupBy | OK | OK | OK |
SummarizeColumns med Filters/Measures | OK | OK | OK |
Denne oppdateringen inneholder imidlertid også endringer i virkemåten til SummarizeColumns, som kan endre resultatene av eksisterende uttrykk:
SelfValue-semantikk for eksterne filters
Vi introduserer et semantisk konsept kalt SelfValue, som endrer hvordan filters fra eksterne tabeller samhandler med GroupBy kolonner i SummarizeColumns. Denne endringen tillater ikke filters fra en annen tabell for å påvirke GroupBy kolonner, evenif tabellene related gjennom en filter-etter-relasjon. Et eksempel som illustrerer virkningen av denne endringen innebærer følgende uttrykk:
CalculateTable(
SummarizeColumns(
'Reseller Sales'[ResellerKey],
'Reseller Sales'[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Før denne oppdateringen vil TreatAsfilter gjelde for GroupBy-operasjonen i SummarizeColumns, og utnytte relasjonen mellomProduct[Product key] and «Forhandlersalg»[ProductKey]. Resultatet av spørringen inkluderer derfor bare rader der «Forhandlersalg»[ProductKey] er lik 229. Men etter oppdateringen filtreres GroupBy kolonner i SummarizeColumns ikke lenger etter kolonner fra eksterne tabeller, evenif det finnes en relasjon mellom dem. I eksemplet ovenfor blir derfor GroupBy kolonnen Forhandlersalg[ProductKey] not filtrert etter kolonnenProduct[ProductKey]. Som et resultat vil spørringen inneholde rader der «Forhandlersalg»[ProductKey] er not lik 229.
If du foretrekker å beholde virkemåten previous, kan du skrive om uttrykket ved hjelp av Summarize i stedet for SummarizeColumns, som vist nedenfor:
CalculateTable(
SUMMARIZE(
'Reseller Sales',
[ResellerKey],
[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Dette omskrevne uttrykket bevarer de opprinnelige semantikkene der GroupBy operasjonen er not påvirket av SelfValue-begrensningen som ble innført av oppdateringen.
Radvalidering for groupby kolonner fullstendig dekket av Treatas
Før denne oppdateringen, i en SummarizeColumns-funksjon, ble ifallGroupBy kolonner fra en bestemt tabell fullstendig dekket av én enkelt Treatasfilter fra den samme tabellen, som vist nedenfor:
SummarizeColumns(
Geography[Country],
Geography[State],
Treatas(
{("United States", "Alberta")},
Geography[Country],
Geography[State]
)
)
Resultatet av spørringen ovenfor inkluderer de radene som ble angitt i Treatasfilter, uavhengig av om de var gyldige ornot. Resultatet vil for eksempel være en tabell med én rad ("USA", "Alberta"), evenif ingen slik rad med [Land] = "USA" and [Stat] = "Alberta" eksisterte i geografitabellen.
Dette problemet var kjent and har blitt adressert av oppdateringen. Etter oppdateringen filtreres slike ugyldige rader ut, and bare gyldige rader fra GroupBy tabellen returneres. Resultatet for spørringen ovenfor vil derfor være tomt, da det ikke er noen gyldige rader som samsvarer med den angitte [Land] and [Delstat] values i Geografi-tabellen.
Ikke tillat blandede Keepfilters/overstyrte filtre i samme tabell/klynge
Den nylige oppdateringen har innført en midlertidig begrensning som utløser en error melding som sier:
"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."
Dette error oppstår når både normal filters (som overstyrer eksisterende filters) andfilters med KeepFilters angitt, finnes i samme tabell/klynge. Eksempel:
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 uttrykket ovenfor er det to filters i Geografi-tabellen: én med KeepFilters angitt and uten. Disse filters overlapper med eksterne filters på forskjellige kolonner. For øyeblikket er denne konfigurasjonen not tillatt fordi internt er de to filters gruppert i én, and systemet ikke kan bestemme riktig filter overordnet virkemåte for grupperte filter generelt i slike tilfeller.
Vær oppmerksom på at denne begrensningen er midlertidig. Vi utvikler aktivt løsninger for å fjerne denne begrensningen i fremtidige oppdateringer. If du støter på denne error, anbefaler vi at du justerer filters i SummarizeColumns ved å legge til or fjerne KeepFilters etter behov for å sikre konsekvent overordnet virkemåte på hver tabell.