Megosztás a következőn keresztül:


SUMMARIZECOLUMNS

A következőkre vonatkozik:Számított oszlopSzámított táblaMértékVizualizációszámítási

Egy összegző táblát ad vissza egy csoportcsoporton keresztül.

Syntax

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

Paraméterek

Időszak Definíció
groupBy_columnName Teljes körű oszlophivatkozás (Table[Column]) egy olyan alaptáblára, amelyhez a különböző értékek szerepelnek a visszaadott táblában. Minden groupBy_columnName oszlop keresztbe van kapcsolva (különböző táblák), vagy automatikusan létezik (ugyanaz a tábla) a következő megadott oszlopokkal.
filterTable Táblakifejezés, amely groupBy_columnName argumentumként megadott összes oszlop szűrőkörnyezetéhez hozzáadva. A szűrőtáblában található értékek szűrésre szolgálnak a keresztcsatlakozás/automatikus létezés végrehajtása előtt.
name A következő megadott kifejezéshez használni kívánt oszlopnevet képviselő sztring.
expression Bármely DAX kifejezés, amely egyetlen értéket ad vissza (nem táblázatot).

Visszaadott érték

Egy táblázat, amely a megadott oszlopokból származó értékek kombinációját tartalmazza a megadott csoportosítás alapján. A visszaadott táblában csak azok a sorok szerepelnek, amelyeknél a megadott kifejezések közül legalább egy nem üres értéket ad vissza. Ha az összes kifejezés egy sor BLANK/NULL értékre van kiértékelve, akkor ez a sor nem szerepel a visszaadott táblában.

Megjegyzések

  • Ez a függvény nem garantálja az eredmények rendezési sorrendjét.

  • Az oszlop nem adható meg többször a groupBy_columnName paraméterben. A következő képlet például érvénytelen.

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

  • Ez a függvény nem támogatott DirectQuery módban, ha számított oszlopokban vagy sorszintű biztonsági (RLS) szabályokban használják.

Szűrőkörnyezet

Fontolja meg a következő lekérdezést:

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

Ebben a lekérdezésben mérték nélkül a groupBy oszlopok nem tartalmaznak oszlopokat a FILTER kifejezésből (például az Ügyfél táblából). A szűrő nincs alkalmazva a groupBy oszlopokra. A Sales Territory és a Customer táblák közvetetten kapcsolódhatnak a Reseller sales fact táblán keresztül. Mivel nem kapcsolódnak közvetlenül, a szűrőkifejezés egy no-op, és a groupBy oszlopokra nincs hatással.

Ezzel a lekérdezéssel azonban:

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

A groupBy oszlopok olyan oszlopot tartalmaznak, amelyre hatással van a szűrő, és ezt a szűrőt alkalmazza a groupBy-eredményekre.

A IGNORE

A IGNORE szintaxissal módosíthatja a SUMMARIZECOLUMNS függvény viselkedését úgy, hogy bizonyos kifejezéseket kihagy a BLANK/NULL kiértékelésből. Azok a sorok, amelyeknél az IGNORE nem használó kifejezések BLANK/NULL értéket adnak vissza, függetlenül attól, hogy a IGNORE használó kifejezések a /NULL BLANKlesznek-e kiértékelve. IGNORE csak egy SUMMARIZECOLUMNS kifejezésben használható.

Példa

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

Ez összegezi a Sales[CustomerId] oszlopot, és létrehoz egy részösszeget az adott csoportosításban lévő összes ügyfél számára. IGNOREnélkül az eredmény a következő:

Vevőkód Teljes mennyiség BlankIfTotalQtyIsNot3
A 5
h 3 3
C 3 3

A IGNORE,

Vevőkód Teljes mennyiség BlankIfTotalQtyIsNot3
h 3 3
C 3 3

Minden kifejezés figyelmen kívül hagyva,

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

Annak ellenére, hogy mindkét kifejezés üresen ad vissza néhány sort, a függvények bele vannak foglalva, mivel nincsenek olyan ki nem használt kifejezések, amelyek üresen térnek vissza.

Vevőkód Üres BlankIfTotalQtyIsNot5
A 5
h
C

A NONVISUAL

A NONVISUAL függvény értékszűrőt jelöl SUMMARIZECOLUMNS függvényben, amely nem befolyásolja a mértékértékeket, csak a groupBy oszlopokra vonatkozik. NONVISUAL csak egy SUMMARIZECOLUMNS kifejezésben használható.

Példa

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]

Azt az eredményt adja vissza, amelyben a [Visual Total Sales] az összes év összesítése:

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

Ezzel szemben ugyanaz a lekérdezés NONVISUAL nélkül:

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]

Azt az eredményt adja vissza, amelyben a [Visual Total Sales] a két kiválasztott év összesítése:

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

A ROLLUPADDISSUBTOTAL

A ROLLUPADDISSUBTOTAL szintaxis hozzáadása úgy módosítja a SUMMARIZECOLUMNS függvény viselkedését, hogy összegző/részösszeg sorokat ad hozzá az eredményhez a groupBy_columnName oszlopok alapján. ROLLUPADDISSUBTOTAL csak egy SUMMARIZECOLUMNS kifejezésben használható.

Példa egyetlen részösszeggel

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]

A következő táblázatot adja vissza:

Kategória Alkategória IsCategorySubtotal IsSubcategorySubtotal Teljes mennyiség
Igaz Igaz 60398
Tartozékok Téves Igaz 36092
Tartozékok Kerékpártartók Téves Téves 328
Kerékpárok Hegyi kerékpárok Téves Téves 4970
Clothing Téves Igaz 9101

Példa több részösszeggel

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

Az értékesítések állam, ügyfél és dátum szerint csoportosítva, 1 részösszeggel. Értékesítés állapot szerint, 2. dátum szerint. Értékesítés állam szerint, 3. ügyfél szerint. Mind az ügyfélen, mind a dátumon fel van állítva, és állapot szerinti értékesítést eredményez.

A következő táblázatot adja vissza:

CustomerID (Ügyfél azonosítója) IsCustomerSubtotal Állapot Teljes mennyiség Dátum IsDateSubtotal
A FALSE WA 5 7/10/2014
h FALSE WA 0 7/10/2014
h FALSE WA 2 7/11/2014
C FALSE OR 2 7/10/2014
C FALSE OR 0 7/11/2014
TRUE WA 6 7/10/2014
TRUE WA 2 7/11/2014
TRUE OR 2 7/10/2014
TRUE OR 0 7/11/2014
A FALSE WA 5 TRUE
h FALSE WA 3 TRUE
C FALSE OR 3 TRUE
TRUE WA 8 TRUE
TRUE OR 3 TRUE

A ROLLUPGROUP

A SUMMARIZE függvényhez hasonlóan ROLLUPGROUP is használható ROLLUPADDISSUBTOTAL együtt annak meghatározásához, hogy mely összegző csoportokat/részletességeket (részösszegeket) vegye fel, csökkentve a visszaadott részösszegsorok számát. ROLLUPGROUP csak SUMMARIZECOLUMNS vagy SUMMARIZE kifejezésben használható.

Példa több részösszeggel

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

Továbbra is város és állam szerint csoportosítva, de a részösszeg jelentésekor egybegördítve a következő táblázatot adja vissza:

Állapot Vevőkód IsCustomerSubtotal Teljes mennyiség Város IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA h FALSE 2 Bellevue FALSE
WA A FALSE 3 Redmond FALSE
WA h FALSE 0 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
h FALSE 3 TRUE
C FALSE 3 TRUE
TRUE 11 TRUE

Környezetfüggő SummarizeColumns

Háttér

2023 februárjáig SUMMARIZECOLUMNS egyáltalán nem támogatta a környezetváltáson belüli értékelést. Az adott hónap előtt kiadott termékek esetében ez a korlátozás SUMMARIZECOLUMNS a legtöbb intézkedés esetében nem volt hasznos – nem lehetett olyan mértéket meghívni, SUMMARIZECOLUMNS a környezetváltás esetén, beleértve az egyéb SUMMARIZECOLUMNS állításokat is.

2023 februárjától a környezetváltás néhány forgatókönyvben támogatott volt, de nem minden esetben. A támogatott és korlátozott esetek a következők:

SummarizeColumns típus Külső szűrő egyetlen oszloppal Külső szűrő egynél több oszloppal Külső GroupBy-oszlopok
SummarizeColumns with GroupBy only OK OK OK
SummarizeColumns with Filters/Measures OK ERROR ERROR

2024 júniusától engedélyezzük a környezetfüggő SummarizeColumns függvényeket, amelyek lehetővé teszik a SummarizeColumns kiértékelését bármilyen környezeti átmenet során, a SummarizeColumns mértéke mostantól teljes mértékben támogatott:

SummarizeColumns típus Külső szűrő egyetlen oszloppal Külső szűrő egynél több oszloppal Külső GroupBy-oszlopok
SummarizeColumns with GroupBy only OK OK OK
SummarizeColumns with Filters/Measures OK OK OK

Ez a frissítés azonban a SummarizeColumns viselkedésének változásait is tartalmazza, amelyek megváltoztathatják a meglévő kifejezések eredményeit:

SelfValue szemantika külső szűrőkhöz

Bevezetünk egy SelfValue nevű szemantikai koncepciót, amely megváltoztatja, hogy a külső táblák szűrői hogyan használják a GroupBy oszlopokat a SummarizeColumnsban. Ez a módosítás letiltja egy másik tábla szűrőit, hogy hatással legyenek a GroupBy-oszlopokra, még akkor is, ha a táblák egy szűrési kapcsolaton keresztül kapcsolódnak. A változás hatását szemléltető példa a következő kifejezést foglalja magában:

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

A frissítés előtt a TreatAs szűrő a SummarizeColumns groupBy műveletére lesz alkalmazva, kihasználva a "Product"[Product Key] és a "Reseller Sales"[ProductKey] közötti kapcsolatot. Ezért a lekérdezés eredményei csak olyan sorokat tartalmaznak, ahol a "Reseller Sales"[ProductKey] értéke 229. A frissítés után azonban a SummarizeColumns groupBy oszlopai már nem lesznek szűrve külső táblák oszlopai alapján, még akkor sem, ha kapcsolat áll fenn közöttük. Ezért a fenti példában a "Reseller Sales"[ProductKey] GroupBy oszlopot nem szűri a "Product"[ProductKey] oszlop. Ennek eredményeképpen a lekérdezés olyan sorokat tartalmaz, ahol a "Reseller Sales"[ProductKey] értéke nem egyenlő 229-sel.

Ha inkább megtartja az előző viselkedést, a SummarizeColumns helyett a Summarize használatával írhatja újra a kifejezést, ahogy az alább látható:

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

Ez az újraírt kifejezés megőrzi az eredeti szemantikát, ahol a GroupBy-műveletet nem érinti a frissítés által bevezetett SelfValue-korlátozás.

A Treatas által teljes mértékben lefedett groupby oszlopok sorérvényesítése

A frissítés előtt egy SummarizeColumns függvényen belül, ha egy adott tábla összes GroupBy-oszlopát teljes mértékben lefedte ugyanabból a táblából egyetlen Treatas-szűrő, az alábbiak szerint:

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

A fenti lekérdezés eredménye a Treatas szűrőben megadott sorokat tartalmazza, függetlenül attól, hogy érvényesek-e vagy sem. Az eredmény például egy egysoros tábla ("Egyesült Államok", "Alberta" lenne), még akkor is, ha a [Country] = "Egyesült Államok" és a [State] = "Alberta" ilyen sor nem létezik a "Geography" táblában.

Ezt a problémát ismerték, és a frissítés megoldotta. A frissítés után a rendszer kiszűri az ilyen érvénytelen sorokat, és csak a GroupBy tábla érvényes sorait adja vissza. Ezért a fenti lekérdezés eredménye üres lenne, mivel a Földrajzi tábla megadott [Ország] és [Állam] értékeinek megfelelő érvényes sorok nincsenek.

Vegyes Keepfilters/overriddefilters letiltása ugyanazon a táblán/fürtön

A legutóbbi frissítés ideiglenes korlátozást vezetett be, amely a következő hibaüzenetet váltja ki:

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

Ez a hiba akkor fordul elő, ha a normál szűrők (amelyek felülbírálják a meglévő szűrőket) és a megadott KeepFilters szűrők is ugyanabban a táblában/fürtben találhatók. Példa:

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

A fenti kifejezésben két szűrő található a "Geography" táblában: az egyikben a KeepFilters van megadva, a másik pedig anélkül. Ezek a szűrők átfedésben vannak a különböző oszlopok külső szűrőivel. Ez a konfiguráció jelenleg nem engedélyezett, mert belsőleg a két szűrő egybe van csoportosítva, és a rendszer ilyen esetekben nem tudja meghatározni a fürtözött szűrő megfelelő felülbírálási viselkedését.

Vegye figyelembe, hogy ez a korlátozás ideiglenes. Aktívan fejlesztünk megoldásokat ennek a korlátozásnak a jövőbeli frissítésekben való eltávolítására. Ha ezt a hibát tapasztalja, javasoljuk, hogy módosítsa a SummarizeColumns szűrőit a KeepFilters szükség szerinti hozzáadásával vagy eltávolításával, hogy az egyes táblák konzisztens felülbírálási viselkedése biztosítható legyen.

SUMMARIZE