SUMMARIZECOLUMNS

Returnerer en oversigtstabel over et sæt grupper.

Syntaks

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

Parametre

Begreb Definition
groupBy_columnName En fuldt kvalificeret kolonnereference (Table[Column]) til en basistabel, hvor de entydige værdier er inkluderet i den returnerede tabel. Hver groupBy_columnName kolonne er joinforbundet (forskellige tabeller) eller fandtes automatisk (samme tabel) med de efterfølgende angivne kolonner.
filterTable Et tabeludtryk, der føjes til filterkonteksten for alle kolonner, der er angivet som groupBy_columnName argumenter. De værdier, der findes i filtertabellen, bruges til at filtrere, før cross-join/auto-exist udføres.
navn En streng, der repræsenterer det kolonnenavn, der skal bruges til det efterfølgende angivne udtryk.
Udtryk Ethvert DAX-udtryk, der returnerer en enkelt værdi (ikke en tabel).

Returværdi

En tabel, der indeholder kombinationer af værdier fra de angivne kolonner baseret på den angivne gruppering. Det er kun rækker, hvor mindst ét af de angivne udtryk returnerer en ikke-tom værdi, der er inkluderet i den returnerede tabel. Hvis alle udtryk evalueres til BLANK/NULL for en række, medtages denne række ikke i den returnerede tabel.

Bemærkninger

  • Denne funktion garanterer ikke nogen sorteringsrækkefølge for resultaterne.

  • En kolonne kan ikke angives mere end én gang i parameteren groupBy_columnName. Følgende formel er f.eks. ugyldig.

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

  • Denne funktion understøttes ikke til brug i DirectQuery-tilstand, når den bruges i beregnede kolonner eller RLS-regler (row-level security).

Filterkontekst

Overvej følgende forespørgsel:

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

Uden en måling indeholder groupBy-kolonnerne i denne forespørgsel ingen kolonner fra udtrykket FILTER (f.eks. fra tabellen Customer). Filteret anvendes ikke på groupBy-kolonnerne. Tabellerne Sales Territory og Customer kan være indirekte relateret via faktatabellen Reseller sales. Da de ikke er direkte relateret, er filterudtrykket et no-op, og groupBy-kolonnerne påvirkes ikke.

Men med denne forespørgsel:

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

GroupBy-kolonnerne indeholder en kolonne, der påvirkes af filteret, og dette filter anvendes på groupBy-resultaterne.

Med IGNORE

IGNORE-syntaksen kan bruges til at ændre funktionsmåden for funktionen SUMMARIZECOLUMNS ved at udelade bestemte udtryk fra BLANK/NULL-evalueringen. Rækker, hvor alle udtryk, der ikke bruger IGNORE, returnerer BLANK/NULL, udelades uafhængigt af, om de udtryk, der bruger IGNORE, evalueres til BLANK/NULL eller ej. IGNORE kan kun bruges i et SUMMARIZECOLUMNS-udtryk.

Eksempel

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

Dette akkumulerer kolonnen Sales[CustomerId] og opretter en subtotal for alle kunder i den angivne gruppering. Uden IGNORE er resultatet:

CustomerId Samlet antal BlankIfTotalQtyIsNot3
A 5
F 3 3
L 3 3

Med IGNORE,

CustomerId Samlet antal BlankIfTotalQtyIsNot3
F 3 3
L 3 3

Alle-udtrykket ignoreres,

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

Selvom begge udtryk returnerer tomme for nogle rækker, medtages de, da der ikke er nogen ikke-diagnosticerede udtryk, der returnerer tomme.

CustomerId Tom BlankIfTotalQtyIsNot5
A 5
F
C

Med NONVISUAL

Funktionen NONVISUAL markerer et værdifilter i funktionen SUMMARIZECOLUMNS, som ikke påvirker målingsværdier, men kun gælder for groupBy-kolonner. NONVISUAL kan kun bruges i et SUMMARIZECOLUMNS-udtryk.

Eksempel

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]

Returnerer resultatet, hvor [Visual Total Sales] er totalen på tværs af alle år:

DimDate[CalendarYear] [Salg] [Samlet salg af visualiseringer]
2007 9,791,060.30 29,358,677.22
2008 9,770,899.74 29,358,677.22

I modsætning hertil er den samme forespørgsel uden funktionen 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]

Returnerer resultatet, hvor [Visual Total Sales] er totalen på tværs af de to valgte år:

DimDate[CalendarYear] [Salg] [Samlet salg af visualiseringer]
2007 9,791,060.30 19,561,960.04
2008 9,770,899.74 19,561,960.04

Med ROLLUPADDISSUBTOTAL

Tilføjelsen af syntaksen ROLLUPADDISSUBTOTAL ændrer funktionsmåden for funktionen SUMMARIZECOLUMNS ved at føje akkumulerede rækker/subtotalrækker til resultatet baseret på de groupBy_columnName kolonner. ROLLUPADDISSUBTOTAL kan kun bruges i et SUMMARIZECOLUMNS-udtryk.

Eksempel med enkelt subtotal

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]

Returnerer følgende tabel,

Kategori Underkategori IsCategorySubtotal IsSubcategorySubtotal Samlet antal
True True 60398
Accessories Falsk True 36092
Accessories Cykelstativer Falsk Falsk 328
Cykler Mountain Bikes Falsk Falsk 4970
Tøj Falsk True 9101

Eksempel med flere subtotaler

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

Salg grupperes efter delstat, efter kunde, efter dato med subtotaler for 1. Salg efter delstat, efter dato 2. Salg efter delstat, efter kunde 3. Opløftet på både kunde og dato, der fører til salg efter delstat.

Returnerer følgende tabel,

CustomerID IsCustomerSubtotal State Samlet antal Dato IsDateSubtotal
A FALSE WA 5 7/10/2014
F FALSE WA 0 7/10/2014
F FALSE WA 2 7/11/2014
C FALSE ELLER 2 7/10/2014
C FALSE ELLER 0 7/11/2014
SANDT WA 6 7/10/2014
SANDT WA 2 7/11/2014
SANDT ELLER 2 7/10/2014
SANDT ELLER 0 7/11/2014
A FALSE WA 5 SANDT
F FALSE WA 3 SANDT
C FALSE ELLER 3 SANDT
SANDT WA 8 SANDT
SANDT ELLER 3 SANDT

Med ROLLUPGROUP

Ligesom med funktionen SUMMARIZE kan ROLLUPGROUP bruges sammen med ROLLUPADDISSUBTOTAL til at angive, hvilke oversigtsgrupper/granulariteter (subtotaler), der skal medtages, hvilket reducerer antallet af returnerede rækker med subtotaler. ROLLUPGROUP kan kun bruges i et SUMMARIZECOLUMNS- eller SUMMARIZE-udtryk .

Eksempel med flere subtotaler

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

Stadig grupperet efter City og State, men akkumuleret, når der rapporteres en subtotal, returnerer følgende tabel,

State CustomerId IsCustomerSubtotal Samlet antal By IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA F FALSE 2 Bellevue FALSE
WA A FALSE 3 Vejle FALSE
WA F FALSE 0 Vejle FALSE
ELLER C FALSE 3 Portland FALSE
WA SANDT 4 Bellevue FALSE
WA SANDT 4 Vejle FALSE
ELLER SANDT 3 Portland FALSE
A FALSE 5 FALSE
F FALSE 3 SANDT
C FALSE 3 SANDT
SANDT 11 SANDT

OPSUMMERE