SUMMARIZECOLUMNS
Ισχύει για:Υπολογιζόμενη στήλη
Υπολογιζόμενος πίνακας
Μέτρηση
υπολογισμού απεικόνισης
Επιστρέφει έναν πίνακα σύνοψης σε ένα σύνολο ομάδων.
Σύνταξη
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
Παράμετροι
Όρος | Ορισμός |
---|---|
groupBy_columnName |
Μια πλήρως προσδιορισμένη αναφορά στήλης (Table[Column]) σε έναν βασικό πίνακα για τον οποίο οι διακριτές τιμές περιλαμβάνονται στον πίνακα που επιστρέφεται. Κάθε groupBy_columnName στήλη είναι διασταυρούμενη σύνδεση (διαφορετικοί πίνακες) ή αυτόματη ύπαρξη (ίδιος πίνακας) με τις επόμενες καθορισμένες στήλες. |
filterTable |
Μια παράσταση πίνακα η οποία προστίθεται στο περιβάλλον φίλτρου όλων των στηλών που καθορίζονται ως groupBy_columnName ορίσματα. Οι τιμές που υπάρχουν στον πίνακα φίλτρων χρησιμοποιούνται για φιλτράρισμα πριν την εκτέλεση της διασταυρούμενης σύνδεσης/αυτόματης παρουσίας. |
name |
Μια συμβολοσειρά που αντιπροσωπεύει το όνομα στήλης που θα χρησιμοποιηθεί για την επόμενη παράσταση που καθορίστηκε. |
expression |
Οποιαδήποτε DAX παράσταση που επιστρέφει μια μοναδική τιμή (όχι έναν πίνακα). |
Τιμή επιστροφής
Ένας πίνακας ο οποίος περιλαμβάνει συνδυασμούς τιμών από τις παρεχόμενες στήλες με βάση την καθορισμένη ομαδοποίηση. Μόνο οι γραμμές για τις οποίες τουλάχιστον μία από τις παρεχόμενες παραστάσεις επιστρέφουν μια μη κενή τιμή, συμπεριλαμβάνονται στον πίνακα που επιστρέφεται. Εάν όλες οι παραστάσεις αποτιμηθούν ως BLANK/NULL για μια γραμμή, αυτή η γραμμή δεν περιλαμβάνεται στον πίνακα που επιστρέφεται.
Παρατηρήσεις
Αυτή η συνάρτηση δεν εγγυάται καμία σειρά ταξινόμησης για τα αποτελέσματα.
Μια στήλη δεν μπορεί να καθοριστεί περισσότερες από μία φορές στην παράμετρο groupBy_columnName. Για παράδειγμα, ο παρακάτω τύπος δεν είναι έγκυρος.
SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )
Αυτή η συνάρτηση δεν υποστηρίζεται για χρήση σε λειτουργία DirectQuery όταν χρησιμοποιείται σε υπολογιζόμενες στήλες ή σε κανόνες ασφάλειας σε επίπεδο γραμμών (RLS).
Περιβάλλον φίλτρου
Εξετάστε το παρακάτω ερώτημα:
SUMMARIZECOLUMNS (
'Sales Territory'[Category],
FILTER('Customer', 'Customer' [First Name] = "Alicia")
)
Σε αυτό το ερώτημα, χωρίς μια μέτρηση, οι στήλες groupBy δεν περιέχουν στήλες από την FILTER παράσταση (για παράδειγμα, από τον πίνακα Customer). Το φίλτρο δεν εφαρμόζεται στις στήλες groupBy. Οι πίνακες Sales Territory και Customer μπορεί να σχετίζονται έμμεσα μέσω του πίνακα δεδομένων Reseller Sales. Δεδομένου ότι δεν σχετίζονται άμεσα, η παράσταση φίλτρου είναι μια no-op και οι στήλες groupBy δεν επηρεάζονται.
Ωστόσο, με αυτό το ερώτημα:
SUMMARIZECOLUMNS (
'Sales Territory'[Category], 'Customer' [Education],
FILTER('Customer', 'Customer'[First Name] = "Alicia")
)
Οι στήλες groupBy περιέχουν μια στήλη η οποία επηρεάζεται από το φίλτρο και αυτό το φίλτρο εφαρμόζεται στα αποτελέσματα groupBy.
Με IGNORE
Η IGNORE σύνταξη μπορεί να χρησιμοποιηθεί για την τροποποίηση της συμπεριφοράς της συνάρτησης SUMMARIZECOLUMNS, παραλείποντας συγκεκριμένες παραστάσεις από την αξιολόγηση BLANK/NULL. Οι γραμμές για τις οποίες όλες οι παραστάσεις που δεν χρησιμοποιούν IGNORE επιστρέφουν BLANK/NULL θα εξαιρεθούν ανεξάρτητα από το αν οι παραστάσεις που χρησιμοποιούν IGNORE αποτιμώνται ως BLANK/NULL ή όχι. IGNORE μπορούν να χρησιμοποιηθούν μόνο μέσα σε μια παράσταση SUMMARIZECOLUMNS.
Παράδειγμα
SUMMARIZECOLUMNS(
Sales[CustomerId], "Total Qty",
IGNORE( SUM( Sales[Qty] ) ),
"BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 )
)
Αυτό συναγωνίζεται τη στήλη Sales[CustomerId], δημιουργώντας ένα μερικό άθροισμα για όλους τους πελάτες της συγκεκριμένης ομάδας. Χωρίς IGNORE, το αποτέλεσμα είναι:
CustomerId | Συνολική ποσότητα | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
B | 3 | 3 |
C | 3 | 3 |
Με IGNORE,
CustomerId | Συνολική ποσότητα | BlankIfTotalQtyIsNot3 |
---|---|---|
B | 3 | 3 |
C | 3 | 3 |
Όλη η παράσταση παραβλέπεται,
SUMMARIZECOLUMNS(
Sales[CustomerId], "Blank",
IGNORE( BLANK() ), "BlankIfTotalQtyIsNot5",
IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) )
)
Παρόλο που και οι δύο παραστάσεις επιστρέφουν κενό για ορισμένες γραμμές, συμπεριλαμβάνονται, καθώς δεν υπάρχουν παραστάσεις χωρίς πρόσημο που επιστρέφουν κενό.
CustomerId | Λευκός | BlankIfTotalQtyIsNot5 |
---|---|---|
A | 5 | |
B | ||
C |
Με NONVISUAL
Η συνάρτηση NONVISUAL επισημαίνει ένα φίλτρο τιμής σε SUMMARIZECOLUMNS συνάρτηση, καθώς δεν επηρεάζει τις τιμές μέτρησης, αλλά εφαρμόζεται μόνο σε στήλες groupBy. NONVISUAL μπορούν να χρησιμοποιηθούν μόνο μέσα σε μια παράσταση SUMMARIZECOLUMNS.
Παράδειγμα
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]
Επιστρέφει το αποτέλεσμα όπου [Visual Total Sales] είναι το σύνολο σε όλα τα έτη:
DimDate[CalendarYear] | [Πωλήσεις] | [Visual Total Sales] |
---|---|---|
2007 | 9,791,060.30 | 29,358,677.22 |
2008 | 9,770,899.74 | 29,358,677.22 |
Αντίθετα, η ίδια ερωτήματος χωρίς συνάρτηση 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]
Επιστρέφει το αποτέλεσμα όπου [Visual Total Sales] είναι το σύνολο για τα δύο επιλεγμένα έτη:
DimDate[CalendarYear] | [Πωλήσεις] | [Visual Total Sales] |
---|---|---|
2007 | 9,791,060.30 | 19,561,960.04 |
2008 | 9,770,899.74 | 19,561,960.04 |
Με ROLLUPADDISSUBTOTAL
Η προσθήκη της σύνταξης ROLLUPADDISSUBTOTAL τροποποιεί τη συμπεριφορά της συνάρτησης SUMMARIZECOLUMNS με την προσθήκη γραμμών συνάθροισης/μερικών αθροισμάτων στο αποτέλεσμα με βάση τις groupBy_columnName στήλες. ROLLUPADDISSUBTOTAL μπορούν να χρησιμοποιηθούν μόνο μέσα σε μια παράσταση SUMMARIZECOLUMNS.
Παράδειγμα με μονό μερικό άθροισμα
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]
Επιστρέφει τον παρακάτω πίνακα,
Κατηγορία | Υποκατηγορία | IsCategorySubtotal | IsSubcategorySubtotal | Συνολική ποσότητα |
---|---|---|---|---|
Πιστός | Πιστός | 60398 | ||
Αξεσουάρ | Ψεύτικος | Πιστός | 36092 | |
Αξεσουάρ | Σχάρες ποδηλάτων | Ψεύτικος | Ψεύτικος | 328 |
Ποδήλατα | Ποδήλατα Mountain Bike | Ψεύτικος | Ψεύτικος | 4970 |
Ρουχισμός | Ψεύτικος | Πιστός | 9101 |
Παράδειγμα με πολλαπλά μερικά αθροίσματα
SUMMARIZECOLUMNS (
Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] )
)
Οι πωλήσεις ομαδοποιούνται κατά πολιτεία, κατά πελάτη, κατά ημερομηνία, με μερικά αθροίσματα για το 1. Πωλήσεις κατά πολιτεία, κατά ημερομηνία 2. Πωλήσεις κατά πολιτεία, κατά Πελάτη 3. Συνάθροισε τόσο στον πελάτη όσο και στην ημερομηνία που οδηγεί σε πωλήσεις κατά πολιτεία.
Επιστρέφει τον παρακάτω πίνακα,
CustomerID | IsCustomerSubtotal | Στάδιο | Συνολική ποσότητα | Ημερομηνία | IsDateSubtotal |
---|---|---|---|---|---|
A | FALSE |
WA | 5 | 10/7/2014 | |
B | FALSE |
WA | 1 | 10/7/2014 | |
B | FALSE |
WA | 2 | 7/11/2014 | |
C | FALSE |
OR | 2 | 10/7/2014 | |
C | FALSE |
OR | 1 | 7/11/2014 | |
TRUE |
WA | 6 | 10/7/2014 | ||
TRUE |
WA | 2 | 7/11/2014 | ||
TRUE |
OR | 2 | 10/7/2014 | ||
TRUE |
OR | 1 | 7/11/2014 | ||
A | FALSE |
WA | 5 | TRUE |
|
B | FALSE |
WA | 3 | TRUE |
|
C | FALSE |
OR | 3 | TRUE |
|
TRUE |
WA | 8 | TRUE |
||
TRUE |
OR | 3 | TRUE |
Με ROLLUPGROUP
Όπως και με τη συνάρτηση SUMMARIZE, ROLLUPGROUP μπορούν να χρησιμοποιηθούν μαζί με ROLLUPADDISSUBTOTAL για να καθορίσετε ποιες ομάδες σύνοψης/υποδιαιρέτες (μερικά αθροίσματα) θα συμπεριληφθούν, μειώνοντας τον αριθμό των γραμμών μερικών αθροισμάτων που επιστρέφονται. ROLLUPGROUP μπορούν να χρησιμοποιηθούν μόνο μέσα σε μια παράσταση SUMMARIZECOLUMNS ή SUMMARIZE.
Παράδειγμα με πολλαπλά μερικά αθροίσματα
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] )
)
Εξακολουθεί να ομαδοποιείται κατά Πόλη και Πολιτεία, αλλά συναθροίζει κατά την αναφορά ενός μερικών αθροισμάτων και επιστρέφει τον παρακάτω πίνακα,
Στάδιο | CustomerId | IsCustomerSubtotal | Συνολική ποσότητα | City | IsCityStateSubtotal |
---|---|---|---|---|---|
WA | A | FALSE |
2 | Μπέλβιου | FALSE |
WA | B | FALSE |
2 | Μπέλβιου | FALSE |
WA | A | FALSE |
3 | Κηφισιά | FALSE |
WA | B | FALSE |
1 | Κηφισιά | FALSE |
OR | C | FALSE |
3 | Πόρτλαντ | FALSE |
WA | TRUE |
4 | Μπέλβιου | FALSE |
|
WA | TRUE |
4 | Κηφισιά | FALSE |
|
OR | TRUE |
3 | Πόρτλαντ | FALSE |
|
A | FALSE |
5 | FALSE |
||
B | FALSE |
3 | TRUE |
||
C | FALSE |
3 | TRUE |
||
TRUE |
11 | TRUE |
Σύνοψη περιβάλλοντοςColumns
Φόντο
Μέχρι τον Φεβρουάριο του 2023, SUMMARIZECOLUMNS δεν υποστήριζε καθόλου την αξιολόγηση στο πλαίσιο μιας μετάβασης. Στα προϊόντα που κυκλοφόρησαν πριν από τον συγκεκριμένο μήνα, αυτός ο περιορισμός δεν SUMMARIZECOLUMNS χρήσιμος στα περισσότερα μέτρα – δεν ήταν δυνατή η κλήση μιας μέτρησης SUMMARIZECOLUMNS σε κάθε περίπτωση μετάβασης περιβάλλοντος, συμπεριλαμβανομένων άλλων δηλώσεων SUMMARIZECOLUMNS.
Από τον Φεβρουάριο του 2023, η μετάβαση περιβάλλοντος υποστηρίχθηκε σε μερικά σενάρια, αλλά όχι σε όλες τις συνθήκες. Οι υποστηριζόμενες και περιορισμένες περιπτώσεις είναι οι εξής:
Τύπος SummarizeColumns | Εξωτερικό φίλτρο με μία μόνο στήλη | Εξωτερικό φίλτρο με περισσότερες από μία στήλες | Εξωτερικές στήλες Ομαδοποίηση_κατά |
---|---|---|---|
SummarizeColumns μόνο με GroupBy | OK | OK | OK |
SummarizeColumns με Φίλτρα/Μετρήσεις | OK | ERROR | ERROR |
Από τον Ιούνιο του 2024, ενεργοποιούμε τη συνάρτηση SummarizeColumns βάσει περιεχομένου, η οποία επιτρέπει την αξιολόγηση της SummarizeColumns σε οποιαδήποτε μετάβαση περιβάλλοντος, η συνάρτηση SummarizeColumns στη μέτρηση υποστηρίζεται πλέον πλήρως:
Τύπος SummarizeColumns | Εξωτερικό φίλτρο με μία μόνο στήλη | Εξωτερικό φίλτρο με περισσότερες από μία στήλες | Εξωτερικές στήλες Ομαδοποίηση_κατά |
---|---|---|---|
SummarizeColumns μόνο με GroupBy | OK | OK | OK |
SummarizeColumns με Φίλτρα/Μετρήσεις | OK | OK | OK |
Ωστόσο, αυτή η ενημέρωση περιλαμβάνει επίσης αλλαγές στη συμπεριφορά της SummarizeColumns, η οποία μπορεί να αλλάξει τα αποτελέσματα υπαρχουσών παραστάσεων:
Σημασιολογία SelfValue για εξωτερικά φίλτρα
Παρουσιάζουμε μια σημασιολογική έννοια που ονομάζεται SelfValue, η οποία αλλάζει τον τρόπο με τον οποίο τα φίλτρα από εξωτερικούς πίνακες αλληλεπιδρούν με τις στήλες GroupBy στη SummarizeColumns. Αυτή η αλλαγή δεν επιτρέπει τα φίλτρα από έναν διαφορετικό πίνακα για να επηρεάσουν τις στήλες Ομαδοποίηση_κατά, ακόμα και αν οι πίνακες σχετίζονται μέσω μιας σχέσης φιλτραρίσματος κατά. Ένα παράδειγμα που απεικονίζει την επίδραση αυτής της αλλαγής περιλαμβάνει την ακόλουθη παράσταση:
CalculateTable(
SummarizeColumns(
'Reseller Sales'[ResellerKey],
'Reseller Sales'[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Πριν από αυτή την ενημέρωση, το φίλτρο TreatAs θα εφαρμοζόταν στη λειτουργία GroupBy εντός της SummarizeColumns, αξιοποιώντας τη σχέση μεταξύ του 'Product'[Product Key] και του 'Reseller Sales'[ProductKey]. Κατά συνέπεια, τα αποτελέσματα του ερωτήματος θα περιλαμβάνουν μόνο γραμμές όπου οι "Πωλήσεις μεταπωλητών"[ProductKey] ισούται με 229. Ωστόσο, μετά την ενημέρωση, οι στήλες Ομαδοποίηση_κατά εντός της SummarizeColumns δεν θα φιλτράρονται πλέον κατά στήλες από εξωτερικούς πίνακες, ακόμη και αν υπάρχει μια σχέση μεταξύ τους. Επομένως, στο παραπάνω παράδειγμα, η στήλη Ομαδοποίηση_κατά 'Πωλήσεις μεταπωλητή'[ProductKey] δεν θα φιλτραριστεί με βάση τη στήλη 'Product'[ProductKey]. Κατά συνέπεια, το ερώτημα θα περιλαμβάνει γραμμές όπου "Πωλήσεις μεταπωλητή"[ProductKey] δεν ισούται με 229.
Εάν προτιμάτε να διατηρήσετε την προηγούμενη συμπεριφορά, μπορείτε να γράψετε ξανά την παράσταση χρησιμοποιώντας τη συνάρτηση Summarize αντί της SummarizeColumns, όπως φαίνεται παρακάτω:
CalculateTable(
SUMMARIZE(
'Reseller Sales',
[ResellerKey],
[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Αυτή η επανάληψη εγγραφής παράστασης διατηρεί την αρχική σημασιολογία όπου η λειτουργία Ομαδοποίηση_κατά δεν επηρεάζεται από τον περιορισμό SelfValue που παρουσιάστηκε από την ενημέρωση.
Επικύρωση γραμμής για στήλες ομαδοποίησης που καλύπτονται πλήρως από τις Treatas
Πριν από αυτήν την ενημέρωση, μέσα σε μια συνάρτηση SummarizeColumns, εάν όλες οι στήλες GroupBy από έναν συγκεκριμένο πίνακα καλύφθηκαν πλήρως από ένα μοναδικό φίλτρο Treatas από τον ίδιο πίνακα, όπως φαίνεται παρακάτω:
SummarizeColumns(
Geography[Country],
Geography[State],
Treatas(
{("United States", "Alberta")},
Geography[Country],
Geography[State]
)
)
Το αποτέλεσμα του παραπάνω ερωτήματος θα περιλαμβάνει οποιεσδήποτε γραμμές έχουν καθοριστεί στο φίλτρο Treatas, ανεξάρτητα από το αν ήταν έγκυρες ή όχι. Για παράδειγμα, το αποτέλεσμα θα ήταν ένας πίνακας μίας γραμμής ("Ηνωμένες Πολιτείες", "Αλμπέρτα"), ακόμα και αν δεν υπήρχε τέτοια γραμμή με [Χώρα] = "Ηνωμένες Πολιτείες" και [Πολιτεία] = "Αλμπέρτα" στον πίνακα "Γεωγραφία".
Αυτό το πρόβλημα ήταν γνωστό και έχει αντιμετωπιστεί από την ενημέρωση. Μετά την ενημέρωση, αυτές οι μη έγκυρες γραμμές θα φιλτραριστούν και θα επιστραφούν μόνο έγκυρες γραμμές από τον πίνακα GroupBy. Επομένως, το αποτέλεσμα για το παραπάνω ερώτημα θα είναι κενό, καθώς δεν υπάρχουν έγκυρες γραμμές που να συμφωνούν με τις καθορισμένες τιμές [Χώρα] και [Πολιτεία] στον πίνακα "Γεωγραφία".
Να μην επιτρέπεται η μεικτή keepfilters/παράκαμψη φίλτρων στον ίδιο πίνακα/σύμπλεγμα
Η πρόσφατη ενημέρωση εισήγαγε έναν προσωρινό περιορισμό που ενεργοποιεί ένα μήνυμα σφάλματος που αναφέρει:
"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."
Αυτό το σφάλμα παρουσιάζεται όταν τόσο τα φυσιολογικά φίλτρα (που παρακάμπτουν τα υπάρχοντα φίλτρα) όσο και τα φίλτρα με καθορισμένα keepFilters υπάρχουν εντός του ίδιου πίνακα/συμπλέγματος. Για παράδειγμα:
Evaluate CalculateTable(
SummarizeColumns(
Product[Color],
KeepFilters(
TreatAs(
{( "Washington")}
, Geography[State]
)
),
TreatAs(
{("United States"), ("Canada")}
, Geography[Country]
)
)
,TreatAs({("Alberta")}, Geography[State])
,TreatAs({("Canada")}, Geography[Country])
)
Στην παραπάνω παράσταση, υπάρχουν δύο φίλτρα στον πίνακα "Γεωγραφία": ένα με καθορισμένο το KeepFilters και ένα χωρίς. Αυτά τα φίλτρα επικαλύπτονται με εξωτερικά φίλτρα σε διαφορετικές στήλες. Προς το παρόν, αυτή η ρύθμιση παραμέτρων δεν επιτρέπεται επειδή εσωτερικά, τα δύο φίλτρα είναι ομαδοποιημένα σε ένα και το σύστημα δεν μπορεί να προσδιορίσει τη σωστή συμπεριφορά παράκαμψης φίλτρου για το ομαδοποιημένο φίλτρο συνολικά σε αυτές τις περιπτώσεις.
Λάβετε υπόψη ότι αυτός ο περιορισμός είναι προσωρινός. Αναπτύσσουμε ενεργά λύσεις για την κατάργηση αυτού του περιορισμού σε μελλοντικές ενημερώσεις. Εάν αντιμετωπίσετε αυτό το σφάλμα, συνιστάται να προσαρμόσετε τα φίλτρα εντός της SummarizeColumns προσθέτοντας ή καταργώντας το KeepFilters όπως απαιτείται για να εξασφαλίσετε συνεπή συμπεριφορά αντικατάστασης σε κάθε πίνακα.