Del via


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.

SUMMARIZE