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