Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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
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.
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.
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.
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.
DimCurrency tablosuna bir FormatString sütunu eklenir ve ilgili para birimleri için biçim dizeleriyle doldurulur.
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.
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:
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:
Ancak, kombinasyon iç içe yerleştirilmiştir, bu yüzden çıkış burada gördüğünüz gibi 10 + 2 * 2 = 14 olmayacaktır.
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
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.
Hesaplama grubuna ikinci bir sütun eklendikten sonra, sıralamak istediğiniz hesaplama öğeleri için Sıralı özellik değerini belirtebilirsiniz.
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
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.
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.
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.
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
Tablosal Model Gezgini'nde bir hesaplama grubuna sağ tıklayın ve ardından Sütun ekle'ye tıklayın.
Sütunu Sıralı (veya benzer bir ad) olarak adlandırın, bir açıklama girin ve Gizli özelliğini True olarak ayarlayın.
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.