Aracılığıyla paylaş


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 AddColumns veya SelectColumns kullanarak ifadeyi yeniden yazabilirsiniz:

CalculateTable(
    Filter(
        SelectColumns(
            'Reseller Sales',
            "ResellerKey", 
            [ResellerKey],
            "ProductKey",
            [ProductKey]
        ),
        And(Not IsBlank([ResellerKey]),  Not IsBlank([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.

ÖZETLE