SUMMARIZECOLUMNS

Si applica a:Calcolo visivo misuratabella calcolata colonnacalcolata

Restituisce una tabella di riepilogo su un set di gruppi.

Sintassi

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

Parametri

Termine Definizione
groupBy_columnName Riferimento di colonna completo (Table[Column]) a una tabella di base per cui i valori distinti sono inclusi nella tabella restituita. Ogni colonna groupBy_columnName viene unita con un cross join (tabelle diverse) o viene sottoposta ad Auto Exist (stessa tabella) con le colonne successive specificate.
filterTable Espressione di tabella che viene aggiunta al contesto di filtro di tutte le colonne specificate come argomenti groupBy_columnName. I valori presenti nella tabella di filtro vengono usati per filtrare prima dell'esecuzione di un cross join o di Auto Exist.
name Stringa che rappresenta il nome della colonna da usare per l'espressione successiva specificata.
expression Qualsiasi espressione DAX che restituisce un singolo valore (non una tabella).

Valore restituito

Tabella che include combinazioni di valori dalle colonne specificate, in base al raggruppamento specificato. Nella tabella restituita vengono incluse solo le righe per le quali almeno una delle espressioni specificate restituisce un valore non vuoto. Se tutte le espressioni restituiscono BLANK/NULL per una riga, tale riga non verrà inclusa nella tabella restituita.

Osservazioni:

  • Questa funzione non garantisce alcun ordinamento per i risultati.

  • Una colonna non può essere specificata più di una volta nel parametro groupBy_columnName. La formula seguente, ad esempio, non è valida.

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

  • Questa funzione non è supportata per l'uso nella modalità DirectQuery se usata in colonne calcolate o nelle regole di sicurezza a livello di riga.

Contesto di filtro

Si consideri la query seguente:

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

In questa query senza una misura le colonne groupBy non contengono colonne dell'espressione FILTER (ad esempio, della tabella Customer). Il filtro non viene applicato alle colonne groupBy. Le tabelle Sales Territory e Customer possono essere indirettamente correlate tramite la tabella dei fatti Reseller sales. Poiché non sono correlate direttamente, l'espressione filtro non prevede alcuna operazione e le colonne groupBy non sono interessate.

Tuttavia con questa query:

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

Le colonne groupBy contengono una colonna interessata dal filtro e tale filtro viene applicato ai risultati di groupBy.

Con IGNORE

La sintassi IGNORE può essere usata per modificare il comportamento della funzione SUMMARIZECOLUMNS omettendo espressioni specifiche dalla valutazione BLANK/NULL. Le righe per le quali tutte le espressioni che non usano IGNORE restituiscono BLANK/NULL verranno escluse, indipendentemente dal fatto che le espressioni che usano IGNORE restituiscano o meno BLANK/NULL. La funzione IGNORE può essere usata solo all'interno di un'espressione SUMMARIZECOLUMNS.

Esempio

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

Esegue il rollup della colonna Sales[CustomerId], creando un subtotale per tutti i clienti nel raggruppamento specificato. Senza IGNORE, il risultato è:

Customerid Quantità totale BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

Con IGNORE,

Customerid Quantità totale BlankIfTotalQtyIsNot3
B 3 3
C 3 3

Tutte le espressioni ignorate,

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

Anche se entrambe le espressioni restituiscono BLANK per alcune righe, vengono incluse perché non sono presenti espressioni non ignorate che restituiscono BLANK.

Customerid Spazio vuoto BlankIfTotalQtyIsNot5
Un 5
B
A

Con NONVISUAL

La funzione NONVISUAL indica che un filtro di valore nella funzione SUMMARIZECOLUMNS non influisce sui valori di misura, ma si applica solo alle colonne groupBy. La funzione NONVISUAL può essere usata solo all'interno di un'espressione SUMMARIZECOLUMNS.

Esempio

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]

Restituisce il risultato in cui [Visual Total Sales] è il totale per tutti gli anni:

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

Al contrario, la stessa query senza la funzione 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]

Restituisce il risultato in cui [Visual Total Sales] è il totale per i due anni selezionati:

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

Con ROLLUPADDISSUBTOTAL

L'aggiunta della sintassi ROLLUPADDISSUBTOTAL modifica il comportamento della funzione SUMMARIZECOLUMNS aggiungendo righe di rollup/subtotali al risultato in base alle colonne groupBy_columnName. La funzione ROLLUPADDISSUBTOTAL può essere usata solo all'interno di un'espressione SUMMARIZECOLUMNS.

Esempio con singolo subtotale

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]

Restituisce la tabella seguente:

Categoria Sottocategoria IsCategorySubtotal IsSubcategorySubtotal Quantità totale
Vero Vero 60398
Accessori False Vero 36092
Accessori Bike Racks False False 328
Bikes Mountain Bikes False False 4970
Clothing False Vero 9101

Esempio con più subtotali

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

Le vendite vengono raggruppate per stato, per cliente, per data, con subtotali per 1. Vendite per stato, per data 2. Vendite per stato, per cliente 3. Il rollup viene eseguito sia per cliente che per data, ottenendo le vendite per stato.

Restituisce la tabella seguente:

IDCliente IsCustomerSubtotal Provincia Quantità totale Data IsDateSubtotal
A FALSE WA 5 10/7/2014
B FALSE WA 1 10/7/2014
B FALSE WA 2 7/11/2014
A FALSE OPPURE 2 10/7/2014
A FALSE OPPURE 1 7/11/2014
TRUE WA 6 10/7/2014
TRUE WA 2 7/11/2014
TRUE OPPURE 2 10/7/2014
TRUE OPPURE 1 7/11/2014
A FALSE WA 5 TRUE
B FALSE WA 3 TRUE
A FALSE OPPURE 3 TRUE
TRUE WA 8 TRUE
TRUE OPPURE 3 TRUE

Con ROLLUPGROUP

Analogamente alla funzione SUMMARIZE, è possibile usare ROLLUPGROUP con ROLLUPADDISSUBTOTAL per specificare quali gruppi di riepilogo/granularità (subtotali) includere (riducendo il numero di righe di subtotale restituite). La funzione ROLLUPGROUP può essere usata solo all'interno di un'espressione SUMMARIZECOLUMNS o SUMMARIZE.

Esempio con più subtotali

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

Ancora raggruppati per città e stato, ma sommati insieme quando si indica un subtotale, viene restituita la tabella seguente.

Provincia Customerid IsCustomerSubtotal Quantità totale City IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA B FALSE 2 Bellevue FALSE
WA A FALSE 3 Milano FALSE
WA B FALSE 1 Milano FALSE
OPPURE A FALSE 3 Portland FALSE
WA TRUE 4 Bellevue FALSE
WA TRUE 4 Milano FALSE
OPPURE TRUE 3 Portland FALSE
A FALSE 5 FALSE
B FALSE 3 TRUE
A FALSE 3 TRUE
TRUE 11 TRUE

SUMMARIZE