SUMMARIZECOLUMNS
A következőkre vonatkozik:Számított oszlop
Számított tábla
Mérték
Vizualizá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.