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


SUMMARIZECOLUMNS

A következőre vonatkozik: Számított oszlop Számított tábla Mérték vizualizáció számítása

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.
név A következő megadott kifejezéshez használni kívánt oszlopnevet képviselő sztring.
kifejezés 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 egy sor összes kifejezése BLANK/NULL értékre van kiértékelve, az adott 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 a FILTER kifejezésből származó oszlopokat (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 ezek nem kapcsolódnak közvetlenül, a szűrőkifejezés nem működik, é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 MELLŐZÉS

Az IGNORE szintaxissal módosíthatja a SUMMARIZECOLUMNS függvény viselkedését úgy, hogy kihagy bizonyos kifejezéseket a BLANK/NULL kiértékelésből. Azok a sorok, amelyeknél az IGNORE függvényt nem használó összes kifejezés ÜRES/NULL értéket ad vissza, attól függetlenül ki lesz zárva, hogy az IGNORE függvényt használó kifejezések blank/NULL értéket adnak-e ki. AZ IGNORE csak SUMMARIZECOLUMNS kifejezésen belül 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. Az IGNORE nélkül az eredmény a következő:

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

Az 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 Blank BlankIfTotalQtyIsNot5
A 5
h
C

NEMVISUAL

A NEMVISUAL függvény a SUMMARIZECOLUMNS függvényben egy értékszűrőt jelöl, amely nem befolyásolja a mértékértékeket, csak a groupBy oszlopokra vonatkozik. A NONVISUAL csak 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 a NEMVISUAL függvény 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 használatával

A ROLLUPADDISSUBTOTAL szintaxis hozzáadása módosítja a SUMMARIZECOLUMNS függvény viselkedését úgy, hogy összegző/részösszeg sorokat ad hozzá az eredményhez a groupBy_columnName oszlopok alapján. A ROLLUPADDISSUBTOTAL csak 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 Hamis Igaz 36092
Tartozékok Kerékpártartók Hamis Hamis 328
Kerékpárok Hegyi kerékpárok Hamis Hamis 4970
Clothing Hamis 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 HAMIS WA 5 7/10/2014
h HAMIS WA 0 7/10/2014
h HAMIS WA 2 7/11/2014
C HAMIS VAGY 2 7/10/2014
C HAMIS VAGY 0 7/11/2014
IGAZ WA 6 7/10/2014
IGAZ WA 2 7/11/2014
IGAZ VAGY 2 7/10/2014
IGAZ VAGY 0 7/11/2014
A HAMIS WA 5 IGAZ
h HAMIS WA 3 IGAZ
C HAMIS VAGY 3 IGAZ
IGAZ WA 8 IGAZ
IGAZ VAGY 3 IGAZ

A ROLLUPGROUP használatával

A SUMMARIZE függvényhez hasonlóan a ROLLUPGROUP és a ROLLUPADDISSUBTOTAL együttes használatával megadhatja, hogy mely összegző csoportok/részletességek (részösszegek) legyenek belefoglalva, csökkentve a visszaadott részösszegsorok számát. A 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 HAMIS 2 Bellevue HAMIS
WA h HAMIS 2 Bellevue HAMIS
WA A HAMIS 3 Redmond HAMIS
WA h HAMIS 0 Redmond HAMIS
VAGY C HAMIS 3 Portland HAMIS
WA IGAZ 4 Bellevue HAMIS
WA IGAZ 4 Redmond HAMIS
VAGY IGAZ 3 Portland HAMIS
A HAMIS 5 HAMIS
h HAMIS 3 IGAZ
C HAMIS 3 IGAZ
IGAZ 11 IGAZ

Környezetfüggő SummarizeColumns

Háttér

2023 februárjáig a 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 nem tette hasznossá a SUMMARIZECOLUMNS függvényt a mértékek többségében – a kontextusváltás esetén sem lehetett a SUMMARIZECOLUMNS mértéket meghívni, beleértve a többi SUMMARIZECOLUMNS utasítást 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 Hiba Hiba

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 addColumns vagy SelectColumns használatával írhatja újra a kifejezést, ahogy az alább látható:

CalculateTable(
    Filter(
        SelectColumns(
            'Reseller Sales',
            "ResellerKey", 
            [ResellerKey],
            "ProductKey",
            [ProductKey]
        ),
        And(Not IsBlank([ResellerKey]),  Not IsBlank([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"), még akkor is, ha a [Country] = "Egyesült Államok" és a [State] = "Alberta" ilyen sor nem létezett 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.

ÖSSZEGEZ