SUMMARIZECOLUMNS
Vzťahuje sa na:vypočítaný stĺpec
vypočítanej tabuľky
vizuálového výpočtu
Vráti súhrnnú tabuľku pre množinu skupín.
Syntax
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
Parametre
Obdobie | Definícia |
---|---|
groupBy_columnName |
Úplný odkaz na stĺpec (Table[Column]) na základnú tabuľku, pre ktorú sú zahrnuté jedinečné hodnoty vo vrátenej tabuľke. Každý groupBy_columnName stĺpec je krížovo spojený (rôzne tabuľky) alebo automaticky existujúci (rovnaká tabuľka) s nasledujúcimi zadanými stĺpcami. |
filterTable |
Výraz tabuľky, ktorý sa pridá do kontextu filtra pre všetky stĺpce zadané ako groupBy_columnName argumenty. Hodnoty nachádzajúce sa v tabuľke filtra sa použijú na filtrovanie pred vykonaním krížového spojenia alebo automatického existovania. |
name |
Reťazec predstavujúci názov stĺpca, ktorý sa má použiť pre nasledujúci zadaný výraz. |
expression |
Akýkoľvek DAX výraz, ktorý vráti jednu hodnotu (nie tabuľku). |
Vrátená hodnota
Tabuľka, ktorá obsahuje kombinácie hodnôt zo zadaných stĺpcov na základe zadaného zoskupenia. Do vrátenej tabuľky sú zahrnuté iba riadky, pre ktoré aspoň jeden zo zadaných výrazov vráti hodnotu, ktorá nie je prázdna. Ak sa všetky výrazy vyhodnotia ako BLANK/NULL pre riadok, tento riadok nie je zahrnutý do vrátenej tabuľky.
Poznámky
Táto funkcia nezaručuje žiadny spôsob zoradenia výsledkov.
Stĺpec nemôže byť v parametri groupBy_columnName zadaný viackrát ako raz. Nasledujúci vzorec je napríklad neplatný.
SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )
Táto funkcia nie je podporovaná na použitie v režime DirectQuery, keď sa používa vo vypočítaných stĺpcoch alebo v pravidlách zabezpečenia na úrovni riadkov (RLS).
Kontext filtra
Zamyslite sa nad nasledujúcim dotazom:
SUMMARIZECOLUMNS (
'Sales Territory'[Category],
FILTER('Customer', 'Customer' [First Name] = "Alicia")
)
V tomto dotaze bez mierky stĺpce groupBy neobsahujú žiadne stĺpce z výrazu FILTER (napríklad z tabuľky Zákazník). Filter sa nepoužije na stĺpce groupBy. Tabuľky Sales Territory a Customer môžu nepriamo súvisieť cez tabuľku predajných faktov predajcu. Keďže tieto stĺpce nesúvisia priamo, výraz filtra je no-op a stĺpce groupBy nie sú ovplyvnené.
Avšak s týmto dotazom:
SUMMARIZECOLUMNS (
'Sales Territory'[Category], 'Customer' [Education],
FILTER('Customer', 'Customer'[First Name] = "Alicia")
)
Stĺpce groupBy obsahujú stĺpec, ktorý je ovplyvnený filtrom, a tento filter sa použije na výsledky groupBy.
S IGNORE
Syntax IGNORE môžete použiť na úpravu správania funkcie SUMMARIZECOLUMNS vynechaním konkrétnych výrazov z vyhodnotenia BLANK/NULL. Riadky, pre ktoré všetky výrazy nepoužívané IGNORE vrátia BLANK/NULL, budú vylúčené nezávisle od toho, či sa výrazy, ktoré používajú IGNORE vyhodnotia alebo nevyhodnotia, BLANKalebo nie. IGNORE možno použiť iba v rámci výrazu SUMMARIZECOLUMNS.
Príklad
SUMMARIZECOLUMNS(
Sales[CustomerId], "Total Qty",
IGNORE( SUM( Sales[Qty] ) ),
"BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 )
)
Týmto sa zroluje stĺpec Sales[CustomerId] a vytvorí medzisúčet pre všetkých zákazníkov v danom zoskupení. Bez IGNOREje výsledok:
ID zákazníka | Celkový počet | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
B | 3 | 3 |
C | 3 | 3 |
S IGNORE,
ID zákazníka | Celkový počet | BlankIfTotalQtyIsNot3 |
---|---|---|
B | 3 | 3 |
C | 3 | 3 |
Všetky výrazy sa ignorujú.
SUMMARIZECOLUMNS(
Sales[CustomerId], "Blank",
IGNORE( BLANK() ), "BlankIfTotalQtyIsNot5",
IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) )
)
Hoci oba výrazy vrátia pre niektoré riadky prázdnu hodnotu, sú zahrnuté, pretože neexistujú žiadne neignorované výrazy, ktoré vrátia prázdnu hodnotu.
ID zákazníka | Prázdny | BlankIfTotalQtyIsNot5 |
---|---|---|
A | 5 | |
B | ||
C |
S NONVISUAL
Funkcia NONVISUAL označí filter hodnôt vo funkcii SUMMARIZECOLUMNS neovplyvňujúci hodnoty miery, ale vzťahujúci sa len na stĺpce groupBy. NONVISUAL možno použiť iba v rámci výrazu SUMMARIZECOLUMNS.
Príklad
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]
Vráti výsledok, v ktorom [Visual Total Sales] je celkový súčet za všetky roky:
DimDate[KalendárnyRok] | [Predaj] | [Visual Total Sales] |
---|---|---|
2007 | 9,791,060.30 | 29,358,677.22 |
2008 | 9,770,899.74 | 29,358,677.22 |
Naopak, rovnaký dotazu bez funkcie NONVISUAL:
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]
Vráti výsledok, v ktorom [Visual Total Sales] je celkový súčet za dva vybraté roky:
DimDate[KalendárnyRok] | [Predaj] | [Visual Total Sales] |
---|---|---|
2007 | 9,791,060.30 | 19,561,960.04 |
2008 | 9,770,899.74 | 19,561,960.04 |
S ROLLUPADDISSUBTOTAL
Pridaním syntaxe funkcie ROLLUPADDISSUBTOTAL sa zmení správanie funkcie SUMMARIZECOLUMNS tým, že sa do výsledku pridajú riadky súhrnu/medzisúčtu na základe stĺpcov groupBy_columnName. ROLLUPADDISSUBTOTAL možno použiť iba v rámci výrazu SUMMARIZECOLUMNS.
Príklad s jedným medzisúčtom
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]
Vráti nasledujúcu tabuľku,
Kategória | Podkategória | IsCategorySubtotal | IsSubcategorySubtotal | Celkový počet |
---|---|---|---|---|
Pravdivý | Pravdivý | 60398 | ||
Príslušenstvo | False (nepravd | Pravdivý | 36092 | |
Príslušenstvo | Bike Racks | False (nepravd | False (nepravd | 328 |
Bicykle | Horské bicykle | False (nepravd | False (nepravd | 4970 |
Oblečenie | False (nepravd | Pravdivý | 9101 |
Príklad s viacerými medzisúčtami
SUMMARIZECOLUMNS (
Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] )
)
Predaj je zoskupený podľa štátu, podľa zákazníka, podľa dátumu, s medzisúčtami pre 1. Predaj podľa štátu, podľa dátumu 2. Predaj podľa štátu, podľa zákazníka 3. Zhrnuté pre zákazníka aj dátum, vedie k predaju podľa štátu.
Vráti nasledujúcu tabuľku,
CustomerID | IsCustomerSubtotal | State | Celkový počet | Dátum | IsDateSubtotal |
---|---|---|---|---|---|
A | FALSE |
WA | 5 | 7/10/2014 | |
B | FALSE |
WA | 1 | 7/10/2014 | |
B | FALSE |
WA | 2 | 7/11/2014 | |
C | FALSE |
OR | 2 | 7/10/2014 | |
C | FALSE |
OR | 1 | 7/11/2014 | |
TRUE |
WA | 6 | 7/10/2014 | ||
TRUE |
WA | 2 | 7/11/2014 | ||
TRUE |
OR | 2 | 7/10/2014 | ||
TRUE |
OR | 1 | 7/11/2014 | ||
A | FALSE |
WA | 5 | TRUE |
|
B | FALSE |
WA | 3 | TRUE |
|
C | FALSE |
OR | 3 | TRUE |
|
TRUE |
WA | 8 | TRUE |
||
TRUE |
OR | 3 | TRUE |
S ROLLUPGROUP
Podobne ako v prípade funkcie SUMMARIZE môžete ROLLUPGROUP použiť spolu s ROLLUPADDISSUBTOTAL na určenie súhrnných skupín/granularít (medzisúčtov), ktoré sa majú zahrnúť, čím sa zníži počet vrátených riadkov medzisúčtu. ROLLUPGROUP možno použiť iba v rámci výrazu SUMMARIZECOLUMNS alebo SUMMARIZE.
Príklad s viacerými medzisúčtami
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] )
)
Stále zoskupené podľa mesta a štátu, ale pri vykazovaní medzisúčtu vráti nasledujúcu tabuľku,
State | ID zákazníka | IsCustomerSubtotal | Celkový počet | City | IsCityStateSubtotal |
---|---|---|---|---|---|
WA | A | FALSE |
2 | Bellevue | FALSE |
WA | B | FALSE |
2 | Bellevue | FALSE |
WA | A | FALSE |
3 | Redmond | FALSE |
WA | B | FALSE |
1 | Redmond | FALSE |
OR | C | FALSE |
3 | Portland | FALSE |
WA | TRUE |
4 | Bellevue | FALSE |
|
WA | TRUE |
4 | Redmond | FALSE |
|
OR | TRUE |
3 | Portland | FALSE |
|
A | FALSE |
5 | FALSE |
||
B | FALSE |
3 | TRUE |
||
C | FALSE |
3 | TRUE |
||
TRUE |
11 | TRUE |
Kontextová funkcia SummarizeColumns
Pozadie
Až do februára 2023 SUMMARIZECOLUMNS nepodporovali hodnotenie v rámci kontextového prechodu. V produktoch vydaných pred týmto mesiacom sa toto obmedzenie SUMMARIZECOLUMNS užitočné vo väčšine mierok – nebolo možné volať mierku SUMMARIZECOLUMNS v žiadnom prípade kontextového prechodu vrátane iných príkazov SUMMARIZECOLUMNS.
Od februára 2023 bol kontextový prechod podporovaný v niekoľkých scenároch, ale nie vo všetkých podmienkach. Podporované a obmedzené prípady sú nasledovné:
Typ summarizeColumns | Externý filter s jedným stĺpcom | Externý filter s viac ako jedným stĺpcom | Externé stĺpce GroupBy |
---|---|---|---|
Funkcia SummarizeColumns iba so skupinou GroupBy | OK | OK | OK |
Funkcia SummarizeColumns s filtrami alebo mierkami | OK | ERROR | ERROR |
Od júna 2024 povoľujeme použitie kontextovej funkcie SummarizeColumns, ktorá umožňuje vyhodnocovanie funkcie SummarizeColumns v ľubovoľnom kontextovom prechode. Funkcia SummarizeColumns v mierke je teraz plne podporovaná:
Typ summarizeColumns | Externý filter s jedným stĺpcom | Externý filter s viac ako jedným stĺpcom | Externé stĺpce GroupBy |
---|---|---|---|
Funkcia SummarizeColumns iba so skupinou GroupBy | OK | OK | OK |
Funkcia SummarizeColumns s filtrami alebo mierkami | OK | OK | OK |
Táto aktualizácia však zahŕňa aj zmeny správania funkcie SummarizeColumns, ktoré môžu zmeniť výsledky existujúcich výrazov:
Sémantika SelfValue pre externé filtre
Predstavujeme sémantický koncept s názvom SelfValue, ktorý mení spôsob interakcie filtrov z externých tabuliek so stĺpcami GroupBy v funkcii SummarizeColumns. Táto zmena zakáže filtre z inej tabuľky tak, aby ovplyvnili stĺpce GroupBy, a to aj v prípade, že tabuľky sú prepojené prostredníctvom vzťahu filtra podľa. Príklad znázorňujúci vplyv tejto zmeny zahŕňa nasledujúci výraz:
CalculateTable(
SummarizeColumns(
'Reseller Sales'[ResellerKey],
'Reseller Sales'[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Pred touto aktualizáciou by sa filter TreatAs vzťahoval na operáciu GroupBy v rámci funkcie SummarizeColumns, pričom využíva vzťah medzi produktmi Product[Product Key] a "Predaj predajcu"[KódProduktu]. V dôsledku toho budú výsledky dotazu obsahovať iba riadky, kde predaj predajcu[ProductKey] sa rovná 229. Po aktualizácii však stĺpce GroupBy v rámci funkcie SummarizeColumns už nebudú filtrované podľa stĺpcov z externých tabuliek, a to ani v prípade, že medzi nimi existuje vzťah. V príklade uvedenom vyššie preto stĺpec GroupBy "Predaj predajcu"[KódProduktu] nebude filtrovaný podľa stĺpca 'Produkt'[KódProduktu]. Výsledkom je, že dotaz bude obsahovať riadky, v ktorých sa hodnota Predaj Predajcu[KódProduktu] nerovná 229.
Ak si prajete zachovať predchádzajúce správanie, môžete prepísať výraz pomocou funkcie Summarize namiesto funkcie SummarizeColumns, ako je to znázornené nižšie:
CalculateTable(
SUMMARIZE(
'Reseller Sales',
[ResellerKey],
[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Tento prepísané výraz zachová pôvodnú sémantiku, pričom operácia GroupBy nie je ovplyvnená obmedzením SelfValue, ktoré zaviedla aktualizácia.
Overenie riadkov pre stĺpce groupby, ktoré plne pokrýva Treatas
Pred touto aktualizáciou vo funkcii SummarizeColumns, ak boli všetky stĺpce GroupBy z konkrétnej tabuľky úplne pokryté jedným filtrom Treatas z tej istej tabuľky, ako je to znázornené nižšie:
SummarizeColumns(
Geography[Country],
Geography[State],
Treatas(
{("United States", "Alberta")},
Geography[Country],
Geography[State]
)
)
Výsledok vyššie uvedeného dotazu by obsahoval všetky riadky zadané vo filtri Treatas, bez ohľadu na to, či boli platné alebo nie. Výsledkom by bola napríklad tabuľka s jedným riadkom ("Spojené štáty", "Alberta"), aj keď žiadny takýto riadok s [Krajina] = "Spojené štáty" a [Štát] = "Alberta" existoval v tabuľke "Geografia".
Tento problém bol známy a aktualizácia ho vyriešila. Po aktualizácii sa tieto neplatné riadky odfiltrujú a vrátia sa len platné riadky z tabuľky GroupBy. Preto by bol výsledok vyššie uvedeného dotazu prázdny, pretože neexistujú žiadne platné riadky zodpovedajúce zadaným hodnotám [Krajina] a [Štát] v tabuľke Geografia.
Zakázanie zmiešaných keepfilters/overriddefilters v rovnakej tabuľke alebo klastri
Nedávna aktualizácia zaviedla dočasné obmedzenie, ktoré spúšťa chybové hlásenie s informáciou:
"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áto chyba nastane, keď sa v tej istej tabuľke alebo klastri nachádzajú filtre, ktoré prepíšu existujúce filtre) aj filtre so zadanými filtrami KeepFilters. Napríklad:
Evaluate CalculateTable(
SummarizeColumns(
Product[Color],
KeepFilters(
TreatAs(
{( "Washington")}
, Geography[State]
)
),
TreatAs(
{("United States"), ("Canada")}
, Geography[Country]
)
)
,TreatAs({("Alberta")}, Geography[State])
,TreatAs({("Canada")}, Geography[Country])
)
Vo vyššie uvedenom výraze sú v tabuľke Geografia dva filtre: jeden so zadanými filtrami KeepFilters a jeden bez. Tieto filtre sa prekrývajú s externými filtrami v rôznych stĺpcoch. Táto konfigurácia v súčasnosti nie je povolená, pretože interne sú dva filtre zoskupené do jedného a systém nemôže určiť správne správanie prepísania filtra pre skupinový filter celkovo v takýchto prípadoch.
Upozorňujeme, že toto obmedzenie je dočasné. Aktívne vyvíjame riešenia na odstránenie tohto obmedzenia v budúcich aktualizáciách. Ak sa vyskytne táto chyba, odporúčame upraviť filtre v rámci funkcie SummarizeColumns tak, že pridáte alebo odstránite funkciu KeepFilters podľa potreby, aby sa zabezpečilo konzistentné prepísanie správania v každej tabuľke.