Jaa


SUMMARIZECOLUMNS

Koskee: Lasketun sarakkeen lasketun taulukon mittarin visuaalinen laskutoimitus

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.
nimi Merkkijono, joka edustaa seuraavassa määritetyssä lausekkeessa käytettävän sarakkeen nimeä.
lauseke 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 rivin arvo on tyhjäarvo, 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 ei ole toiminto, 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.

Jos IGNORE on käytössä

IGNORE-syntaksia voidaan käyttää SUMMARIZECOLUMNS-funktion käyttäytymisen muokkaamiseen jättämällä pois tiettyjä lausekkeita tyhjäarvoista laskelmasta. Rivit, joille kaikki IGNORE-funktiota käyttämättömät lausekkeet palauttavat tyhjäarvon, suljetaan pois riippumatta siitä, saavatko IGNORE-funktiota käyttävät lausekkeet tulokseksi tyhjäarvon vai eivät. IGNORE-funktiota 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. Jos IGNORE ei ole käytössä, tulos on:

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

Jos IGNORE on käytössä,

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 Tyhjä BlankIfTotalQtyIsNot5
A 5
B
C

NONVISUAL-ehto

NONVISUAL-funktio merkitsee arvosuodattimen SUMMARIZECOLUMNS-funktiossa tavalla, joka ei vaikuta mittausarvoja, mutta koskee vain ryhmittäytysperustesarakkeita. NONVISUAL-funktiota 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 NONVISUAL-funktiota:

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

Jos ROLLUPADDISSUBTOTAL on kanssa

ROLLUPADDISSUBTOTAL-syntaksin lisääminen muokkaa SUMMARIZECOLUMNS-funktiota lisäämällä koonti-/välisummarivejä groupBy_columnName-sarakkeisiin perustuvaan tulokseen. ROLLUPADDISSUBTOTAL-lauseketta 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äärin Tosi 36092
Lisävarusteet Pyöräntelineet Epätosi Epätosi 328
Polkupyörät Maastopyörät Epätosi Epätosi 4970
Vaatteet Väärin 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
C FALSE TAI 2 10.7.2014
C FALSE TAI 1 7/11/2014
TRUE WA 6 10.7.2014
TRUE WA 2 7/11/2014
TRUE TAI 2 10.7.2014
TRUE TAI 1 7/11/2014
A FALSE WA 5 TRUE
B FALSE WA 3 TRUE
C FALSE TAI 3 TRUE
TRUE WA 8 TRUE
TRUE TAI 3 TRUE

ROLLUPGROUP-funktion kanssa

Kuten SUMMARIZE-funktiota, ROLLUPGROUVia voidaan käyttää yhdessä ROLLUPADDISSUBTOTALin 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-funktiota 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
TAI C FALSE 3 Portland FALSE
WA TRUE 4 Bellevue FALSE
WA TRUE 4 Turku FALSE
TAI TRUE 3 Portland FALSE
A FALSE 5 FALSE
B FALSE 3 TRUE
C FALSE 3 TRUE
TRUE 11 TRUE

Contextual SummarizeColumns

Tausta

Helmikuuhun 2023 asti SUMMARIZECOLUMNS ei tukenut arviota kontekstisiirtymässä. Ennen kyseistä kuukautta julkaistuissa tuotteissa tämä rajoitus teki SUMMARIZECOLUMNS-funktiosta hyödyksi useimmissa mittareissa – ei ollut mahdollista kutsua mittaria 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 VIRHE VIRHE

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ä AddColumns- tai SelectColumns-funktiota SummarizeColumns-sarakkeen sijaan, kuten alla on esitetty:

CalculateTable(
    Filter(
        SelectColumns(
            'Reseller Sales',
            "ResellerKey", 
            [ResellerKey],
            "ProductKey",
            [ProductKey]
        ),
        And(Not IsBlank([ResellerKey]),  Not IsBlank([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.

TIIVISTÄÄ