Κοινή χρήση μέσω


SUMMARIZECOLUMNS

Ισχύει για: Υπολογισμός απεικόνισης υπολογιζόμενης στήλης υπολογιζόμενου πίνακα Μέτρηση

Επιστρέφει έναν πίνακα σύνοψης σε ένα σύνολο ομάδων.

Σύνταξη

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

Παράμετροι

Όρος Ορισμός
groupBy_columnName Μια πλήρως προσδιορισμένη αναφορά στήλης (Table[Column]) σε έναν βασικό πίνακα για τον οποίο οι διακριτές τιμές περιλαμβάνονται στον πίνακα που επιστρέφεται. Κάθε groupBy_columnName στήλη είναι διασταυρούμενη σύνδεση (διαφορετικοί πίνακες) ή αυτόματη ύπαρξη (ίδιος πίνακας) με τις επόμενες καθορισμένες στήλες.
filterTable Μια παράσταση πίνακα η οποία προστίθεται στο περιβάλλον φίλτρου όλων των στηλών που καθορίζονται ως groupBy_columnName ορίσματα. Οι τιμές που υπάρχουν στον πίνακα φίλτρων χρησιμοποιούνται για φιλτράρισμα πριν την εκτέλεση της διασταυρούμενης σύνδεσης/αυτόματης παρουσίας.
όνομα Μια συμβολοσειρά που αντιπροσωπεύει το όνομα στήλης που θα χρησιμοποιηθεί για την επόμενη παράσταση που καθορίστηκε.
έκφραση Οποιαδήποτε παράσταση 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. Δεδομένου ότι δεν σχετίζονται άμεσα, η παράσταση φίλτρου είναι μη-op και οι στήλες groupBy δεν επηρεάζονται.

Ωστόσο, με αυτό το ερώτημα:

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

Οι στήλες groupBy περιέχουν μια στήλη η οποία επηρεάζεται από το φίλτρο και αυτό το φίλτρο εφαρμόζεται στα αποτελέσματα groupBy.

Με τη σύνταξη IGNORE

Η σύνταξη IGNORE μπορεί να χρησιμοποιηθεί για την τροποποίηση της συμπεριφοράς της συνάρτησης SUMMARIZECOLUMNS, παραλείποντας συγκεκριμένες παραστάσεις από την αξιολόγηση BLANK/NULL. Οι γραμμές για τις οποίες όλες οι παραστάσεις που δεν χρησιμοποιούν τη σύνταξη IGNORE θα εξαιρεθούν ανεξάρτητα από το αν οι παραστάσεις που χρησιμοποιούν τη σύνταξη 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 Ή 2 10/7/2014
C FALSE Ή 1 7/11/2014
TRUE WA 6 10/7/2014
TRUE WA 2 7/11/2014
TRUE Ή 2 10/7/2014
TRUE Ή 1 7/11/2014
A FALSE WA 5 TRUE
B FALSE WA 3 TRUE
C FALSE Ή 3 TRUE
TRUE WA 8 TRUE
TRUE Ή 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
Ή C FALSE 3 Πόρτλαντ FALSE
WA TRUE 4 Μπέλβιου FALSE
WA TRUE 4 Κηφισιά FALSE
Ή 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 ΛΆΘΟΣ ΛΆΘΟΣ

Από τον Ιούνιο του 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.

Εάν προτιμάτε να διατηρήσετε την προηγούμενη συμπεριφορά, μπορείτε να γράψετε ξανά την παράσταση χρησιμοποιώντας την επιλογή AddColumns ή SelectColumns αντί για τη SummarizeColumns, όπως φαίνεται παρακάτω:

CalculateTable(
    Filter(
        SelectColumns(
            'Reseller Sales',
            "ResellerKey", 
            [ResellerKey],
            "ProductKey",
            [ProductKey]
        ),
        And(Not IsBlank([ResellerKey]),  Not IsBlank([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 όπως απαιτείται για να εξασφαλίσετε συνεπή συμπεριφορά αντικατάστασης σε κάθε πίνακα.

ΣΥΝΟΨΊΖΩ