Jaa


SUMMARIZECOLUMNS

Koskee seuraavia:Laskettu sarakeLaskettu taulukkoMittayksikköVisuaalinen laskenta -

Palauttaa ryhmäjoukon yhteenvetotaulukon.

Syntaksi

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

Parametrit

Termi Määritelmä
groupBy_columnName Täydellinen sarakeviittaus (Taulukko[Sarake]) perustaulukkoon, jonka erilliset arvot sisältyvät palautettuun taulukkoon. Jokainen groupBy_columnName sarake on ristiin yhdistetty (eri taulukot) tai automaattisesti muodostettu (sama taulukko), jossa on seuraavat määritetyt sarakkeet.
filterTable Taulukkolauseke, joka lisätään kaikkien groupBy_columnName argumentteina määritettyjen sarakkeiden suodatinkontekstiin. Suodatintaulukossa olevia arvoja käytetään suodattamaan ennen ristiin yhdistämisen/automaattisen tunnistuksen suorittamista.
name Merkkijono, joka edustaa seuraavassa määritetyssä lausekkeessa käytettävän sarakkeen nimeä.
expression Mikä tahansa DAX lauseke, joka palauttaa yksittäisen arvon (ei taulukkoa).

Palautusarvo

Taulukko, joka sisältää arvojen yhdistelmiä annetuista sarakkeista määritetyn ryhmittelyn perusteella. Vain rivit, joille ainakin yksi annetuista lausekkeista palauttaa muun kuin tyhjän arvon, sisällytetään palautettavaan taulukkoon. Jos kaikkien lausekkeiden arvoksi lasketaan riville BLANK/NULL, kyseistä riviä ei sisällytetä palautettavaan taulukkoon.

Huomautukset

  • Tämä funktio ei takaa tulosten lajittelujärjestystä.

  • Saraketta ei voi määrittää useammin kuin kerran groupBy_columnName-parametrissa. Esimerkiksi seuraava kaava on virheellinen.

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

  • Tätä funktiota ei tueta DirectQuery-tilassa lasketuissa sarakkeissa tai rivitason suojauksen (RLS) säännöissä käytettäväksi.

Suodatinkonteksti

Kokeile seuraavaa kyselyä:

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

Tässä kyselyssä groupBy-sarakkeet eivät ilman mittaria sisällä FILTER-lausekkeen sarakkeita (esimerkiksi Asiakas-taulukosta). Suodatinta ei käytetä groupBy-sarakkeissa. Myyntialue- ja Asiakas-taulukot voivat epäsuorasti liittyä toisiinsa Jälleenmyyjän myynti -faktataulukon kautta. Koska ne eivät liity suoraan toisiinsa, suodatinlauseke on no-op eikä groupBy-sarakkeisiin kohdistu vaikutusta.

Tätä kyselyä käyttämällä kuitenkin:

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

groupBy-sarakkeet sisältävät sarakkeen, johon suodatin vaikuttaa, ja kyseistä suodatinta käytetään groupBy-tuloksiin.

IGNORE kanssa

IGNORE-syntaksia voidaan käyttää SUMMARIZECOLUMNS-funktion käyttäytymisen muokkaamiseen jättämällä pois tiettyjä lausekkeita BLANK/NULL-laskelmasta. Rivit, joille kaikki lausekkeet, jotka eivät käytä IGNORE palauttavat BLANK/NULL, jätetään pois riippumatta siitä, arvioivatko IGNORE käyttävät lausekkeet arvoksi BLANK/NULL vai ei. IGNORE voi käyttää vain SUMMARIZECOLUMNS-lausekkeessa.

Esimerkki

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

Tämä kokoaa yhteen Sales[CustomerId]-sarakkeen ja luo välisumman kaikille annetun ryhmittelyn asiakkaille. Ilman IGNOREtulos on:

CustomerId Määrä yhteensä BlankIfTotalQtyIsNot3
A 5
B 3 3
N 3 3

Kun IGNORE,

CustomerId Määrä yhteensä BlankIfTotalQtyIsNot3
B 3 3
N 3 3

Koko lauseke sivuutettu,

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

Vaikka molemmat lausekkeet palauttavat tyhjän joillekin riveille, ne sisältyvät mukaan, koska ei ole määrittämättömiä lausekkeita, jotka palauttavat tyhjän.

CustomerId Aihio BlankIfTotalQtyIsNot5
A 5
B
N

NONVISUAL kanssa

NONVISUAL-funktio merkitsee SUMMARIZECOLUMNS-funktiossa arvosuodattimen, joka ei vaikuta mittausarvoihin, mutta koskee vain groupBy-sarakkeita. NONVISUAL voi käyttää vain SUMMARIZECOLUMNS-lausekkeessa.

Esimerkki

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]

Palauttaa tuloksen, jossa [Visual Total Sales] on kaikkien vuosien kokonaissumma:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 9,791,060.30 29,358,677.22
2008 9,770,899.74 29,358,677.22

Sitä vastoin sama kysely ilman 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]

Palauttaa tuloksen, jossa [Visual Total Sales] on valittujen kahden vuoden kokonaissumma:

DimDate[CalendarYear] [Sales] [Visual Total Sales]
2007 9,791,060.30 19,561,960.04
2008 9,770,899.74 19,561,960.04

ROLLUPADDISSUBTOTAL kanssa

ROLLUPADDISSUBTOTAL-syntaksin lisääminen muokkaa SUMMARIZECOLUMNS-funktion toimintaa lisäämällä koonti-/välisummarivejä groupBy_columnName-sarakkeisiin perustuvaan tulokseen. ROLLUPADDISSUBTOTAL voi käyttää vain SUMMARIZECOLUMNS-lausekkeessa.

Esimerkki yksittäisellä välisummalla

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]

Palauttaa seuraavan taulukon,

Luokka Alakategoria IsCategorySubtotal IsSubcategorySubtotal Määrä yhteensä
Tosi Tosi 60398
Lisävarusteet Väärä Tosi 36092
Lisävarusteet Pyöräntelineet Väärä Väärä 328
Polkupyörät Maastopyörät Väärä Väärä 4970
Vaatteet Väärä Tosi 9101

Esimerkki, jossa on useita välisummia

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

Myynti ryhmiteltään osavaltion, asiakkaan, päivämäärän mukaan, välisummat 1:lle. Myynti osavaltion mukaan, päivämäärän mukaan 2. Myynti osavaltion mukaan, asiakkaan mukaan 3. Koottu sekä asiakkaalle että päivämäärälle, mikä johtaa osavaltiokohtaseen myyntiin.

Palauttaa seuraavan taulukon,

Asiakastunnus IsCustomerSubtotal Vaihe Määrä yhteensä Päivämäärä IsDateSubtotal
A FALSE WA 5 10.7.2014
B FALSE WA 1 10.7.2014
B FALSE WA 2 7/11/2014
N FALSE OR 2 10.7.2014
N FALSE OR 1 7/11/2014
TRUE WA 6 10.7.2014
TRUE WA 2 7/11/2014
TRUE OR 2 10.7.2014
TRUE OR 1 7/11/2014
A FALSE WA 5 TRUE
B FALSE WA 3 TRUE
N FALSE OR 3 TRUE
TRUE WA 8 TRUE
TRUE OR 3 TRUE

ROLLUPGROUP kanssa

Kuten SUMMARIZE funktiota, ROLLUPGROUP voidaan käyttää yhdessä ROLLUPADDISSUBTOTAL kanssa sen määrittämiseen, mitkä yhteenvetoryhmät/askelvälit (välisummat) sisällytetään (palautettujen välisummarivien määrän vähentämiseksi). ROLLUPGROUP voi käyttää vain SUMMARIZECOLUMNS tai SUMMARIZE-lausekkeessa.

Esimerkki, jossa on useita välisummia

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

Yhä ryhmitelty kaupungin ja osavaltion mukaan, mutta koottu yhteen raportoitaessa välisumma palauttaa seuraavan taulukon:

Vaihe CustomerId IsCustomerSubtotal Määrä yhteensä City IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA B FALSE 2 Bellevue FALSE
WA A FALSE 3 Turku FALSE
WA B FALSE 1 Turku FALSE
OR N FALSE 3 Portland FALSE
WA TRUE 4 Bellevue FALSE
WA TRUE 4 Turku FALSE
OR TRUE 3 Portland FALSE
A FALSE 5 FALSE
B FALSE 3 TRUE
N FALSE 3 TRUE
TRUE 11 TRUE

Contextual SummarizeColumns

Tausta

Helmikuuhun 2023 saakka SUMMARIZECOLUMNS tuki kontekstisiirtymän arviointia. Ennen kyseistä kuukautta julkaistuissa tuotteissa tämä rajoitus SUMMARIZECOLUMNS hyödyksi useimmissa mittareissa – ei ollut mahdollista kutsua toimenpidettä SUMMARIZECOLUMNS missään kontekstisiirtymätapauksessa, mukaan lukien muut SUMMARIZECOLUMNS lausekkeet.

Helmikuusta 2023 alkaen kontekstisiirtymää tuettiin muutamassa tilanteessa, mutta ei kaikissa olosuhteissa. Tuetut ja rajoitetut tapaukset ovat seuraavat:

SummarizeColumns-tyyppi Ulkoinen suodatin, jossa on yksi sarake Ulkoinen suodatin, jossa on useampi kuin yksi sarake Ulkoiset Ryhmittelyperuste-sarakkeet
SummarizeColumns ja vain GroupBy OK OK OK
SummarizeColumns ja Suodattimet/Mittarit OK ERROR ERROR

Kesäkuusta 2024 alkaen otamme käyttöön tilannekohtaisen SummarizeColumns-funktion, joka mahdollistaa SummarizeColumns-funktion arvioinnin missä tahansa kontekstisiirtymässä. Mittarin SummarizeColumns-funktiota tuetaan nyt täysin:

SummarizeColumns-tyyppi Ulkoinen suodatin, jossa on yksi sarake Ulkoinen suodatin, jossa on useampi kuin yksi sarake Ulkoiset Ryhmittelyperuste-sarakkeet
SummarizeColumns ja vain GroupBy OK OK OK
SummarizeColumns ja Suodattimet/Mittarit OK OK OK

Tämä päivitys sisältää kuitenkin myös muutoksia SummarizeColumns-funktion toimintaan, mikä voi muuttaa olemassa olevien lausekkeiden tuloksia:

Ulkoisten suodattimien SelfValue-semantiikka

Olemme ottamassa käyttöön semanttisen käsitteen nimeltä SelfValue, joka muuttaa sitä, miten ulkoisten taulukoiden suodattimet toimivat yhdessä SummarizeColumns-funktion GroupBy-sarakkeiden kanssa. Tämä muutos estää eri taulukon suodattimet vaikuttamaan Ryhmittelyperuste-sarakkeisiin, vaikka taulukot liittyvät toisiinsa suodatuskohtaisen suhteen kautta. Tämän muutoksen vaikutusta havainnollistava esimerkki sisältää seuraavan lausekkeen:

CalculateTable(
  SummarizeColumns(
      'Reseller Sales'[ResellerKey], 
      'Reseller Sales'[ProductKey]
  ), 
  Treatas({(229)}, 'Product'[Product Key])
)

Ennen tätä päivitystä TreatAs-suodatinta sovelletaan SummarizeColumns-sarakkeen GroupBy-toimintoon hyödyntäen suhdetta kohteiden 'Tuote'[Tuoteavain] ja 'Jälleenmyyjän myynti'[Tuoteavain] välillä. Näin ollen kyselyn tulokset sisältävät vain rivit, joissa 'Jälleenmyyjän myynti'[Tuoteavain] on 229. Kuitenkin päivityksen jälkeen SummarizeColumns-funktion GroupBy-sarakkeita ei enää suodateta ulkoisten taulukoiden sarakkeiden mukaan, vaikka niiden välillä olisi suhde. Tämän vuoksi edellä olevassa esimerkissä GroupBy-saraketta 'Jälleenmyyjän myynti'[Tuoteavain] ei suodateta Product'[ProductKey]-sarakkeen mukaan. Tämän seurauksena kysely sisältää rivejä, joissa 'Jälleenmyyjän myynti'[Tuoteavain] ei ole yhtä suuri kuin 229.

Jos haluat säilyttää aiemman toiminnan, voit kirjoittaa lausekkeen uudelleen käyttämällä Summarize-funktiota SummarizeColumns-sarakkeen sijaan alla kuvatulla tavalla:

CalculateTable(
    SUMMARIZE(
        'Reseller Sales',
        [ResellerKey],
        [ProductKey]
    ),
    Treatas({(229)}, 'Product'[Product Key])
)

Tämä uudelleenkirjoituslauseke säilyttää alkuperäisen semantiikan, jossa päivityksen käyttöön ottama SelfValue-rajoitus ei vaikuta GroupBy-toimintoon.

Groupby-sarakkeiden rivien tarkistus kattaa täysin Treatas-sarakkeet

Ennen tätä päivitystä SummarizeColumns-funktiossa, jos kaikki tietyn taulukon GroupBy-sarakkeet kattoivat täysin yksittäisen Treatas-suodattimen samasta taulukosta, kuten alla esitetään:

SummarizeColumns(
  Geography[Country], 
  Geography[State], 
  Treatas(
      {("United States", "Alberta")}, 
      Geography[Country], 
      Geography[State]
  )
)

Yllä olevan kyselyn tulos sisältää kaikki Treatas-suodattimessa määritetyt rivit riippumatta siitä, ovatko ne kelvollisia vai eivät. Tulos olisi esimerkiksi yksirivinen taulukko ("Yhdysvallat", "Alberta"), vaikka tällaista riviä ei olisi [Maa] = "Yhdysvallat" ja [Osavaltio] = "Alberta" ollut geography-taulukossa.

Tämä ongelma oli tunnettu, ja päivitys on ratkonut sen. Päivityksen jälkeen tällaiset virheelliset rivit suodatetaan pois ja vain Kelvolliset rivit Ryhmittelyperuste-taulukosta palautetaan. Tämän vuoksi yllä olevan kyselyn tulos olisi tyhjä, koska ei ole kelvollisia rivejä, jotka vastaavat määritettyjä [Maa]- ja [Osavaltio]-arvoja Geography-taulukossa.

Estä yhdistettyjen Keepfilters/overriddefilters-suodattimien pitäminen samassa taulukossa tai klusterissa

Viimeisin päivitys on ottanut käyttöön tilapäisen rajoituksen, joka aiheuttaa virhesanoman, joka ilmoittaa:

"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." 

Tämä virhe ilmenee, kun sekä normaalit suodattimet (jotka ohittavat olemassa olevat suodattimet) että KeepFilters-parametrilla määritetyt suodattimet esiintyvät samassa taulukossa/klusterissa. Esimerkkejä:

Evaluate CalculateTable(
  SummarizeColumns(
      Product[Color],
      KeepFilters(
          TreatAs(
              {( "Washington")}
              , Geography[State]
          )
      ),
      TreatAs(
          {("United States"), ("Canada")}
          , Geography[Country]
      )
  )
  ,TreatAs({("Alberta")}, Geography[State])
  ,TreatAs({("Canada")}, Geography[Country])
)

Yllä olevassa lausekkeessa on kaksi suodatinta Geography-taulukossa: toinen keepFilters-määritetyllä suodattimella ja toinen ilman. Nämä suodattimet ovat päällekkäisiä eri sarakkeiden ulkoisten suodattimien kanssa. Tällä hetkellä tätä kokoonpanoa ei sallita, koska sisäisesti kaksi suodatinta on klusteroitu yhteen, eikä järjestelmä pysty määrittämään oikeaa suodattimen ohitustoimintaa klusterdulle suodattimelle yleisesti tällaisissa tapauksissa.

Huomaa, että tämä rajoitus on tilapäinen. Kehitämme aktiivisesti ratkaisuja tämän rajoituksen poistamiseksi tulevissa päivityksissä. Jos kohtaat tämän virheen, kehotamme säätämään SummarizeColumns-funktion suodattimia lisäämällä tai poistamalla KeepFilters-suodattimia tarpeen mukaan, jotta jokaisella taulukolla voidaan varmistaa yhtenäinen ohitustoiminta.

SUMMARIZE