Zdieľať cez


SUMMARIZECOLUMNS

Vzťahuje sa na:vypočítaný stĺpecvypočítanej tabuľkyvizuá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.

SUMMARIZE