Share via


SUMMARIZECOLUMNS

Van toepassing op: Berekende kolomBerekende tabelMetingVisuele berekening

Retourneert een samenvattingstabel over een set groepen.

Syntaxis

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

Parameters

Term Definitie
groupBy_columnName Een volledig gekwalificeerde kolomreferentie (Tabel[Kolom]) naar een basistabel waarvoor de afzonderlijke waarden zijn opgenomen in de geretourneerde tabel. Elke groupBy_columnName kolom is gekoppeld (verschillende tabellen) of bestaat automatisch (dezelfde tabel) met de volgende opgegeven kolommen.
filterTable Een tabelexpressie die wordt toegevoegd aan de filtercontext van alle kolommen die zijn opgegeven als groupBy_columnName argumenten. De waarden in de filtertabel worden gebruikt om te filteren voordat cross-join/auto-exist wordt uitgevoerd.
naam Een tekenreeks die de kolomnaam vertegenwoordigt die moet worden gebruikt voor de volgende expressie die is opgegeven.
Expressie Een DAX-expressie die één waarde retourneert (geen tabel).

Retourwaarde

Een tabel met combinaties van waarden uit de opgegeven kolommen op basis van de opgegeven groepering. Alleen rijen waarvoor ten minste één van de opgegeven expressies een niet-lege waarde retourneert, worden opgenomen in de geretourneerde tabel. Als alle expressies BLANK/NULL voor een rij opleveren, wordt die rij niet opgenomen in de geretourneerde tabel.

Opmerkingen

  • Deze functie garandeert geen sorteervolgorde voor de resultaten.

  • Een kolom kan niet meer dan één keer worden opgegeven in de parameter groupBy_columnName. De volgende formule is bijvoorbeeld ongeldig.

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

  • Deze functie wordt niet ondersteund voor gebruik in de DirectQuery-modus wanneer deze wordt gebruikt in regels voor beveiliging op rijniveau (berekende kolommen of beveiliging op rijniveau).

Filtercontext

Houd rekening met de volgende query:

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

In deze query bevatten de groupBy-kolommen geen kolommen uit de FILTER-expressie (bijvoorbeeld uit de tabel Customer). Het filter wordt niet toegepast op de groupBy-kolommen. De tabellen Verkoopgebied en Klant kunnen indirect zijn gerelateerd via de feitentabel Reseller sales. Omdat ze niet rechtstreeks zijn gerelateerd, is de filterexpressie een no-op en worden de groupBy-kolommen niet beïnvloed.

Met deze query doet u echter het volgende:

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

De groupBy-kolommen bevatten een kolom die wordt beïnvloed door het filter en dat filter wordt toegepast op de groupBy-resultaten.

Met IGNORE

De syntaxis IGNORE kan worden gebruikt om het gedrag van de functie SUMMARIZECOLUMNS te wijzigen door specifieke expressies weg te laten uit de BLANK/NULL-evaluatie. Rijen waarvoor alle expressies die niet gebruikmaken van IGNORE, retourneren BLANK/NULL, worden uitgesloten, ongeacht of de expressies waarvoor IGNORE wordt gebruikt, blank/NULL opleveren of niet. IGNORE kan alleen worden gebruikt binnen een SUMMARIZECOLUMNS-expressie.

Opmerking

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

Hiermee wordt de kolom Sales[CustomerId] opgerold, waarmee een subtotaal wordt gemaakt voor alle klanten in de opgegeven groepering. Zonder IGNORE is het resultaat:

CustomerId Totaal aantal BlankIfTotalQtyIsNot3
A 5
B 3 3
E 3 3

Met IGNORE,

CustomerId Totaal aantal BlankIfTotalQtyIsNot3
B 3 3
E 3 3

Alle expressies genegeerd,

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

Hoewel beide expressies leeg retourneren voor sommige rijen, worden ze opgenomen omdat er geen niet-gnored expressies zijn die leeg retourneren.

CustomerId Leeg BlankIfTotalQtyIsNot5
A 5
B
E

Met NONVISUAL

De functie NONVISUAL markeert een waardefilter in de functie SUMMARIZECOLUMNS als niet van invloed op meetwaarden, maar alleen van toepassing op groupBy-kolommen. NONVISUAL kan alleen worden gebruikt binnen een SUMMARIZECOLUMNS-expressie.

Opmerking

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]

Retourneert het resultaat waarbij [Visual Total Sales] het totaal is voor alle jaren:

DimDate[CalendarYear] [Sales] [Totale verkoop van visuals]
2007 9,791,060.30 29,358,677.22
2008 9,770,899.74 29,358,677.22

Dezelfde query daarentegen zonder de functie 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]

Retourneert het resultaat waarbij [Visual Total Sales] het totaal is voor de twee geselecteerde jaren:

DimDate[CalendarYear] [Sales] [Totale verkoop van visuals]
2007 9,791,060.30 19,561,960.04
2008 9,770,899.74 19,561,960.04

Met ROLLUPADDISSUBTOTAL

De toevoeging van de syntaxis ROLLUPADDISSUBTOTAL wijzigt het gedrag van de functie SUMMARIZECOLUMNS door samengetelde/subtotaalrijen toe te voegen aan het resultaat op basis van de groupBy_columnName kolommen. ROLLUPADDISSUBTOTAL kan alleen worden gebruikt binnen een SUMMARIZECOLUMNS-expressie.

Voorbeeld met één subtotaal

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]

Retourneert de volgende tabel,

Categorie Subcategorie IsCategorySubtotal IsSubcategorySubtotal Totaal aantal
Waar Waar 60398
Accessoires Onwaar Waar 36092
Accessoires Fietsenrekken Onwaar Onwaar 328
Fietsen Mountainbikes Onwaar Onwaar 4970
Kleding Onwaar Waar 9101

Voorbeeld met meerdere subtotalen

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

Verkoop wordt gegroepeerd op staat, per klant, op datum, met subtotalen voor 1. Verkoop per staat, op datum 2. Verkoop per staat, per klant 3. Samengeteld op zowel de klant als de datum die leidt tot de verkoop per staat.

Retourneert de volgende tabel,

CustomerID IsCustomerSubtotal Provincie Totaal aantal Datum IsDateSubtotal
A FALSE WA 5 10-7-2014
B FALSE WA 1 10-7-2014
B FALSE WA 2 7/11/2014
E FALSE OF 2 10-7-2014
E FALSE OF 1 7/11/2014
TRUE WA 6 10-7-2014
TRUE WA 2 7/11/2014
TRUE OF 2 10-7-2014
TRUE OF 1 7/11/2014
A FALSE WA 5 TRUE
B FALSE WA 3 TRUE
E FALSE OF 3 TRUE
TRUE WA 8 TRUE
TRUE OF 3 TRUE

Met ROLLUPGROUP

Net als met de functie SUMMARIZE kan ROLLUPGROUP samen met ROLLUPADDISSUBTOTAL worden gebruikt om op te geven welke samenvattingsgroepen/granulariteiten (subtotalen) moeten worden opgenomen, waardoor het aantal geretourneerde subtotaalrijen wordt verminderd. ROLLUPGROUP kan alleen worden gebruikt binnen een SUMMARIZECOLUMNS- of SUMMARIZE-expressie .

Voorbeeld met meerdere subtotalen

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

Nog steeds gegroepeerd op plaats en staat, maar samengeteld bij het rapporteren van een subtotaal retourneert de volgende tabel,

Provincie CustomerId IsCustomerSubtotal Totaal aantal Plaats IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA B FALSE 2 Bellevue FALSE
WA A FALSE 3 Amsterdam FALSE
WA B FALSE 1 Amsterdam FALSE
OF E FALSE 3 Portland FALSE
WA TRUE 4 Bellevue FALSE
WA TRUE 4 Amsterdam FALSE
OF TRUE 3 Portland FALSE
A FALSE 5 FALSE
B FALSE 3 TRUE
E FALSE 3 TRUE
TRUE 11 TRUE

SAMENVATTEN