Aracılığıyla paylaş


Hesaplama grupları

Şunlar için geçerlidir: SQL Server 2019 ve üzeri Analysis Services Azure Analysis Services Fabric/Power BI Premium

Hesaplama grupları, ortak ölçü ifadelerinihesaplama öğeleri olarak gruplandırarak yedekli ölçü sayısını önemli ölçüde azaltabilir. Hesaplama grupları tablosal modellerde 1500 ve daha yüksek uyumluluk düzeyinde desteklenir.

Fayda -ları

Hesaplama grupları, karmaşık modellerde aynı hesaplamaları kullanarak yedekli ölçülerin yaygınlaşması sorununu giderir. Bu durum en yaygın olarak akıllı zaman gösterimi hesaplamalarında kullanılır. Örneğin, bir satış analisti satış toplamlarını ve siparişleri ay-bugüne (MTD), üç aylık dönem (QTD), yıl-tarih (YTD), önceki yıla ait yıllık siparişler (PY) vb. görüntülemek istiyor. Veri modelleyicinin her hesaplama için ayrı ölçüler oluşturması gerekir ve bu da onlarca ölçüye yol açabilir. Kullanıcı için bu, aynı sayıda ölçüye göre sıralama yapmak ve bunları kendi raporuna tek tek uygulamak zorunda kalmak anlamına gelebilir.

İlk olarak hesaplama gruplarının Power BI gibi bir raporlama aracında kullanıcılara nasıl göründüğüne bakalım. Ardından hesaplama grubunu oluşturan özelliklere ve bunların bir modelde nasıl oluşturulduğuna göz atacağız.

Hesaplama grupları raporlama istemcilerinde tek sütunlu bir tablo olarak gösterilir. Sütun tipik bir sütun veya boyuta benzemez, bunun yerine bir veya daha fazla yeniden kullanılabilir hesaplamayı veya görselleştirmenin Değerler filtresine eklenmiş olan herhangi bir ölçüye uygulanabilen hesaplama öğelerini temsil eder.

Aşağıdaki animasyonda, bir kullanıcı 2012 ve 2013 yıllarının satış verilerini analiz ediyor. Bir hesaplama grubu uygulamadan önce , Sales ortak temel ölçüsü her ay için toplam satışların toplamını hesaplar. Daha sonra kullanıcı, ayın bugüne kadarki satış toplamlarını, üç aylık dönemden bugüne, yıldan bugüne vb. satış toplamlarını almak için akıllı zaman gösterimi hesaplamaları uygulamak istiyor. Hesaplama grupları olmadan, kullanıcının zaman zeka ölçümlerini tek tek seçmesi gerekir.

Zaman Akıllılığı adlı bu hesaplama grubunda, kullanıcı Zaman Hesabı öğesini Sütunlar filtreleme alanına sürüklediğinde, her bir hesaplama öğesi ayrı bir sütun olarak görünür. Her satırın değerleri, Satış temel ölçüsünden hesaplanır.

Power BI'da uygulanan hesaplama grubu

Hesaplama grupları açık DAX ölçüleriyle çalışır. Bu örnekte Sales , modelde önceden oluşturulmuş açık bir ölçüdür. Hesaplama grupları örtük DAX ölçüleriyle çalışmaz. Örneğin, Power BI'da örtük ölçüler, kullanıcı belirli bir ölçü oluşturmadan toplanan değerleri görüntülemek için sütunları görsellere sürüklediğinde oluşturulur. Şu anda Power BI, satır içi DAX hesaplamaları olarak yazılmış örtük ölçüler için DAX oluşturur; yani örtük ölçüler hesaplama gruplarıyla çalışamaz. Tablosal Nesne Modeli'nde (TOM) görünen yeni model özelliği discourageImplicitMeasures kullanıma sunulmuştur. Şu anda hesaplama grupları oluşturmak için bu özelliğin true olarak ayarlanması gerekir. True olarak ayarlandığında, Live Connect modunda Power BI Desktop örtük ölçülerin oluşturulmasını devre dışı bırakır.

Hesaplama grupları, Çok Boyutlu Veri İfadeleri (MDX) sorgularını da destekler. Bu, MDX kullanarak tablosal veri modellerini sorgulayan Microsoft Excel kullanıcılarının çalışma sayfası PivotTable'larındaki ve grafiklerindeki hesaplama gruplarından tam olarak yararlanabileceği anlamına gelir.

Nasıl çalışırlar?

Hesaplama gruplarının kullanıcılara nasıl fayda sağladığını gördüğünüze göre, gösterilen Akıllı Zaman Gösterimi hesaplama grubu örneğinin nasıl oluşturulduğuna bakalım.

Ayrıntılara geçmeden önce, hesaplama gruplarına özel olarak bazı yeni DAX işlevlerini tanıtalım:

SELECTEDMEASURE - Şu anda bağlam içinde olan ölçüye başvurmak üzere hesaplama öğeleri için ifadeler tarafından kullanılır. Bu örnekte Satış ölçüsü.

SELECTEDMEASURENAME - Bağlam içindeki ölçüyü ada göre belirlemek üzere hesaplama öğeleri için ifadeler tarafından kullanılır.

ISSELECTEDMEASURE - Bağlam içindeki ölçünün ölçü listesinde belirtildiğini belirlemek üzere hesaplama öğeleri için ifadeler tarafından kullanılır.

SELECTEDMEASUREFORMATSTRING - Hesaplama öğeleri tarafından, bağlamdaki ölçünün biçim dizesini elde etmek için kullanılan ifadelerdir.

Akıllı Zaman Gösterimi örneği

Tablo adı - Akıllı Zaman Gösterimi
Sütun adı - Zaman Hesaplaması
Öncelik - 20

Zaman Zekası hesaplama öğeleri

Geçerli

SELECTEDMEASURE()

MTD

CALCULATE(SELECTEDMEASURE(), DATESMTD(DimDate[Date]))

QTD

CALCULATE(SELECTEDMEASURE(), DATESQTD(DimDate[Date]))

YTD

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

PY

CALCULATE(SELECTEDMEASURE(), SAMEPERIODLASTYEAR(DimDate[Date]))

PY MTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "MTD"
)

PY QTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "QTD"
)

PY YTD

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

YOY

SELECTEDMEASURE() -
CALCULATE(
    SELECTEDMEASURE(),
    'Time Intelligence'[Time Calculation] = "PY"
)

YOY%

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

Bu hesaplama grubunu test etmek için aşağıdaki DAX sorgusunu yürütür. Not: MTD, YOY ve YOY% bu sorgu örneğinden atlanmıştır.

Zaman Zekası sorgusu

EVALUATE
CALCULATETABLE (
    SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Current", CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "Current" ),
        "QTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "QTD" ),
        "YTD",     CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "YTD" ),
        "PY",      CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY" ),
        "PY QTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY QTD" ),
        "PY YTD",  CALCULATE ( [Sales], 'Time Intelligence'[Time Calculation] = "PY YTD" )
    ),
    DimDate[CalendarYear] IN { 2012, 2013 }
)

Zaman Zekası sorgu sonucu

İade tablosu, uygulanan her hesaplama öğesi için hesaplamaları gösterir. Örneğin, bkz. Mart 2012 için QTD, Ocak, Şubat ve Mart 2012'nin toplamıdır.

Zaman zekası sorgusu sonucu

Dinamik biçim dizeleri

Hesaplama gruplarına sahip dinamik biçim dizeleri, biçim dizelerinin dize döndürmeye zorlamadan ölçülere koşullu uygulanmasını sağlar.

Tablolu modeller, DAX'ın FORMAT işlevini kullanarak ölçülerin dinamik biçimlendirmesini destekler. Ancak FORMAT işlevinin bir dize döndürme dezavantajı vardır ve aksi takdirde sayısal olabilecek ölçüleri dize olarak döndürülmeye zorlar. Bunun, grafikler gibi sayısal değerlere bağlı olarak Power BI görsellerinin çoğuyla çalışmaması gibi bazı sınırlamaları olabilir.

Power BI'da ölçüler için dinamik biçim dizeleri, biçim dizelerinin bir dize döndürmeye zorlamadan ve hesaplama grupları kullanılmadan belirli bir ölçüye koşullu uygulanmasına da olanak sağlar. Daha fazla bilgi edinmek için bkz. Ölçüler için dinamik biçim dizeleri.

Akıllı zaman gösterimi için dinamik biçim dizeleri

Yukarıda gösterilen Akıllı Zaman Gösterimi örneğine bakacak olursak, YOY% dışındaki tüm hesaplama öğelerinin bağlam içinde geçerli ölçünün biçimini kullanması gerekir. Örneğin, Satış temeli ölçüsünde hesaplanan YTD para birimi olmalıdır. Bu, Siparişler temel ölçüsü gibi bir şey için bir hesaplama grubu olsaydı, biçim sayısal olurdu. Bununla birlikte, YOY%, temel ölçünün biçiminden bağımsız olarak bir yüzde olmalıdır.

YOY%için biçim dizesi ifade özelliğini 0,00%;-0,00%;0,00%olarak ayarlayarak biçim dizesini geçersiz kılabiliriz. Dize ifade özelliklerini biçimlendirme hakkında daha fazla bilgi edinmek için bkz. MDX Hücre Özellikleri - FORMAT STRING İçeriği.

Power BI'daki bu matris görselinde Sales Current/YOY ve Orders Current/YOY'nin ilgili temel ölçü biçimi dizelerini korumuş olduğunu görürsünüz. Satış YOY% ve Siparişler YOY%, ancak yüzde biçimini kullanmak için biçim dizesini geçersiz kılar.

Matris görselinde akıllı zaman gösterimi

Para birimi dönüştürme için dinamik biçim dizeleri

Dinamik biçim dizeleri kolay para birimi dönüştürme sağlar. Aşağıdaki Adventure Works veri modelini göz önünde bulundurun. Dönüştürme türleri tarafından tanımlanan bire çok para birimi dönüştürme için modellenmiştir.

Tablosal modelde para birimi oranı

DimCurrency tablosuna bir FormatString sütunu eklenir ve ilgili para birimleri için biçim dizeleriyle doldurulur.

Dize sütununu biçimlendirme

Bu örnekte aşağıdaki hesaplama grubu şöyle tanımlanır:

Para Birimi Dönüştürme örneği

Tablo adı - Para Birimi Dönüştürme
Sütun adı - Dönüştürme Hesaplaması
Öncelik - 5

Para Birimi Dönüştürme için hesaplama öğeleri

Dönüştürme Yok

SELECTEDMEASURE()

Dönüştürülen Para Birimi

IF(
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE( DimCurrency[CurrencyName], "US Dollar" ) = "US Dollar",
    SELECTEDMEASURE(),
    SUMX(
        VALUES(DimDate[Date]),
        CALCULATE( DIVIDE( SELECTEDMEASURE(), MAX(FactCurrencyRate[EndOfDayRate]) ) )
    )
)

Dize ifadesini biçimlendirme

SELECTEDVALUE(
    DimCurrency[FormatString],
    SELECTEDMEASUREFORMATSTRING()
)

Uyarı

Hesaplama grupları için seçim ifadeleri, hesaplama gruplarına otomatik para birimi dönüştürme uygulamak için kullanılabilir ve iki ayrı hesaplama öğesi olması gereksinimini ortadan kaldırır.

Biçim dizesi ifadesi bir skaler dize döndürmelidir. Filtre bağlamında birden çok para birimi varsa temel ölçü biçimi dizesine geri dönmek için yeni SELECTEDMEASUREFORMATSTRING işlevini kullanır.

Aşağıdaki animasyonda, bir rapordaki Satış ölçüsünün dinamik biçimli para birimi dönüştürmesi gösterilmektedir.

Para birimi dönüştürme dinamik biçim dizesi uygulandı

Seçim ifadeleri

Seçim ifadeleri, bir hesaplama grubu için tanımlanan isteğe bağlı özelliklerdir. İki tür seçim ifadesi vardır:

  • multipleOrEmptySelectionExpression. Bu seçim ifadesi şu durumlarda uygulanır:
    • birden çok hesaplama öğesi seçildi,
    • mevcut olmayan bir hesaplama öğesi seçildi veya
    • çakışan bir seçim yapıldı.
  • noSelectionExpression. Bu seçim ifadesi, hesaplama grubu filtrelenmediğinde uygulanır.

Bu seçim ifadelerinin her ikisi de formatStringDefinition dinamik biçim dizesi ifadesine sahiptir.

Özetle, bir hesaplama grubunda, örneğin TMDL kullanılarak aşağıdakiler tanımlanabilir:

...
table Scenarios
	calculationGroup
		...
    multipleOrEmptySelectionExpression = <expression>
        formatStringDefinition = <format string>
    noSelectionExpression= <expression>
        formatStringDefinition = <format string>
...

Uyarı

Bu ifadeler belirtilirse yalnızca belirtilen belirli durumlar için uygulanır. Tek bir hesaplama öğesi seçimleri bu ifadelerden etkilenmez.

Bu ifadelere ve belirtilmezse varsayılan davranışlarına genel bir bakış aşağıdadır:

Seçim türü Seçim ifadesi tanımlanmadı (varsayılan) Tanımlanan seçim ifadesi
Tek seçim Seçim uygulandı Seçim uygulandı
Birden çok seçim Hesaplama grubu filtrelenmedi Değerlendirme sonucunu döndür: multipleOrEmptySelectionExpression
Boş seçim Hesaplama grubu filtrelenmedi Değerlendirme sonucunu döndür: multipleOrEmptySelectionExpression
Seçim yok Hesaplama grubu filtrelenmedi noSelectionExpression'ın değerlendirilme sonucunu döndür

Uyarı

Seçim ifadeleri tanımlanmadığında hesaplama grubunun döndürdüğü sonuçları daha da etkilemek için modelin selectionExpressionBehavior ayarını kullanın.

SelectionExpressionBehavior model ayarı

Modellerde, modeldeki hesaplama gruplarının nasıl davrandığını daha fazla denetlemeye olanak tanıyan bir selectionExpressionBehavior ayarı vardır. Bu ayar aşağıdaki üç değeri kabul eder:

  • Otomatik. Bu varsayılan değerdir ve görsel olmayan değerle aynıdır. Bu, mevcut modellerinizin davranışında değişiklik yapmamasını sağlar. Otomatik olarak ayarlanmış gelecekteki uyumluluk düzeyinin üzerindeki modeller, bunun yerine görsel kullanılacaktır. O zaman bir duyuru yapılacaktır.
  • Görme engelli. Hesaplama grubu bir multipleOrEmptySelection ifadesi tanımlamıyorsa, hesaplama grubu döndürür SELECTEDMEASURE() ve hesaplama grubuna göre gruplandırılırken alt toplam değerleri gizlenir.
  • Görsel. Hesaplama grubu multipleOrEmptySelection ifadesini tanımlamıyorsa, hesaplama grubu döndürür BLANK(). Hesaplama grubuna göre gruplandırılırken alt toplam değerleri, seçilen ölçü hesaplama grubu bağlamında değerlendirilerek belirlenir.

Modelinizde özelliğini ayarlamak için TMDL kullanın:

createOrReplace
    model Model
        ...
        selectionExpressionBehavior: <automatic|nonvisual|visual>
...

Çoklu veya Boş seçim

Aynı hesaplama grubunda birden çok seçim yapılırsa, hesaplama grubu tanımlanırsa multipleOrEmptySelectionExpression sonucunu değerlendirir ve döndürür. Bu ifade tanımlanmamışsa, modelin selectionExpressionBehavior ayarı otomatik veya görsel olmayan olarak ayarlandıysa hesaplama grubu aşağıdaki sonucu döndürür:

SELECTEDMEASURE()

Modelin selectionExpressionBehavior ayarıgörsel olarak ayarlanırsa hesaplama grubu şunları döndürür:

BLANK()

Örnek olarak, aşağıdaki gibi yapılandırılmış multipleOrEmptySelectionExpression içeren MyCalcGroup adlı bir hesaplama grubuna göz atalım:

IF (
ISFILTERED ( 'MyCalcGroup' ),
    "Filters: " 
         & CONCATENATEX ( 
  	            FILTERS ( 'MyCalcGroup'[Name] ),
            'MyCalcGroup'[Name], 
            ", "
     	   )
)

Şimdi hesaplama grubunda aşağıdaki seçimi düşünün:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
    )
}

Burada hesaplama grubunda "öğe1" ve "öğe2" adlı iki öğeyi seçiyoruz. Bu bir çoklu seçimdir ve bu nedenle multipleOrEmptySelectionExpression değerlendirilir ve şu sonucu döndürür: "Filtreler: öğe1, öğe2".

Ardından, hesaplama grubunda aşağıdaki seçimi yapın:

EVALUATE
{
    CALCULATE (
        [MyMeasure],
        'MyCalcGroup'[Name] = "item4" -- item4 does not exists
    )
}

Bu, bu hesaplama grubunda "item4" olmadığından boş bir seçim örneğidir. Bu nedenle, multipleOrEmptySelectionExpression değerlendirilir ve şu sonucu döndürür: "Filtreler: ".

Seçim yok

Bir hesaplama grubunun filtrelenmemiş olması durumunda, hesaplama grubundaki noSelectionExpression uygulanır. Bu çoğunlukla kullanıcının eylem gerçekleştirmesine gerek kalmadan varsayılan eylemleri gerçekleştirmek ve kullanıcıya varsayılan eylemi geçersiz kılmak için esneklik sağlamaya devam etmek için kullanılır. Örneğin, ABD Doları'nı merkez para birimi olarak kullanan otomatik para birimi dönüşümüne bakalım.

Aşağıdaki noSelectionExpression ile bir hesaplama grubu ayarlayabiliriz:

IF (
    //Check one currency in context & not US Dollar, which is the pivot currency:
    SELECTEDVALUE (
        DimCurrency[CurrencyName],
        "US Dollar"
    ) = "US Dollar",
    SELECTEDMEASURE (),
    SUMX (
        VALUES ( DimDate[DateKey] ),
        CALCULATE (
            DIVIDE ( SELECTEDMEASURE (), MAX ( FactCurrencyRate[EndOfDayRate] ) )
        )
    )
)

Ayrıca bu ifade için bir formatStringDefinition ayarlayacağız:

SELECTEDVALUE(
  DimCurrency[FormatString],
  SELECTEDMEASUREFORMATSTRING()
)

Artık hiçbir para birimi seçilmezse, tüm para birimleri gerektiğinde otomatik olarak pivot para birimine (ABD Doları) dönüştürülür. Buna ek olarak, noSelectionExpression olmadan yapmanız gereken hesaplama öğelerini değiştirmek zorunda kalmadan bu para birimine dönüştürmek için başka bir para birimi seçebilirsiniz.

Öncelik

Öncelik, hesaplama grubu için tanımlanan bir özelliktir. Hesaplama öğesinde SELECTEDMEASURE() kullanılırken hesaplama gruplarının temel ölçüyle birleştirildiği sırayı belirtir.

Öncelik örneği

Basit bir örneğe bakalım. Bu model, belirtilen değeri 10 olan bir ölçüye ve her biri tek bir hesaplama öğesine sahip iki hesaplama grubuna sahiptir. Ölçüye her iki hesaplama grubunun hesaplama öğelerini de uygulayacağız. Bu şekilde ayarlarız:

'Measure group'[Measure] = 10

İlk hesaplama grubu 'Calc Group 1 (Precedence 100)' ve hesaplama öğesi 'Calc item (Plus 2)''dir.

'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2

İkinci hesaplama grubu: 'Calc Group 2 (Precedence 200)' ve hesaplama öğesi: 'Calc item (Times 2)'

'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2

1. hesaplama grubunun öncelik değerinin 100, hesaplama grubu 2'nin ise 200 öncelik değerine sahip olduğunu görebilirsiniz.

SQL Server Management Studio 'yu (SSMS) veya xmla okuma-yazma özelliklerine sahip bir dış aracı (açık kaynak Tablo düzenleyicisi gibi) kullanarak, hesaplama grupları oluşturmak ve öncelik değerlerini ayarlamak için XMLA betiklerini kullanabilirsiniz. Buraya şunları ekleyeceğiz "Calc group 1 (Precedence 100)":

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 1 (Precedence 100)"
    },
    "table": {
      "name": "Calc group 1 (Precedence 100)",
      "calculationGroup": {
        "precedence": 100,
        "calculationItems": [
          {
            "name": "Calc item (Plus 2)",
            "expression": "SELECTEDMEASURE() + 2",
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 1 (Precedence 100)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

Ve bu betik şunu ekler "Calc group 2 (Precedence 200)":

{
  "createOrReplace": {
    "object": {
      "database": "CHANGE TO YOUR DATASET NAME",
      "table": "Calc group 2 (Precedence 200)"
    },
    "table": {
      "name": "Calc group 2 (Precedence 200)",
      "calculationGroup": {
        "precedence": 200,
        "calculationItems": [
          {
            "name": "Calc item (Times 2)",
            "expression": "SELECTEDMEASURE() * 2"
          }
        ]
      },
      "columns": [
        {
          "name": "Calc group 2 (Precedence 200)",
          "dataType": "string",
          "sourceColumn": "Name",
          "sortByColumn": "Ordinal",
          "summarizeBy": "none",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        },
        {
          "name": "Ordinal",
          "dataType": "int64",
          "isHidden": true,
          "sourceColumn": "Ordinal",
          "summarizeBy": "sum",
          "annotations": [
            {
              "name": "SummarizationSetBy",
              "value": "Automatic"
            }
          ]
        }
      ],
      "partitions": [
        {
          "name": "Partition",
          "mode": "import",
          "source": {
            "type": "calculationGroup"
          }
        }
      ]
    }
  }
}

Power BI Desktop'ta, rapor görünümündeki hesaplama gruplarının her biri için ölçüyü ve dilimleyiciyi gösteren bir kart görselimiz vardır:

Ölçü grubu ayrı ifadeler.

Her iki dilimleyici de seçildiğinde DAX ifadelerini birleştirmemiz gerekir. Bunu yapmak için en yüksek öncelik hesaplama öğesi olan 200 ile başlayacağız ve SELECTEDMEASURE() bağımsız değişkenini sonraki en yüksek 100 ile değiştireceğiz.

Bu nedenle, en yüksek öncelik hesaplama öğesi DAX ifademiz:

SELECTEDMEASURE() * 2 

İkinci en yüksek öncelik hesaplama öğesi DAX ifademiz:

SELECTEDMEASURE() + 2 

Şimdi en yüksek öncelik hesaplama öğesinin SELECTEDMEASURE() bölümü aşağıdaki gibi sonraki en yüksek öncelik hesaplama öğesiyle değiştirilerek birleştirilir:

( SELECTEDMEASURE() + 2 ) * 2

Daha fazla hesaplama öğesi varsa, temel alınan ölçüye gelene kadar devam ederiz. Bu modelde yalnızca iki hesaplama grubu olduğundan SELECTEDMEASURE() değerini ölçünün kendisiyle değiştiriyoruz:

( ( [Measure] ) + 2 ) * 2

bizim Measure = 10gibi, bu da aşağıdakiyle aynıdır:

( ( 10 ) + 2 ) * 2

SELECTEDMEASURE() bağımsız değişken kalmadığında, toplam DAX ifadesi değerlendirilir.

( ( 10 ) + 2 ) * 2 = 24

Power BI Desktop'ta her iki hesaplama grubu da bir dilimleyiciyle uygulandığında ölçü çıkışı şöyle görünür:

Ölçü grubu birleşik ifadeleri.

Ancak, kombinasyon iç içe yerleştirilmiştir, bu yüzden çıkış burada gördüğünüz gibi 10 + 2 * 2 = 14 olmayacaktır.

Ölçü grubu iç içe ifadeleri.

Basit dönüştürmeler için değerlendirme düşükten daha yüksek önceliğe kadardır. Örneğin, 10'da 2 eklenmiştir, ardından 2 ile çarpılır. DAX'ta, iç ifadelere filtre veya bağlam değişiklikleri uygulayan CALCULATE gibi işlevler vardır. Bu durumda, yüksek öncelik daha düşük bir öncelik ifadesini değiştirir.

Öncelik ayrıca her ölçü için birleşik DAX ifadesine hangi dinamik biçim dizesinin uygulandığını da belirler. En yüksek öncelik hesaplama grubu dinamik biçim dizesi uygulanan tek dizedir. Ölçünün kendisi dinamik biçim dizesine sahipse modeldeki herhangi bir hesaplama grubu için daha düşük bir öncelik olarak kabul edilir.

Ortalamalarla öncelik örneği

Şimdi bu makalenin önceki bölümlerinde açıklanan akıllı zaman gösterimi örneğinde gösterildiği gibi aynı modeli kullanan başka bir örneğe bakalım. Ancak bu kez bir Ortalamalar hesaplama grubu da ekleyelim. Averages hesaplama grubu, tarih filtresi bağlamını değiştirmeden, geleneksel zaman zekasından bağımsız olarak, sadece bu bağlam içinde ortalama hesaplamalar uygulayan ortalama hesaplamalar içerir.

Bu örnekte, günlük ortalama hesaplama tanımlanmıştır. Günlük ortalama varil petrol gibi hesaplamalar, petrol ve gaz uygulamalarında yaygındır. Diğer yaygın iş örnekleri arasında perakende satış ortalaması yer alır.

Bu tür hesaplamalar akıllı zaman gösterimi hesaplamalarından bağımsız olarak hesaplanırken, bunları birleştirme gereksinimi de olabilir. Örneğin, bir kullanıcı yıl başından geçerli tarihe kadar günlük petrol oranını görüntülemek için günlük YTD başına varil petrol görmek isteyebilir. Bu senaryoda, öncelik hesaplama öğeleri için ayarlanmalıdır.

Varsayımlarımız şunlardır:

Tablo adı Ortalamalar'dır.
Sütun adı Ortalama Hesaplama'dır.
Öncelik 10'dur.

Ortalamalar için hesaplama öğeleri

Ortalama Yok

SELECTEDMEASURE()

Günlük Ortalama

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

DaX sorgusu ve dönüş tablosu örneği aşağıda verilmiştir:

Ortalama sorgusu

EVALUATE
    CALCULATETABLE (
        SUMMARIZECOLUMNS (
        DimDate[CalendarYear],
        DimDate[EnglishMonthName],
        "Sales", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "No Average"
        ),
        "YTD", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "No Average"
        ),
        "Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "Current",
            'Averages'[Average Calculation] = "Daily Average"
        ),
        "YTD Daily Average", CALCULATE (
            [Sales],
            'Time Intelligence'[Time Calculation] = "YTD",
            'Averages'[Average Calculation] = "Daily Average"
        )
    ),
    DimDate[CalendarYear] = 2012
)

Sorgu sonucunu ortalamalar

Sorgu sonucunu ortalamalar

Aşağıdaki tabloda Mart 2012 değerlerinin nasıl hesaplanmış olduğu gösterilmektedir.

Sütun adı Hesaplama
YTD Ocak, Şubat 2012 Satış Toplamı
= 495.364 + 506.994 + 373.483
Günlük Ortalama Mart 2012 satışları Mart ayındaki gün sayısına bölündü
= 373.483 / 31
YTD Günlük Ortalama YTD for Mar 2012 by divided by # of days in Jan, Şub, and Mar
= 1.375.841 / (31 + 29 + 31)

20 öncelikli olarak uygulanan YTD hesaplama öğesinin tanımı aşağıdadır.

CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))

İşte 10 öncelikli olarak uygulanan Günlük Ortalama.

DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))

Akıllı Zaman Gösterimi hesaplama grubunun önceliği Ortalamalar hesaplama grubuna göre daha yüksek olduğundan, mümkün olduğunca geniş bir şekilde uygulanır. YTD Günlük Ortalama hesaplaması, günlük ortalama hesaplamasının hem paydasına hem de paydasına (gün sayısı) YTD uygular.

Bu, aşağıdaki ifadeye eşdeğerdir:

CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))

Bu ifade değil:

DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))

Yanal özyineleme

Yukarıdaki Akıllı Zaman Gösterimi örneğinde, bazı hesaplama öğeleri aynı hesaplama grubundaki diğer öğelere başvurur. Buna yan özyineleme denir. Örneğin, YOY% hem YOY hem de PY'ye başvurur.

DIVIDE(
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="YOY"
    ),
    CALCULATE(
        SELECTEDMEASURE(),
        'Time Intelligence'[Time Calculation]="PY"
    )
)

Bu durumda, her iki ifade de farklı calculate deyimleri kullandıklarından ayrı olarak değerlendirilir. Diğer özyineleme türleri desteklenmez.

Filtre bağlamında tek hesaplama öğesi

Akıllı Zaman Gösterimi örneğimizde PY YTD hesaplama öğesinin tek bir hesaplama ifadesi vardır:

CALCULATE(
    SELECTEDMEASURE(),
    SAMEPERIODLASTYEAR(DimDate[Date]),
    'Time Intelligence'[Time Calculation] = "YTD"
)

CALCULATE() işlevindeki YTD bağımsız değişkeni, YTD hesaplama öğesinde önceden tanımlanmış mantığı yeniden kullanmak için filtre bağlamını geçersiz kılar. Tek bir değerlendirmede hem PY hem de YTD uygulamak mümkün değildir. Hesaplama grupları yalnızca hesaplama grubundan tek bir hesaplama öğesi filtre bağlamındaysa uygulanır .

Sipariş

Varsayılan olarak, hesaplama grubundaki bir sütun rapora yerleştirildiğinde hesaplama öğeleri ada göre alfabetik olarak sıralanır. Hesaplama öğelerinin raporda görünme sırası Sıra özelliği belirtilerek değiştirilebilir. Sıra özelliğiyle hesaplama öğesi sırasının belirtilmesi önceliği değiştirmez ve hesaplama öğelerinin değerlendirilme sırasıdır. Ayrıca, Hesaplama öğelerinin Tablosal Model Gezgini'nde görünme sırasını değiştirmez.

Hesaplama öğelerinin sıra özelliğini belirtmek için, hesaplama grubuna ikinci bir sütun eklemeniz gerekir. Veri Türü'nü Metin olan varsayılan sütundan farklı olarak, hesaplama öğelerini sıralamak için kullanılan ikinci bir sütun tamsayı veri türüne sahiptir. Bu sütunun tek amacı, hesaplama grubundaki hesaplama öğelerinin görüntülendiği sayısal sırayı belirtmektir. Bu sütun bir raporda değer sağlamadığından , Hidden özelliğini True olarak ayarlamak en iyisidir.

Sıralama sütunu

Hesaplama grubuna ikinci bir sütun eklendikten sonra, sıralamak istediğiniz hesaplama öğeleri için Sıralı özellik değerini belirtebilirsiniz.

Sıradüzensel özellik

Daha fazla bilgi edinmek için bkz. Hesaplama öğelerini sıralamak için.

Hesaplama grubu oluşturma

Hesaplama grupları Visual Studio'da Analysis Services Projeleri VSIX 2.9.2 ve üzeri sürümlerde desteklenir. Hesaplama grupları, Tablosal Model Betik Dili (TMSL) veya açık kaynak Tablosal Düzenleyici kullanılarak da oluşturulabilir.

Visual Studio kullanarak hesaplama grubu oluşturmak için

  1. Tablosal Model Gezgini'nde Hesaplama Grupları'ya sağ tıklayın ve ardından Yeni Hesaplama Grubu'ne tıklayın. Varsayılan olarak, yeni bir hesaplama grubu tek bir sütuna ve tek bir hesaplama öğesine sahiptir.

  2. Adı değiştirmek ve hesaplama grubu, sütun ve varsayılan hesaplama öğesi için bir açıklama girmek için Özellikler'i kullanın.

  3. Varsayılan hesaplama öğesi için bir DAX formül ifadesi girmek için sağ tıklayın ve ardından Formülü Düzenle'ye tıklayarak DAX Düzenleyicisi'ni açın. Geçerli bir ifade girin.

  4. Daha fazla hesaplama öğesi eklemek için Hesaplama Öğeleri'ne sağ tıklayın ve ardından Yeni Hesaplama Öğesi'ne tıklayın.

Hesaplama öğelerini sıralamak için

  1. Tablosal Model Gezgini'nde bir hesaplama grubuna sağ tıklayın ve ardından Sütun ekle'ye tıklayın.

  2. Sütunu Sıralı (veya benzer bir ad) olarak adlandırın, bir açıklama girin ve Gizli özelliğini True olarak ayarlayın.

  3. Sipariş etmek istediğiniz her hesaplama öğesi için Sıra özelliğini pozitif bir sayı olarak ayarlayın. Her sayı sıralı olur, örneğin, önce Sıralı özelliği 1 olan bir hesaplama öğesi, ikinci olarak 2 özelliği görüntülenir ve bu şekilde devam eder. Varsayılan -1 olan hesaplama öğeleri sıralamaya dahil edilmez, ancak rapordaki sipariş edilen öğelerden önce görünür.

Değerlendirmeler

Bir hesaplama grubu anlamsal modele eklenir eklenmez, Power BI raporları tüm ölçüler için değişken veri türünü kullanır. Daha sonra tüm hesaplama grupları modelden kaldırılırsa ölçüler özgün veri türlerine yeniden döndürülür.

Sınırlamalar

Hesaplama grubu tablolarında tanımlanan nesne düzeyi güvenlik (OLS) desteklenmez. Ancak OLS, aynı modeldeki diğer tablolarda tanımlanabilir. Hesaplama öğesi OLS güvenli nesnesine başvuruyorsa genel bir hata döndürülür.

Satır düzeyi güvenlik (RLS) desteklenmez. RLS'yi aynı modeldeki tablolarda tanımlayın, ancak hesaplama gruplarının kendilerinde tanımlayın (doğrudan veya dolaylı olarak).

Ayrıntı Satırları İfadeleri hesaplama gruplarında desteklenmez.

Power BI'daki akıllı anlatı görselleri hesaplama gruplarında desteklenmez.

Power BI'daki örtük sütun toplamaları, hesaplama gruplarına sahip modeller için desteklenmez. Şu anda DiscourageImplicitMeasures özelliği false (varsayılan) olarak ayarlandıysa toplama seçenekleri görüntülenir, ancak uygulanamaz. DiscourageImplicitMeasurestrue olarak ayarlanırsa toplama seçenekleri görünmez.

LiveConnection kullanarak Power BI raporları oluştururken, dinamik biçim dizeleri rapor düzeyinde ölçülere uygulanmaz.

Ayrıca bakınız

Tablo modellerinde DAX
DAX Başvurusu