Udostępnij za pośrednictwem


SUMMARIZECOLUMNS

Dotyczy:kolumna obliczeniowatabela obliczeniowaMeasureobliczenia wizualne

Zwraca tabelę podsumowania dla zestawu grup.

Składnia

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

Parametry

Termin Definicja
groupBy_columnName W pełni kwalifikowane odwołanie do kolumny (Tabela[Kolumna]) do tabeli podstawowej, dla której w zwracanej tabeli znajdują się odrębne values. Każda kolumna groupBy_columnName jest sprzężona krzyżowo (różne tabele) or automatycznie istniała (ta sama tabela) z kolejnymi określonymi kolumnami.
filterTable Wyrażenie tabeli dodawane do kontekstu filter kolumn all określone jako argumenty groupBy_columnName. values obecne w tabeli filter są używane do filter przed wykonaniem sprzężenia krzyżowego/automatycznego istnienia.
name Ciąg reprezentujący nazwę kolumny do użycia dla kolejnego określonego wyrażenia.
expression Dowolne wyrażenie DAX zwracające pojedynczą value (not tabelę).

Zwracanie value

Tabela zawierająca kombinacje values z podanych kolumn na podstawie określonego grupowania. Zwracana tabela zawiera tylko wiersze, dla których co najmniej jedno z podanych wyrażeń zwracablankvalue. If all wyrażenia evaluate do BLANK/NULL dla wiersza, ten wiersz jest not uwzględniony w zwróconej tabeli.

Uwagi

  • Ta funkcja not gwarantuje kolejność sortowania wyników.

  • Nie można określić kolumny więcej niż raz w parametrze groupBy_columnName. Na przykład następująca formuła jest nieprawidłowa.

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

  • Ta funkcja jest not obsługiwana do użycia w trybie DirectQuery w przypadku użycia w kolumnach obliczeniowych or reguł zabezpieczeń na poziomie wiersza.

kontekst Filter

Rozważ następujące zapytanie:

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

W tym zapytaniu bez measure kolumny groupBynot zawierają kolumny z wyrażenia FILTER (na przykład z tabeli Customer). filter jest not stosowany do kolumn groupBy. Tabele Sales Territory and Customer mogą być pośrednio related za pośrednictwem tabeli Sales Territory fact Reseller. Ponieważ są one not bezpośrednio related, filter wyrażenie jest no-op and kolumny groupBy są not wpływać.

Jednak w przypadku tego zapytania:

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

Kolumny groupBy zawierają kolumnę, której dotyczy filterandfilter są stosowane do wyników groupBy.

Z IGNORE

Składnia IGNORE może służyć do modyfikowania zachowania funkcji SUMMARIZECOLUMNS przez pominięcie określonych wyrażeń z oceny BLANK/NULL. Wiersze, dla których wyrażenia allnot przy użyciu IGNORE zwracać BLANK/NULL, zostaną wykluczone niezależnie od tego, czy wyrażenia, które używają IGNOREevaluate do BLANK/NULL ornot. IGNORE można używać tylko w wyrażeniu SUMMARIZECOLUMNS.

Przykład

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

Spowoduje to zestawienie kolumny Sales[CustomerId], tworząc sumę częściową dla all klientów w danym grupowaniu. Bez IGNOREwynik to:

Identyfikator klienta Łączna liczba BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

Z IGNORE,

Identyfikator klienta Łączna liczba BlankIfTotalQtyIsNot3
B 3 3
C 3 3

All wyrażenie ignorowane,

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

Even chociaż oba wyrażenia zwracają blank dla niektórych wierszy, są one uwzględniane, ponieważ nie ma żadnych nieu ignorowanych wyrażeń, które zwracają blank.

Identyfikator klienta Blank BlankIfTotalQtyIsNot5
A 5
B
C

Z NONVISUAL

Funkcja NONVISUAL oznacza valuefilter w funkcji SUMMARIZECOLUMNS jako not wpływające na measurevalues, ale tylko do groupBy kolumn. NONVISUAL można używać tylko w wyrażeniu SUMMARIZECOLUMNS.

Przykład

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]

Zwraca wynik, w którym [Visual Total Sales] jest sumą w ciągu all lat:

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

Z kolei to samo zapytanie bez funkcji 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]

Zwraca wynik, w którym [Visual Total Sales] jest sumą w ciągu dwóch wybranych lat:

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

Z ROLLUPADDISSUBTOTAL

Dodanie składni ROLLUPADDISSUBTOTAL modyfikuje zachowanie funkcji SUMMARIZECOLUMNS przez dodanie rollup/sum częściowych do wyniku na podstawie kolumn groupBy_columnName. ROLLUPADDISSUBTOTAL można używać tylko w wyrażeniu SUMMARIZECOLUMNS.

Przykład z pojedynczą sumą częściową

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]

Zwraca poniższą tabelę.

Kategoria Podkategoria IsCategorySubtotal IsSubcategorySubtotal Łączna liczba
True True 60398
Akcesoria False True 36092
Akcesoria Stojaki rowerowe False False 328
Rowery Rowery górskie False False 4970
Odzież False True 9101

Przykład z wieloma sumami częściowymi

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

Sprzedaż jest pogrupowana według stanu, według klienta, według date, z sumami częściowymi dla 1. Sprzedaż według stanu, według date 2. Sprzedaż według stanu, według klienta 3. Rzutowane na obu klienta anddate prowadzące do sprzedaży według stanu.

Zwraca poniższą tabelę.

CustomerID (Identyfikator klienta) IsCustomerSubtotal Stan Łączna liczba Date IsDateSubtotal
A FALSE WA 5 2014-07-10
B FALSE WA 1 2014-07-10
B FALSE WA 2 7/11/2014
C FALSE OR 2 2014-07-10
C FALSE OR 1 7/11/2014
TRUE WA 6 2014-07-10
TRUE WA 2 7/11/2014
TRUE OR 2 2014-07-10
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

Z ROLLUPGROUP

Podobnie jak w przypadku funkcji SUMMARIZE, można użyć ROLLUPGROUP razem z ROLLUPADDISSUBTOTAL, aby określić grupy podsumowania/stopień szczegółowości (sumy częściowe) do uwzględnienia, zmniejszając liczbę zwracanych wierszy sumy częściowej. ROLLUPGROUP można używać tylko w wyrażeniu SUMMARIZECOLUMNSorSUMMARIZE.

Przykład z wieloma sumami częściowymi

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

Nadal grupowane według stanu and miasta, ale rzutowane razem podczas raportowania sumy częściowej zwraca poniższą tabelę,

Stan Identyfikator klienta IsCustomerSubtotal Łączna liczba City IsCityStateSubtotal
WA A FALSE 2 Bellevue FALSE
WA B FALSE 2 Bellevue FALSE
WA A FALSE 3 Redmond FALSE
WA B FALSE 1 Redmond FALSE
OR C FALSE 3 Portland FALSE
WA TRUE 100 Bellevue FALSE
WA TRUE 100 Redmond FALSE
OR TRUE 3 Portland FALSE
A FALSE 5 FALSE
B FALSE 3 TRUE
C FALSE 3 TRUE
TRUE 11 TRUE

Kontekstowe SummarizeColumns

Tło

Do lutego 2023 r. SUMMARIZECOLUMNSnot obsługiwać ocenę w ramach przejścia kontekstu w all. W produktach wydanych przed monthto ograniczenie sprawiło, że SUMMARIZECOLUMNSnot przydatne w większości miar — not było możliwe wywołanie measureSUMMARIZECOLUMNS w każdym przypadku przejścia kontekstu, w tym innych SUMMARIZECOLUMNSstatements.

Od lutego 2023 r. przejście kontekstu było obsługiwane w kilku scenariuszach, ale not w all warunków. Obsługiwane przypadki and z ograniczeniami są następujące:

typ SummarizeColumns Zewnętrzne Filter z jedną kolumną Filter zewnętrzne z więcej niż jedną kolumną Kolumny GroupBy zewnętrzne
SummarizeColumns tylko z GroupBy OK OK OK
SummarizeColumns z Filters/Measures OK ERROR ERROR

Od czerwca 2024 r. włączamy kontekstowe SummarizeColumns, które umożliwiają ocenę SummarizeColumns w dowolnym przejściu kontekstu, SummarizeColumns w measure jest now w pełni obsługiwana:

typ SummarizeColumns Zewnętrzne Filter z jedną kolumną Filter zewnętrzne z więcej niż jedną kolumną Kolumny GroupBy zewnętrzne
SummarizeColumns tylko z GroupBy OK OK OK
SummarizeColumns z Filters/Measures OK OK OK

Jednak ta aktualizacja obejmuje również zmiany zachowania SummarizeColumns, co może spowodować zmianę wyników istniejących wyrażeń:

Semantyka SelfValue dla filters zewnętrznych

Wprowadzamy semantyczną koncepcję o nazwie SelfValue, która zmienia sposób interakcji filters z tabel zewnętrznych z kolumnami GroupBy w SummarizeColumns. Ta zmiana nie zezwala filters z innej tabeli na wpływ na kolumny GroupBy, evenif tabele są related za pośrednictwem relacji filter-by. Przykład ilustrujący wpływ tej zmiany obejmuje następujące wyrażenie:

CalculateTable(
  SummarizeColumns(
      'Reseller Sales'[ResellerKey], 
      'Reseller Sales'[ProductKey]
  ), 
  Treatas({(229)}, 'Product'[Product Key])
)

Przed tą aktualizacją TreatAsfilter będą miały zastosowanie do operacji GroupBy w SummarizeColumns, wykorzystując relację międzyProduct"[Product Key] and "Reseller Sales" [ProductKey]. W związku z tym wyniki zapytania będą zawierać tylko wiersze, w których wartość "Reseller Sales" [ProductKey] wynosi 229. Jednak po aktualizacji GroupBy kolumny w SummarizeColumns nie będą już filtrowane według kolumn z tabel zewnętrznych, evenif istnieje relacja między nimi. W związku z tym w powyższym przykładzie kolumna GroupBy "Reseller Sales" [ProductKey] będzie not filtrowana według kolumny "Product"[ProductKey]. W rezultacie zapytanie będzie zawierać wiersze, w których wartość "Reseller Sales" [ProductKey] jest not równa 229.

If wolisz zachować zachowanie previous, możesz ponownie napisać wyrażenie przy użyciu Summarize zamiast SummarizeColumns, jak pokazano poniżej:

CalculateTable(
    SUMMARIZE(
        'Reseller Sales',
        [ResellerKey],
        [ProductKey]
    ),
    Treatas({(229)}, 'Product'[Product Key])
)

To wyrażenie przepisane zachowuje oryginalną semantykę, w której operacja GroupBy jest not dotknięta ograniczeniem SelfValue wprowadzonym przez aktualizację.

Sprawdzanie poprawności wierszy dla kolumn groupby w pełni objętych Treatas

Przed tą aktualizacją w ramach funkcji SummarizeColumnsifallGroupBy kolumny z określonej tabeli były w pełni objęte pojedynczą Treatasfilter z tej samej tabeli, jak pokazano poniżej:

SummarizeColumns(
  Geography[Country], 
  Geography[State], 
  Treatas(
      {("United States", "Alberta")}, 
      Geography[Country], 
      Geography[State]
  )
)

Wynik powyższego zapytania obejmowałby wszystkie wiersze określone w Treatasfilter, niezależnie od tego, czy były prawidłowe ornot. Na przykład wynikiem będzie tabela z pojedynczym wierszem ("Stany Zjednoczone", "Alberta"), evenif nie ma takiego wiersza z [Country] = "United States" and [State] = "Alberta" istniała w tabeli "Geography".

Ten problem był znany and został rozwiązany przez aktualizację. Po aktualizacji zostaną odfiltrowane takie nieprawidłowe wiersze, and zostaną zwrócone tylko prawidłowe wiersze z tabeli GroupBy. W związku z tym wynik powyższego zapytania będzie pusty, ponieważ w tabeli "Geography" nie ma prawidłowych wierszy pasujących do określonego [Country] and [State] values.

Nie zezwalaj na mieszany Keepfilters/overriddefilters w tej samej tabeli/klastrze

Ostatnia aktualizacja wprowadziła tymczasowe ograniczenie, które wyzwala komunikat error z informacją:

"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." 

Ten error występuje, gdy obie normalne filters (które zastępują istniejące filters) andfilters z określonymi KeepFilters są obecne w tej samej tabeli/klastrze. Na przykład:

Evaluate CalculateTable(
  SummarizeColumns(
      Product[Color],
      KeepFilters(
          TreatAs(
              {( "Washington")}
              , Geography[State]
          )
      ),
      TreatAs(
          {("United States"), ("Canada")}
          , Geography[Country]
      )
  )
  ,TreatAs({("Alberta")}, Geography[State])
  ,TreatAs({("Canada")}, Geography[Country])
)

W powyższym wyrażeniu istnieją dwa filters w tabeli "Geography": jeden z KeepFilters określonym and bez. Te filters nakładają się na zewnętrzne filters w różnych kolumnach. Obecnie ta konfiguracja jest not dozwolona, ponieważ wewnętrznie dwa filters są klastrowane w jeden, and system nie może określić prawidłowego filter zastępowania zachowania klastrowanego filter ogólnie w takich przypadkach.

Należy pamiętać, że to ograniczenie jest tymczasowe. Aktywnie opracowujemy rozwiązania, aby usunąć to ograniczenie w przyszłych aktualizacjach. If napotkasz tę error, zalecamy dostosowanie filters w ramach SummarizeColumns przez dodanie or usuwania KeepFilters w razie potrzeby w celu zapewnienia spójnego zastępowania zachowania w każdej tabeli.

SUMMARIZE