Bagikan melalui


SUMMARIZECOLUMNS

Berlaku untuk: Kolom terhitung Tabel terhitung Ukur perhitungan Visual

Mengembalikan tabel ringkasan di atas sekumpulan grup.

Sintaks

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

Parameter

Term Definisi
groupBy_columnName Referensi kolom yang sepenuhnya memenuhi syarat (Tabel[Kolom]) ke tabel dasar yang nilainya berbeda disertakan dalam tabel yang dikembalikan. Setiap kolom groupBy_columnName digabungkan silang (tabel yang berbeda) atau ada secara otomatis (tabel yang sama) dengan kolom yang ditentukan berikutnya.
filterTable Ekspresi tabel yang ditambahkan ke konteks filter semua kolom yang ditentukan sebagai argumen groupBy_columnName. Nilai yang ada dalam tabel filter digunakan untuk memfilter sebelum gabungan silang/ada otomatis dilakukan.
nama String yang mewakili nama kolom yang akan digunakan untuk ekspresi berikutnya yang ditentukan.
expression Ekspresi DAX apa pun yang mengembalikan satu nilai (bukan tabel).

Nilai hasil

Tabel yang menyertakan kombinasi nilai dari kolom yang disediakan berdasarkan pengelompokan yang ditentukan. Hanya baris yang setidaknya salah satu ekspresi yang disediakan yang mengembalikan nilai tidak kosong yang disertakan dalam tabel yang dikembalikan. Jika semua ekspresi mengevaluasi ke BLANK/NULL untuk baris, baris tersebut tidak disertakan dalam tabel yang dikembalikan.

Keterangan

  • Fungsi ini tidak menjamin urutan pengurutan apa pun untuk hasilnya.

  • Kolom tidak dapat ditentukan lebih dari sekali dalam parameter groupBy_columnName. Misalnya, rumus berikut tidak valid.

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

  • Fungsi ini tidak didukung untuk digunakan dalam mode DirectQuery saat digunakan dalam kolom terhitung atau aturan keamanan tingkat baris (RLS).

Konteks filter

Pertimbangkan kueri berikut:

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

Dalam kueri ini, tanpa mengukur kolom groupBy tidak berisi kolom apa pun dari ekspresi FILTER (misalnya, dari tabel Pelanggan). Filter tidak diterapkan ke kolom groupBy. Tabel Wilayah Penjualan dan Pelanggan mungkin secara tidak langsung terkait melalui tabel fakta penjualan Penjual. Karena tidak terkait langsung, ekspresi filter adalah no-op dan kolom groupBy tidak terpengaruh.

Namun, dengan kueri ini:

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

Kolom groupBy berisi kolom yang terpengaruh oleh filter dan filter tersebut diterapkan ke hasil groupBy.

Dengan IGNORE

Sintaks IGNORE dapat digunakan untuk mengubah perilaku fungsi SUMMARIZECOLUMNS dengan menghilangkan ekspresi tertentu dari evaluasi BLANK/NULL. Baris yang semua ekspresinya tidak menggunakan IGNORE return BLANK/NULL akan dikecualikan terlepas dari apakah ekspresi yang menggunakan IGNORE dievaluasi ke BLANK/NULL atau tidak. IGNORE hanya dapat digunakan dalam ekspresi SUMMARIZECOLUMNS.

Contoh

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

Ini menggulung kolom Sales[CustomerId], membuat subtotal untuk semua pelanggan dalam pengelompokan yang diberikan. Tanpa IGNORE, hasilnya adalah:

ID Pelanggan Total Qty BlankIfTotalQtyIsNot3
A 5
B 3 3
C 3 3

Dengan IGNORE,

ID Pelanggan Total Qty BlankIfTotalQtyIsNot3
B 3 3
C 3 3

Semua ekspresi diabaikan,

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

Meskipun kedua ekspresi mengembalikan kosong untuk beberapa baris, ekspresi tersebut disertakan karena tidak ada ekspresi yang tidak diabaikan yang mengembalikan kosong.

ID Pelanggan Kosong BlankIfTotalQtyIsNot5
A 5
B
C

Dengan NONVISUAL

Fungsi NONVISUAL menandai filter nilai dalam fungsi SUMMARIZECOLUMNS sebagai tidak memengaruhi nilai pengukuran, tetapi hanya berlaku untuk kolom groupBy. NONVISUAL hanya dapat digunakan dalam ekspresi SUMMARIZECOLUMNS.

Contoh

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]

Mengembalikan hasil di mana [Visual Total Sales] adalah total sepanjang tahun:

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

Sebaliknya, kueri yang sama tanpa fungsi 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]

Mengembalikan hasil di mana [Visual Total Sales] adalah total selama dua tahun yang dipilih:

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

Dengan ROLLUPADDISSUBTOTAL

Penambahan sintaks ROLLUPADDISSUBTOTAL memodifikasi perilaku fungsi SUMMARIZECOLUMNS dengan menambahkan baris rollup/subtotal ke hasil berdasarkan kolom groupBy_columnName. ROLLUPADDISSUBTOTAL hanya dapat digunakan dalam ekspresi SUMMARIZECOLUMNS.

Contoh dengan subtotal tunggal

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]

Mengembalikan tabel berikut,

Kategori Subkategori IsCategorySubtotal IsSubcategorySubtotal Total Qty
Benar Benar 60398
Aksesori Salah Benar 36092
Aksesori Rak Sepeda Salah Salah 328
Sepeda Sepeda Gunung Salah Salah 4970
Pakaian Salah Benar 9101

Contoh dengan beberapa subtotal

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

Penjualan dikelompokkan menurut status, menurut pelanggan, berdasarkan tanggal, dengan subtotal untuk 1. Penjualan menurut negara bagian, berdasarkan tanggal 2. Penjualan menurut Negara Bagian, oleh Pelanggan 3. Diluncurkan pada pelanggan dan tanggal yang mengarah ke penjualan menurut status.

Mengembalikan tabel berikut,

CustomerID IsCustomerSubtotal Provinsi Total Qty Tanggal IsDateSubtotal
A SALAH WA 5 7/10/2014
B SALAH WA 1 7/10/2014
B SALAH WA 2 7/11/2014
C SALAH ATAU 2 7/10/2014
C SALAH ATAU 1 7/11/2014
BENAR WA 6 7/10/2014
BENAR WA 2 7/11/2014
BENAR ATAU 2 7/10/2014
BENAR ATAU 1 7/11/2014
A SALAH WA 5 BENAR
B SALAH WA 3 BENAR
C SALAH ATAU 3 BENAR
BENAR WA 8 BENAR
BENAR ATAU 3 BENAR

Dengan ROLLUPGROUP

Seperti fungsi SUMMARIZE, ROLLUPGROUP dapat digunakan bersama dengan ROLLUPADDISSUBTOTAL untuk menentukan grup/granularitas ringkasan (subtotal) mana yang akan disertakan, mengurangi jumlah baris subtotal yang dikembalikan. ROLLUPGROUP hanya dapat digunakan dalam ekspresi SUMMARIZECOLUMNS atau SUMMARIZE .

Contoh dengan beberapa subtotal

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

Masih dikelompokkan menurut Kota dan Negara Bagian, tetapi digulung bersama-sama saat melaporkan subtotal mengembalikan tabel berikut,

Provinsi ID Pelanggan IsCustomerSubtotal Total Qty Kota IsCityStateSubtotal
WA A SALAH 2 Bellevue SALAH
WA B SALAH 2 Bellevue SALAH
WA A SALAH 3 Jakarta SALAH
WA B SALAH 1 Jakarta SALAH
ATAU C SALAH 3 Portland SALAH
WA BENAR 4 Bellevue SALAH
WA BENAR 4 Jakarta SALAH
ATAU BENAR 3 Portland SALAH
A SALAH 5 SALAH
B SALAH 3 BENAR
C SALAH 3 BENAR
BENAR 11 BENAR

SummarizeColumns Kontekstual

Latar belakang

Hingga Februari 2023, SUMMARIZECOLUMNS tidak mendukung evaluasi dalam transisi konteks sama sekali. Dalam produk yang dirilis sebelum bulan itu, batasan ini membuat SUMMARIZECOLUMNS tidak berguna dalam sebagian besar langkah - tidak mungkin untuk memanggil ukuran SUMMARIZECOLUMNS dalam setiap kasus transisi konteks, termasuk pernyataan SUMMARIZECOLUMNS lainnya.

Mulai Februari 2023, transisi konteks didukung dalam beberapa skenario, tetapi tidak dalam semua kondisi. Kasus yang didukung dan dibatasi adalah sebagai berikut:

Jenis SummarizeColumns Filter Eksternal dengan kolom tunggal Filter Eksternal dengan lebih dari satu kolom Kolom GroupBy Eksternal
SummarizeColumns dengan GroupBy saja OK OK OK
SummarizeColumns dengan Filter/Pengukuran OK KESALAHAN KESALAHAN

Mulai Juni 2024, kami mengaktifkan SummarizeColumns kontekstual yang memungkinkan SummarizeColumns dievaluasi dalam transisi konteks apa pun, SummarizeColumns dalam ukuran sekarang didukung sepenuhnya:

Jenis SummarizeColumns Filter Eksternal dengan kolom tunggal Filter Eksternal dengan lebih dari satu kolom Kolom GroupBy Eksternal
SummarizeColumns dengan GroupBy saja OK OK OK
SummarizeColumns dengan Filter/Pengukuran OK OK OK

Namun, pembaruan ini juga mencakup perubahan pada perilaku SummarizeColumns, yang dapat mengubah hasil ekspresi yang ada:

Semantik SelfValue untuk filter eksternal

Kami memperkenalkan konsep semantik bernama SelfValue, yang mengubah bagaimana filter dari tabel eksternal berinteraksi dengan kolom GroupBy di SummarizeColumns. Perubahan ini melarang filter dari tabel lain untuk memengaruhi kolom GroupBy, meskipun tabel terkait melalui hubungan filter-menurut. Contoh yang mengilustrasikan dampak perubahan ini melibatkan ekspresi berikut:

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

Sebelum pembaruan ini, filter TreatAs akan berlaku untuk operasi GroupBy dalam SummarizeColumns, memanfaatkan hubungan antara 'Product'[Product Key] dan 'Penjualan Penjual'[ProductKey]. Akibatnya, hasil kueri hanya akan menyertakan baris di mana 'Penjualan Penjual'[ProductKey] sama dengan 229. Namun, setelah pembaruan, kolom GroupBy dalam SummarizeColumns tidak akan lagi difilter menurut kolom dari tabel eksternal, bahkan jika ada hubungan di antara mereka. Oleh karena itu, dalam contoh di atas, kolom GroupBy 'Penjualan Penjual'[ProductKey] tidak akan difilter oleh kolom 'Product'[ProductKey]. Akibatnya, kueri akan menyertakan baris di mana 'Penjualan Penjual'[ProductKey] tidak sama dengan 229.

Jika Anda lebih suka mempertahankan perilaku sebelumnya, Anda dapat menulis ulang ekspresi menggunakan Ringkas alih-alih SummarizeColumns, seperti yang ditunjukkan di bawah ini:

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

Ekspresi yang ditulis ulang ini mempertahankan semantik asli di mana operasi GroupBy tidak terpengaruh oleh pembatasan SelfValue yang diperkenalkan oleh pembaruan.

Validasi baris untuk kolom groupby yang sepenuhnya dicakup oleh Treatas

Sebelum pembaruan ini, dalam fungsi SummarizeColumns, jika semua kolom GroupBy dari tabel tertentu sepenuhnya dicakup oleh satu filter Treatas dari tabel yang sama, seperti yang ditunjukkan di bawah ini:

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

Hasil kueri di atas akan mencakup baris apa pun yang ditentukan dalam filter Treatas, terlepas dari apakah itu valid atau tidak. Misalnya, hasilnya adalah tabel baris tunggal ("Amerika Serikat", "Alberta"), bahkan jika tidak ada baris seperti itu dengan [Country] = "Amerika Serikat" dan [State] = "Alberta" ada dalam tabel 'Geography'.

Masalah ini diketahui dan telah ditangani oleh pembaruan. Setelah pembaruan, baris yang tidak valid tersebut akan difilter, dan hanya baris yang valid dari tabel GroupBy yang akan dikembalikan. Oleh karena itu, hasil untuk kueri di atas akan kosong, karena tidak ada baris yang valid yang cocok dengan nilai [Negara] dan [Status] yang ditentukan dalam tabel 'Geografi'.

Melarang Keepfilters/overriddefilter campuran pada tabel/kluster yang sama

Pembaruan terbaru telah memperkenalkan pembatasan sementara yang memicu pesan kesalahan yang menyatakan:

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

Kesalahan ini terjadi ketika kedua filter normal (yang menimpa filter yang ada) dan filter dengan KeepFilters yang ditentukan ada dalam tabel/kluster yang sama. Contohnya:

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

Dalam ekspresi di atas, ada dua filter pada tabel 'Geografi': satu dengan KeepFilters ditentukan dan satu tanpa. Filter ini tumpang tindih dengan filter eksternal pada kolom yang berbeda. Saat ini, konfigurasi ini tidak diizinkan karena secara internal, kedua filter diklusterkan menjadi satu, dan sistem tidak dapat menentukan perilaku penimpaan filter yang benar untuk filter berkluster secara keseluruhan dalam kasus seperti itu.

Harap dicatat bahwa pembatasan ini bersifat sementara. Kami secara aktif mengembangkan solusi untuk menghapus batasan ini dalam pembaruan di masa mendatang. Jika Anda mengalami kesalahan ini, kami menyarankan untuk menyesuaikan filter dalam SummarizeColumns dengan menambahkan atau menghapus KeepFilters seperlunya untuk memastikan perilaku penimpaan yang konsisten pada setiap tabel.

MERINGKAS