SUMMARIZECOLUMNS
Şunlar için geçerlidir: Hesaplanmış sütun Hesaplanan tablo Ölçü Görseli hesaplaması
Bir grup kümesi üzerinde bir özet tablosu döndürür.
Sözdizimi
SUMMARIZECOLUMNS( <groupBy_columnName> [, < groupBy_columnName >]…, [<filterTable>]…[, <name>, <expression>]…)
Parametreler
Süre | Tanım |
---|---|
groupBy_columnName | Döndürülen tabloya ayrı değerlerin eklendiği bir temel tabloya tam sütun başvurusu (Tablo[Sütun]). Her groupBy_columnName sütunu çapraz birleştirilir (farklı tablolar) veya sonraki belirtilen sütunlarla otomatik olarak var olur (aynı tablo). |
filterTable | groupBy_columnName bağımsız değişkenleri olarak belirtilen tüm sütunların filtre bağlamlarına eklenen tablo ifadesi. Filtre tablosunda bulunan değerler, çapraz birleştirme/otomatik varolma işlemi gerçekleştirilmeden önce filtrelemek için kullanılır. |
Adı | Belirtilen sonraki ifade için kullanılacak sütun adını temsil eden bir dize. |
ifade | Tek bir değer (tablo değil) döndüren herhangi bir DAX ifadesi. |
Dönüş değeri
Belirtilen gruplandırma temelinde sağlanan sütunlardan değerlerin birleşimlerini içeren tablo. Yalnızca sağlanan ifadelerden en az birinin boş olmayan bir değer döndüreceği satırlar döndürülen tabloya eklenir. Tüm ifadeler bir satır için BLANK/NULL olarak değerlendirilirse, bu satır döndürülen tabloya dahil değildir.
Açıklamalar
Bu işlev, sonuçlar için herhangi bir sıralama düzenini garanti etmez.
groupBy_columnName parametresinde bir sütun birden çok kez belirtilemez. Örneğin, aşağıdaki formül geçersiz.
SUMMARIZECOLUMNS( Sales[StoreId], Sales[StoreId] )
Bu işlev, hesaplanan sütunlarda veya satır düzeyi güvenlik (RLS) kurallarında kullanıldığında DirectQuery modunda kullanılmak üzere desteklenmez.
Filtre bağlamı
Aşağıdaki sorguyu göz önünde bulundurun:
SUMMARIZECOLUMNS (
'Sales Territory'[Category],
FILTER('Customer', 'Customer' [First Name] = "Alicia")
)
Bu sorguda, ölçü olmadan groupBy sütunları FİlTRE ifadesinden herhangi bir sütun içermez (örneğin, Customer tablosundan). Filtre groupBy sütunlarına uygulanmaz. Satış Bölgesi ve Müşteri tabloları, Bayi satış olgu tablosu aracılığıyla dolaylı olarak ilişkili olabilir. Bunlar doğrudan ilişkili olmadığından, filtre ifadesi bir hayır işlemidir ve groupBy sütunları etkilenmez.
Ancak, bu sorguyla:
SUMMARIZECOLUMNS (
'Sales Territory'[Category], 'Customer' [Education],
FILTER('Customer', 'Customer'[First Name] = "Alicia")
)
groupBy sütunları filtreden etkilenen bir sütun içerir ve bu filtre groupBy sonuçlarına uygulanır.
IGNORE ile
IGNORE söz dizimi, BLANK/NULL değerlendirmesinden belirli ifadeler çıkarılarak SUMMARIZECOLUMNS işlevinin davranışını değiştirmek için kullanılabilir. IGNORE kullanmayan tüm ifadelerin BLANK/NULL döndüreceği satırlar, IGNORE kullanan ifadelerin BLANK/NULL sonucunu verip vermediğinden bağımsız olarak dışlanır. IGNORE yalnızca SUMMARIZECOLUMNS ifadesinde kullanılabilir.
Örnek
SUMMARIZECOLUMNS(
Sales[CustomerId], "Total Qty",
IGNORE( SUM( Sales[Qty] ) ),
"BlankIfTotalQtyIsNot3", IF( SUM( Sales[Qty] )=3, 3 )
)
Bu işlem Sales[CustomerId] sütununu toplar ve verilen gruplandırmadaki tüm müşteriler için bir alt toplam oluşturur. IGNORE olmadan sonuç şu şekildedir:
CustomerId | Toplam Miktar | BlankIfTotalQtyIsNot3 |
---|---|---|
A | 5 | |
K | 3 | 3 |
C | 3 | 3 |
IGNORE ile
CustomerId | Toplam Miktar | BlankIfTotalQtyIsNot3 |
---|---|---|
K | 3 | 3 |
C | 3 | 3 |
Yoksayılan tüm ifadeler,
SUMMARIZECOLUMNS(
Sales[CustomerId], "Blank",
IGNORE( BLANK() ), "BlankIfTotalQtyIsNot5",
IGNORE( IF( SUM( Sales[Qty] )=5, 5 ) )
)
Her iki ifade de bazı satırlar için boş döndürse de, boş döndüren tanımlanamayan ifadeler olmadığından bu ifadeler eklenir.
CustomerId | Boş | BlankIfTotalQtyIsNot5 |
---|---|---|
A | 5 | |
K | ||
C |
NONVISUAL ile
NONVISUAL işlevi SUMMARIZECOLUMNS işlevindeki bir değer filtresini ölçü değerlerini etkilemez, yalnızca groupBy sütunlarına uygulanır olarak işaretler. NONVISUAL yalnızca SUMMARIZECOLUMNS ifadesinde kullanılabilir.
Örnek
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] değerinin tüm yılların toplamı olduğu sonucu verir:
DimDate[CalendarYear] | [Sales] | [Visual Total Sales] |
---|---|---|
2007 | 9,791,060.30 | 29,358,677.22 |
2008 | 9,770,899.74 | 29,358,677.22 |
Buna karşılık, NONVISUAL işlevi olmayan aynı sorgu:
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] öğesinin seçilen iki yıl içindeki toplam değeri olduğu sonucu verir:
DimDate[CalendarYear] | [Sales] | [Visual Total Sales] |
---|---|---|
2007 | 9,791,060.30 | 19,561,960.04 |
2008 | 9,770,899.74 | 19,561,960.04 |
ROLLUPADDISSUBTOTAL ile
ROLLUPADDISSUBTOTAL söz diziminin eklenmesi, groupBy_columnName sütunlarını temel alarak sonucta toplama/alt toplam satırları ekleyerek SUMMARIZECOLUMNS işlevinin davranışını değiştirir. ROLLUPADDISSUBTOTAL yalnızca SUMMARIZECOLUMNS ifadesinde kullanılabilir.
Tek alt toplamlı örnek
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]
Aşağıdaki tabloyu döndürür,
Kategori | Alt kategori | IsCategorySubtotal | IsSubcategorySubtotal | Toplam Miktar |
---|---|---|---|---|
True | True | 60398 | ||
Aksesuarlar | Yanlış | Doğru | 36092 | |
Aksesuarlar | Bisiklet Rafları | False | False | 328 |
Bisikletler | Dağ Bisikletleri | False | False | 4970 |
Giysi | Yanlış | Doğru | 9101 |
Birden çok alt toplam içeren örnek
SUMMARIZECOLUMNS (
Regions[State], ROLLUPADDISSUBTOTAL ( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL ( Sales[Date], "IsDateSubtotal"), "Total Qty", SUM( Sales[Qty] )
)
Satışlar duruma göre, müşteriye göre, tarihe göre ve 1 için alt toplamlarla gruplandırılır. Eyalete göre satışlar, 2. tarihe göre. Eyalete Göre Satışlar, Müşteri 3. Hem müşteriye hem de tarihe göre eyalete göre satışa yol açan bir şekilde toplanmış.
Aşağıdaki tabloyu döndürür,
CustomerID | IsCustomerSubtotal | State | Toplam Miktar | Tarih | IsDateSubtotal |
---|---|---|---|---|---|
A | FALSE | WA | 5 | 10.07.2014 | |
K | FALSE | WA | 1 | 10.07.2014 | |
K | FALSE | WA | 2 | 7/11/2014 | |
C | FALSE | VEYA | 2 | 10.07.2014 | |
C | FALSE | VEYA | 1 | 7/11/2014 | |
TRUE | WA | 6 | 10.07.2014 | ||
TRUE | WA | 2 | 7/11/2014 | ||
TRUE | VEYA | 2 | 10.07.2014 | ||
TRUE | VEYA | 1 | 7/11/2014 | ||
A | FALSE | WA | 5 | TRUE | |
K | FALSE | WA | 3 | TRUE | |
C | FALSE | VEYA | 3 | TRUE | |
TRUE | WA | 8 | TRUE | ||
TRUE | VEYA | 3 | TRUE |
ROLLUPGROUP ile
SUMMARIZE işlevinde olduğu gibi ROLLUPGROUP da ROLLUPADDISSUBTOTAL ile birlikte kullanılarak hangi özet gruplarının/taneciklerin (alt toplamlar) dahil edilmesi gerektiğini belirterek döndürülen alt toplam satırlarının sayısı azaltılabilir. ROLLUPGROUP yalnızca SUMMARIZECOLUMNS veya SUMMARIZE ifadesinde kullanılabilir.
Birden çok alt toplam içeren örnek
SUMMARIZECOLUMNS(
ROLLUPADDISSUBTOTAL( Sales[CustomerId], "IsCustomerSubtotal" ),
ROLLUPADDISSUBTOTAL(ROLLUPGROUP(Regions[City], Regions[State]), "IsCityStateSubtotal"),"Total Qty", SUM( Sales[Qty] )
)
Yine City ve State'e göre gruplandırılır, ancak bir alt toplam bildirilirken bir araya getirildiğinde aşağıdaki tablo döndürülüyor:
State | CustomerId | IsCustomerSubtotal | Toplam Miktar | City | IsCityStateSubtotal |
---|---|---|---|---|---|
WA | A | FALSE | 2 | Bellevue | FALSE |
WA | K | FALSE | 2 | Bellevue | FALSE |
WA | A | FALSE | 3 | Çankaya | FALSE |
WA | K | FALSE | 1 | Çankaya | FALSE |
VEYA | C | FALSE | 3 | Portland | FALSE |
WA | TRUE | 4 | Bellevue | FALSE | |
WA | TRUE | 4 | Çankaya | FALSE | |
VEYA | TRUE | 3 | Portland | FALSE | |
A | FALSE | 5 | FALSE | ||
K | FALSE | 3 | TRUE | ||
C | FALSE | 3 | TRUE | ||
TRUE | 11 | TRUE |
Bağlamsal SummarizeColumns
Background
Şubat 2023'e kadar SUMMARIZECOLUMNS, bağlam geçişi içinde değerlendirmeyi hiç desteklemedi. O aydan önce yayımlanan ürünlerde bu sınırlama SUMMARIZECOLUMNS'nin ölçülerin çoğunda yararlı olmamasını sağladı. Diğer SUMMARIZECOLUMNS deyimleri de dahil olmak üzere bağlam geçişinin herhangi bir durumunda SUMMARIZECOLUMNS ölçüsünün çağrılması mümkün değildi.
Şubat 2023'ten itibaren bağlam geçişi birkaç senaryoda desteklendi ancak tüm koşullarda desteklenmedi. Desteklenen ve kısıtlanmış servis talepleri şunlardır:
SummarizeColumns Türü | Tek sütunlu Dış Filtre | Birden fazla sütuna sahip Dış Filtre | Dış GroupBy Sütunları |
---|---|---|---|
Yalnızca GroupBy ile SummarizeColumns | Tamam | Tamam | Tamam |
Filtreler/Ölçüler ile SummarizeColumns | Tamam | HATA | HATA |
Haziran 2024'ten itibaren, SummarizeColumn'ların herhangi bir bağlam geçişinde değerlendirilmesini sağlayan bağlamsal SummarizeColumn'ları etkinleştiriyoruz. Ölçüdeki SummarizeColumn'lar artık tam olarak desteklenmektedir:
SummarizeColumns Türü | Tek sütunlu Dış Filtre | Birden fazla sütuna sahip Dış Filtre | Dış GroupBy Sütunları |
---|---|---|---|
Yalnızca GroupBy ile SummarizeColumns | Tamam | Tamam | Tamam |
Filtreler/Ölçüler ile SummarizeColumns | Tamam | Tamam | Tamam |
Ancak bu güncelleştirme, SummarizeColumns davranışında yapılan değişiklikleri de içerir ve bu da var olan ifadelerin sonuçlarını değiştirebilir:
Dış filtreler için SelfValue semantiği
Dış tablolardaki filtrelerin SummarizeColumns içindeki GroupBy sütunlarıyla etkileşim kurma şeklini değiştiren SelfValue adlı bir anlam kavramı sunuyoruz. Bu değişiklik, farklı bir tablodaki filtrelerin GroupBy sütunlarını etkilemesine izin vermese de, tablolar bir filtreye göre ilişki aracılığıyla ilişkilendirilse bile. Bu değişikliğin etkisini gösteren bir örnek aşağıdaki ifadeyi içerir:
CalculateTable(
SummarizeColumns(
'Reseller Sales'[ResellerKey],
'Reseller Sales'[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Bu güncelleştirmeden önce TreatAs filtresi SummarizeColumns içindeki GroupBy işlemine uygulanır ve 'Product'[Product Key] ile 'Reseller Sales'[ProductKey] arasındaki ilişkiden yararlanılabilir. Sonuç olarak, sorgu sonuçları yalnızca 'Reseller Sales'[ProductKey] değerinin 229'a eşit olduğu satırları içerir. Ancak güncelleştirmeden sonra SummarizeColumns içindeki GroupBy sütunları, aralarında bir ilişki olsa bile dış tablolardaki sütunlara göre filtrelenmez. Bu nedenle, yukarıdaki örnekte , 'Reseller Sales'[ProductKey] GroupBy sütunu 'Product'[ProductKey] sütununa göre filtrelenmez. Sonuç olarak sorgu, 'Reseller Sales'[ProductKey] değerinin 229'a eşit olmadığı satırları içerir.
Önceki davranışı korumayı tercih ederseniz, aşağıda gösterildiği gibi SummarizeColumns yerine Summarize Işlevini kullanarak ifadeyi yeniden yazabilirsiniz:
CalculateTable(
SUMMARIZE(
'Reseller Sales',
[ResellerKey],
[ProductKey]
),
Treatas({(229)}, 'Product'[Product Key])
)
Bu yeniden yazılan ifade, GroupBy işleminin güncelleştirme tarafından sunulan SelfValue kısıtlaması tarafından etkilenmediği özgün semantiği korur.
Treatas tarafından tamamen kapsanan groupby sütunları için satır doğrulama
Bu güncelleştirmeden önce, bir SummarizeColumns işlevinde, aşağıda gösterildiği gibi, belirli bir tablodaki tüm GroupBy sütunları aynı tablodaki tek bir Treatas filtresi tarafından tamamen kapsandıysa:
SummarizeColumns(
Geography[Country],
Geography[State],
Treatas(
{("United States", "Alberta")},
Geography[Country],
Geography[State]
)
)
Yukarıdaki sorgunun sonucu, Geçerli olup olmadıklarına bakılmaksızın Treatas filtresinde belirtilen satırları içerir. Örneğin, "Geography" tablosunda [Country] = "Birleşik Devletler" ve [State] = "Alberta" gibi bir satır olmasa bile sonuç tek satırlı bir tablo ("Birleşik Devletler", "Alberta") olacaktır.
Bu sorun biliniyordu ve güncelleştirme tarafından giderildi. Güncelleştirmeden sonra, bu tür geçersiz satırlar filtrelenir ve yalnızca GroupBy tablosundaki geçerli satırlar döndürülür. Bu nedenle, 'Geography' tablosunda belirtilen [Country] ve [State] değerleriyle eşleşen geçerli satır olmadığından yukarıdaki sorgunun sonucu boş olacaktır.
Aynı tablo/kümede karma Keepfilters/overriddefilters izin verme
Son güncelleştirme, aşağıdakileri belirten bir hata iletisi tetikleyen geçici bir kısıtlama getirmiştir:
"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."
Bu hata, hem normal filtreler (var olan filtreleri geçersiz kılan) hem de KeepFilters belirtilen filtreler aynı tablo/küme içinde mevcut olduğunda oluşur. Örneğin:
Evaluate CalculateTable(
SummarizeColumns(
Product[Color],
KeepFilters(
TreatAs(
{( "Washington")}
, Geography[State]
)
),
TreatAs(
{("United States"), ("Canada")}
, Geography[Country]
)
)
,TreatAs({("Alberta")}, Geography[State])
,TreatAs({("Canada")}, Geography[Country])
)
Yukarıdaki ifadede, 'Geography' tablosunda iki filtre vardır: biri KeepFilters belirtilmiş ve biri belirtilmemiş. Bu filtreler farklı sütunlardaki dış filtrelerle çakışıyor. Şu anda bu yapılandırmaya izin verilmiyor çünkü dahili olarak iki filtre tek bir filtrede kümeleniyor ve sistem bu gibi durumlarda kümelenmiş filtre için doğru filtre geçersiz kılma davranışını belirleyemiyor.
Bu kısıtlamanın geçici olduğunu lütfen unutmayın. Gelecek güncelleştirmelerde bu sınırlamayı kaldırmak için etkin bir şekilde çözümler geliştiriyoruz. Bu hatayla karşılaşırsanız, her tabloda tutarlı geçersiz kılma davranışı sağlamak için KeepFilters'ı ekleyerek veya kaldırarak SummarizeColumns içindeki filtreleri ayarlamanızı öneririz.