適用対象:Azure Analysis Services
Fabric/Power BI Premium
SQL Server 2019 以降の Analysis Services
計算グループを使用すると、一般的なメジャー式を計算品目としてグループ化することにより、冗長なメジャーの数を大幅に削減できます。 計算グループは、1500 以上の 互換性レベルの表形式モデルでサポートされています。
メリット
計算グループは、同じ計算を使用することで冗長なメジャーが急増することがある複雑なモデルの問題に対処します。このような問題は、タイムインテリジェンス計算で最も一般的です。 たとえば、ある販売アナリストは、売上合計と注文を月累計 (MTD)、四半期累計 (QTD)、年度累計 (YTD)、前年の受注年累計 (PY) で表示したいとします。 データ モデラーは、計算ごとに個別のメジャーを作成する必要があり、その結果、数十のメジャーが発生する可能性があります。 ユーザーにとって、これは同一の量の測定基準を整理し、それらを個別にレポートに適用する必要があることを意味する場合があります。
まず、Power BI などのレポート ツールで計算グループがユーザーにどのように表示されるかを見てみましょう。 次に、計算グループを構成する内容と、それらがモデルでどのように作成されるかを見ていきます。
計算グループは、単一の列を持つテーブルとしてレポート クライアントに表示されます。 通常の列やディメンションとは異なり、この列は、視覚化の [値] フィルターに既に追加されているメジャーに適用できる、1つ以上の再利用可能な計算や計算項目を表します。
次のアニメーションでは、ユーザーが 2012 年と 2013 年の売上データを分析しています。 計算グループを適用する前に、共通基本メジャー Sales は各月の売上合計を計算します。 その後、ユーザーはタイム インテリジェンス計算を適用して、月から日付、四半期から日付、年から日付などの売上合計を取得したいと考えています。 計算グループがない場合、ユーザーは個々のタイム インテリジェンス メジャーを選択する必要があります。
計算グループでは、この例では タイム インテリジェンスという名前で、ユーザーが [時間計算 ] 項目を [列] フィルター領域にドラッグすると、各計算項目が個別の列として表示されます。 各行の値 は、基本メジャー Sales から計算されます。
計算グループは明示的な DAX メジャーで動作します。 この例では、 Sales はモデルに既に作成されている明示的なメジャーです。 計算グループは、暗黙的な DAX メジャーでは機能しません。 たとえば、Power BI では、明示的なメジャーを作成せずに、ユーザーが列をビジュアルにドラッグして集計値を表示すると、暗黙的なメジャーが作成されます。 現時点では、Power BI では、インライン DAX 計算として記述された暗黙的なメジャーに対して DAX が生成されます。つまり、暗黙的なメジャーは計算グループでは機能しません。 表形式オブジェクト モデル (TOM) に表示される新しいモデル プロパティが導入されました 。DiscourageImplicitMeasures。 現在、計算グループを作成するには、このプロパティを true に設定する必要があります。 true に設定すると、ライブ接続モードの Power BI Desktop では暗黙的なメジャーの作成が無効になります。
計算グループでは、多次元データ式 (MDX) クエリもサポートされます。 つまり、MDX を使用して表形式データ モデルにクエリを実行する Microsoft Excel ユーザーは、ワークシートのピボットテーブルとグラフの計算グループを最大限に活用できます。
動作のしくみ
計算グループがユーザーにどのように役立つのかを見てきたので、表示されているタイム インテリジェンス計算グループの例がどのように作成されるかを見てみましょう。
詳細に進む前に、計算グループ専用の新しい DAX 関数をいくつか紹介しましょう。
SELECTEDMEASURE - 現在コンテキスト内にあるメジャーを参照するために、計算項目の式によって使用されます。 この例では、Sales 指標です。
SELECTEDMEASURENAME - 名前によってコンテキスト内にあるメジャーを決定するために、計算項目の式によって使用されます。
ISSELECTEDMEASURE - 計算項目の式によって使用され、コンテキスト内のメジャーがメジャーの一覧で指定されていることを確認します。
SELECTEDMEASUREFORMATSTRING - 計算アイテムの式で、コンテキスト内にある測定値の書式指定文字列を取得に使用されます。
タイム インテリジェンスの例
テーブル名 - タイム インテリジェンス
列名 - 時間計算
優先順位 - 20
タイム インテリジェンスの計算項目
現在
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"
)
前年同期比
SELECTEDMEASURE() -
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation] = "PY"
)
YOY%
DIVIDE(
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="YOY"
),
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="PY"
)
)
この計算グループをテストするには、SSMS またはオープンソースの DAX Studio で DAX クエリを実行します。 注: このクエリ例では、YOY% と YOY% は省略されています。
タイム インテリジェンス クエリ
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 }
)
タイム インテリジェンス クエリの戻り値
戻り値テーブルには、適用された各計算項目の計算が表示されます。 たとえば、2012 年 3 月の QTD は、2012 年 1 月、2 月、3 月の合計です。
動的書式指定文字列
計算グループを使用した動的書式指定文字列を使用すると、メジャーに対して条件付きで書式指定文字列を適用することができ、文字列を強制的に返す必要はありません。
表形式モデルでは、DAX の FORMAT 関数を使用してメジャーを動的に書式設定することがサポートされています。 ただし、FORMAT 関数には文字列を返すという欠点があり、本来は数値として扱われるべきメジャーの値も文字列として返されます。 これには、グラフなどの数値に応じてほとんどの Power BI ビジュアルを操作できないなど、いくつかの制限があります。
Power BI では、メジャーの動的書式指定文字列を使用すると、書式指定文字列を強制的に文字列を返すことなく、計算グループを使用せずに、特定のメジャーに書式指定文字列を条件付きで適用することもできます。 詳細については、「メジャーの動的書式指定文字列」を参照してください。
タイム インテリジェンス用の動的書式指定文字列
上記のタイム インテリジェンスの例を見ると、 YOY% を除くすべての計算項目は、コンテキスト内の現在のメジャーの形式を使用する必要があります。 たとえば、YTD が販売の基準となる指標で計算される場合、その結果は通貨である必要があります。 これが注文の基本測定値などの計算グループである場合、形式は数値になります。 ただし、YOY%は、基本メジャーの形式に関係なく、すべての場合においてパーセンテージにする必要があります。
YOY%の場合、書式指定文字列式プロパティを 0.00%;-0.00%;0.00%に設定することで、書式指定文字列をオーバーライドできます。 書式指定文字列式のプロパティの詳細については、「 MDX セルのプロパティ - FORMAT STRING Contents」を参照してください。
Power BI のこのマトリックス ビジュアルでは、 Sales Current/YOY と Orders Current/YOY がそれぞれの基本メジャー書式指定文字列を保持していることがわかります。 ただし、Sales YOY% と Orders YOY%は、パーセンテージ形式を使用するように書式指定文字列をオーバーライドします。
通貨換算の動的書式指定文字列
動的書式指定文字列は、簡単な通貨換算を提供します。 次の Adventure Works データ モデルについて考えてみましょう。 これは、コンバージョンの種類で定義されている一対多の通貨換算用にモデル化されています。
FormatString 列が DimCurrency テーブルに追加され、それぞれの通貨の書式指定文字列が設定されます。
この例では、次の計算グループが次のように定義されます。
通貨換算の例
テーブル名 - 通貨換算
列名 - 変換計算
優先順位 - 5
通貨換算の計算項目
変換なし
SELECTEDMEASURE()
換算通貨
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]) ) )
)
)
文字列式の書式設定
SELECTEDVALUE(
DimCurrency[FormatString],
SELECTEDMEASUREFORMATSTRING()
)
注
計算グループの選択式は現在プレビュー段階であり、計算グループに通貨の自動換算を実装することにより、2つの個別の計算項目を持つ必要がなくなります。
書式指定文字列式はスカラー文字列を返す必要があります。 フィルター コンテキストに複数の通貨がある場合は、新しい SELECTEDMEASUREFORMATSTRING 関数を使用して基本メジャー書式指定文字列に戻します。
次のアニメーションは、レポート内の Sales 指標の動的フォーマットの通貨換算を示しています。
選択式表現 (プレビュー)
選択式は、計算グループに対して定義されている省略可能なプロパティです。 選択式には次の 2 種類があります。
- MultipleOrEmptySelectionExpression (複数または空の選択式)。 この選択式は、複数の計算項目が選択されている場合、既存でない計算項目が選択されている場合、または競合する選択が行われた場合に適用されます。
- noSelectionExpression。 この選択式は、計算グループがフィルター処理されていない場合に適用されます。
どちらの選択式にも formatStringDefinition 動的書式指定文字列 式があります。
要約すると、計算グループで次の定義を行うことができます。
...
"calculationGroup": {
"multipleOrEmptySelectionExpression": {
"expression": "",
"formatStringDefinition": {...}
},
"noSelectionExpression": {
"expression": "",
"formatStringDefinition": {...}
}
...
}
注
これらの式が指定されている場合は、前述の特定の状況にのみ適用されます。 1 つの計算項目の選択は、これらの式の影響を受けません。
これらの式の概要と、指定されていない場合の既定の動作を次に示します。
選択の種類 | 選択式が定義されていません (既定値) | 選択式の定義 |
---|---|---|
単一選択 | 選択が適用されます | 選択が適用されます |
複数選択 | 計算グループがフィルター処理されない | multipleOrEmptySelectionExpression を評価した結果を返します |
空の選択 | 計算グループがフィルター処理されない | multipleOrEmptySelectionExpression を評価した結果を返します |
選択なし | 計算グループがフィルター処理されない | noSelectionExpression の評価結果を返します |
複数または空の選択
同じ計算グループで複数の選択が行われた場合、計算グループは評価され、定義されている場合は multipleOrEmptySelectionExpression の結果が返されます。 この式が定義されていない場合、計算グループは次の結果を返します。
SELECTEDMEASURE()
たとえば、次のように構成された multipleOrEmptySelectionExpression を持つ MyCalcGroup という名前の計算グループを見てみましょう。
IF (
ISFILTERED ( 'MyCalcGroup' ),
"Filters: "
& CONCATENATEX (
FILTERS ( 'MyCalcGroup'[Name] ),
'MyCalcGroup'[Name],
", "
)
)
次に、計算グループで次の選択を行ったとします。
EVALUATE
{
CALCULATE (
[MyMeasure],
'MyCalcGroup'[Name] = "item1" || 'MyCalcGroup'[Name] = "item2"
)
}
ここでは、計算グループの "item1" と "item2" の 2 つの項目を選択します。 これは複数選択であるため、multipleOrEmptySelectionExpression が評価され、 "Filters: item1, item2" という結果が返されます。
次に、計算グループで次の選択を行います。
EVALUATE
{
CALCULATE (
[MyMeasure],
'MyCalcGroup'[Name] = "item4" -- item4 does not exists
)
}
この計算グループには "item4" が存在しないため、空の選択の例を次に示します。 したがって、multipleOrEmptySelectionExpression が評価され、次の結果が返されます: "Filters: "。
選択なし
計算グループがフィルター処理されていない場合は、計算グループの noSelectionExpression が適用されます。 これは、ほとんどの場合、ユーザーがアクションを実行しなくても既定のアクションを実行するために使用され、ユーザーに既定のアクションをオーバーライドする柔軟性を提供します。 たとえば、中央ピボット通貨として米ドルによる自動通貨換算を見てみましょう。
次の noSelectionExpression を使用して計算グループを設定できます。
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] ) )
)
)
)
また、この式の formatStringDefinition も設定します。
SELECTEDVALUE(
DimCurrency[FormatString],
SELECTEDMEASUREFORMATSTRING()
)
通貨が選択されていない場合、すべての通貨は必要に応じてピボット通貨(米ドル)に自動的に変換されます。 その上で、noSelectionExpression なしで行う必要がある計算項目を切り替えることなく、その通貨に変換する別の通貨を選択することもできます。
優先順位
優先順位は、計算グループに対して定義されたプロパティです。 計算項目で SELECTEDMEASURE() を使用する場合に、計算グループを基になるメジャーと組み合わせる順序を指定します。
優先順位の例
簡単な例を見てみましょう。 このモデルには、指定した値が 10 のメジャーと、それぞれ 1 つの計算項目を持つ 2 つの計算グループがあります。 ここでは、両方の計算グループの計算項目をメジャーに適用します。 この設定方法は次のとおりです。
'Measure group'[Measure] = 10
最初の計算グループが 'Calc Group 1 (Precedence 100)'
され、計算項目が 'Calc item (Plus 2)'
されます。
'Calc Group 1 (Precedence 100)'[Calc item (Plus 2)] = SELECTEDMEASURE() + 2
2 番目の計算グループが 'Calc Group 2 (Precedence 200)'
され、計算項目が 'Calc item (Times 2)'
されます。
'Calc Group 2 (Precedence 200)'[Calc item (Times 2)] = SELECTEDMEASURE() * 2
計算グループ 1 の優先順位値が 100 で、計算グループ 2 の優先順位値が 200 であることがわかります。
SQL Server Management Studio (SSMS) または XMLA 読み取り/書き込み 機能を備えた外部ツール (オープン ソースの表形式エディターなど) を使用すると、XMLA スクリプトを使用して計算グループを作成し、優先順位の値を設定できます。 ここでは、 "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"
}
}
]
}
}
}
このスクリプトでは、次の "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 には、レポート ビューの各計算グループのメジャーとスライサーを示すカード ビジュアルがあります。
両方のスライサーが選択されている場合は、DAX 式を組み合わせる必要があります。 これを行うには、最も優先順位の高い計算項目 200 から始めて、SELECTEDMEASURE() 引数を次に高い 100 に置き換えます。
したがって、最も優先順位の高い計算項目 DAX 式は次のとおりです。
SELECTEDMEASURE() * 2
次に、DAX 式で 2 番目に優先順位の高い計算項目を次に示します。
SELECTEDMEASURE() + 2
次に、最も優先順位の高い計算項目の SELECTEDMEASURE() 部分を次に高い優先順位の計算項目に置き換えることで結合されます。
( SELECTEDMEASURE() + 2 ) * 2
計算項目がさらにある場合は、基になる指標に到達するまで続行します。 このモデルには 2 つの計算グループしかないため、SELECTEDMEASURE() を次のようにメジャー自体に置き換えます。
( ( [Measure] ) + 2 ) * 2
我々のMeasure = 10として、これはMeasure = 10と同じです。
( ( 10 ) + 2 ) * 2
SELECTEDMEASURE() 引数がそれ以上ない場合、結合された DAX 式が評価されます。
( ( 10 ) + 2 ) * 2 = 24
Power BI Desktop では、スライサーを使用して両方の計算グループを適用すると、メジャーの出力は次のようになります。
ただし、この組み合わせは、次のように出力が 10 + 2 * 2 = 14 にならないように入れ子になっています。
単純な変換の場合、評価の優先順位は低い方から高くなります。 たとえば、10 に 2 が追加され、2 が乗算されます。 DAX には、内部式にフィルターやコンテキストの変更を適用する CALCULATE などの関数があります。 この場合、優先順位が高いほど優先順位の低い式が変更されます。
また、優先順位によって、各メジャーの結合された DAX 式に適用される動的書式指定文字列も決定されます。 最も優先順位の高い計算グループの動的書式指定文字列のみが適用されます。 メジャー自体に動的書式指定文字列がある場合、モデル内の計算グループの優先順位が低いと見なされます。
平均を使用した優先順位の例
この記事で前述したタイム インテリジェンスの例に示されているように、同じモデルを使用する別の例を見てみましょう。 しかし今回は、 平均 計算グループも追加しましょう。 平均値計算グループには、日付フィルター コンテキストを変更せず、その中で平均計算を適用するという点で、従来のタイムインテリジェンスに依存しない平均計算が含まれています。
この例では、日次平均計算が定義されています。 石油・ガス用途では、1 日あたりの平均石油バレル数などの計算が一般的です。 その他の一般的なビジネス例としては、小売の店舗売上平均などがあります。
このような計算はタイム インテリジェンス計算とは無関係に計算されますが、それらを組み合わせる必要がある場合もあります。 たとえば、ユーザーは、年初から現在の日付までの 1 日の石油レートを表示するために、1 日あたりの石油のバレルを YTD で確認できます。 このシナリオでは、計算項目の優先順位を設定する必要があります。
前提は次のとおりです。
テーブル名は Averages です。
列名は Average Calculation です。
優先順位は 10 です。
平均の計算項目
平均なし
SELECTEDMEASURE()
日次平均
DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))
DAX クエリと戻り値テーブルの例を次に示します。
平均クエリ
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
)
平均クエリの戻り値
次の表は、2012 年 3 月の値の計算方法を示しています。
列名 | 計算 |
---|---|
YTD | 2012 年 1 月、2 月、3 月の売上合計 = 495,364 + 506,994 + 373,483 |
日次平均 | 2012 年 3 月の売上を 3 月の日数で割った = 373,483 / 31 |
YTD 日平均 | 2012 年 3 月の YTD を 1 月、2 月、3 月の日数で割った = 1,375,841 / (31 + 29 + 31) |
YTD 計算項目の定義を次に示します。優先順位 は 20 です。
CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date]))
日次平均は、優先順位10が適用されています。
DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate))
タイム インテリジェンス計算グループの優先順位は平均計算グループの優先順位よりも高いため、可能な限り広範に適用されます。 YTD 日次平均計算は、日次平均計算の分子と分母 (日数) の両方に YTD を適用します。
これは、次の式と同じです。
CALCULATE(DIVIDE(SELECTEDMEASURE(), COUNTROWS(DimDate)), DATESYTD(DimDate[Date]))
この表現ではありません。
DIVIDE(CALCULATE(SELECTEDMEASURE(), DATESYTD(DimDate[Date])), COUNTROWS(DimDate)))
横再帰
上記のタイム インテリジェンスの例では、一部の計算項目が同じ計算グループ内の他の項目を参照しています。 これは 横再帰と呼ばれます。 たとえば、 YOY% は YOY と PY の両方を参照します。
DIVIDE(
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="YOY"
),
CALCULATE(
SELECTEDMEASURE(),
'Time Intelligence'[Time Calculation]="PY"
)
)
この場合、両方の式は異なる計算ステートメントを使用しているため、個別に評価されます。 その他の種類の再帰はサポートされていません。
フィルター コンテキスト内の単一の計算項目
タイム インテリジェンスの例では、 PY YTD 計算項目には単一の計算式があります。
CALCULATE(
SELECTEDMEASURE(),
SAMEPERIODLASTYEAR(DimDate[Date]),
'Time Intelligence'[Time Calculation] = "YTD"
)
CALCULATE() 関数の YTD 引数は、YTD 計算項目で既に定義されているロジックを再利用するためにフィルター コンテキストをオーバーライドします。 PY と YTD の両方を 1 つの評価に適用することはできません。 計算グループは、計算グループの 1 つの計算項目がフィルター コンテキストにある場合 にのみ適用 されます。
注文
既定では、計算グループの列がレポートに配置されると、計算項目は名前のアルファベット順に並べ替えられます。 計算項目がレポートに表示される順序は、序数プロパティを指定することで変更できます。 序数プロパティを使用して計算項目の順序を指定しても、計算項目が評価される順序の 優先順位は変更されません。 また、テーブル モデル エクスプローラーでの計算項目の表示順序も変更されません。
計算項目の序数プロパティを指定するには、計算グループに 2 番目の列を追加する必要があります。 データ型が Text の既定の列とは異なり、計算項目の順序付けに使用される 2 番目の列には整数データ型があります。 この列の唯一の目的は、計算グループ内の計算項目が表示される数値の順序を指定することです。 この列はレポートに値を提供しないため、 Hidden プロパティを True に設定することをお勧めします。
計算グループに 2 番目の列を追加した後、順序を指定する計算項目の序数プロパティ値を指定できます。
詳細については、「 計算項目を注文するには」を参照してください。
計算グループを作成する
計算グループは、Analysis Services Projects VSIX 更新プログラム 2.9.2 以降を使用して Visual Studio でサポートされています。 計算グループは、表形式モデル スクリプト言語 (TMSL) またはオープン ソースの 表形式エディターを使用して作成することもできます。
Visual Studio を使用して計算グループを作成するには
テーブル モデル エクスプローラーで、[ 計算グループ] を右クリックし、[ 新しい計算グループ] をクリックします。 既定では、新しい計算グループには 1 つの列と 1 つの計算項目があります。
[プロパティ] を使用して名前を変更し、計算グループ、列、および既定の計算項目の説明を入力します。
既定の計算項目の DAX 式を入力するには、右クリックし、[ 数式の編集 ] をクリックして DAX エディターを開きます。 有効な式を入力します。
計算項目をさらに追加するには、[ 計算項目] を右クリックし、[ 新しい計算項目] をクリックします。
計算項目を注文するには
テーブル モデル エクスプローラーで計算グループを右クリックし、[ 列の追加] をクリックします。
列に序数 (または類似の名前) という名前を付け、説明を入力して、 Hidden プロパティを True に設定します。
並べ替える計算項目ごとに、 序数 プロパティを正の数値に設定します。 各数値は連続しています。たとえば、序数プロパティが 1 の計算項目が最初に表示され、2 のプロパティが 2 番目に表示されます。 既定の -1 を持つ計算アイテムは、順序付けには含まれませんが、レポート内の順序付きアイテムの前に表示されます。
考慮 事項
計算グループがセマンティック モデルに追加されるとすぐに、Power BI レポートはすべてのメジャーに バリアント データ型を使用します。 その後、すべての計算グループがモデルから削除されると、測定値は元のデータ型に再び戻されます。
制限事項
計算グループ テーブルで定義されているオブジェクト レベル セキュリティ (OLS) はサポートされていません。 ただし、OLS は、同じモデル内の他のテーブルで定義できます。 計算項目が OLS セキュリティで保護されたオブジェクトを参照している場合は、一般的なエラーが返されます。
行レベル セキュリティ (RLS) はサポートされていません。 同じモデル内のテーブルに RLS を定義しますが、計算グループ自体 (直接的または間接的) には定義しません。
詳細行式 は、計算グループではサポートされていません。
Power BI のスマート ストーリービジュアルは、計算グループではサポートされていません。
Power BI の暗黙的な列集計は、計算グループを持つモデルではサポートされていません。 現在、 DiscourageImplicitMeasures プロパティが false (既定値) に設定されている場合、集計オプションは表示されますが、適用できません。 DiscourageImplicitMeasures が true に設定されている場合、集計オプションは表示されません。
LiveConnection を使用して Power BI レポートを作成する場合、動的書式指定文字列は report-level measures には適用されません。