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.