次の方法で共有


オートエグジスト

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

autoexists の概念により、キューブ領域は、同じ階層から属性階層メンバーのすべての可能な組み合わせを作成した結果として存在する可能性のあるセルと、キューブ内に実際に存在するセルに制限されます。 これは、ある属性階層のメンバーが、同じディメンション内の別の属性階層のメンバーと共に存在できないためです。 SELECT ステートメントで同じディメンションの複数の属性階層が使用されている場合、Analysis Services は属性の式を評価して、それらの属性のメンバーが他のすべての属性の条件を満たすように適切に制限されていることを確認します。

たとえば、Geography ディメンションの属性を操作するとします。 City 属性からすべてのメンバーを返す式と、Country 属性のメンバーをヨーロッパのすべての国/地域に限定する式がある場合、City メンバーはヨーロッパの国/地域に属する都市のみに限定されます。 これは、Analysis Services の autoexists 特性が原因です。 Autoexists は、ある属性式で除外されたディメンション レコードが他の属性式に含まれるのを防ぐために、同じディメンションの属性にのみ適用されます。 Autoexists は、ディメンション行に対するさまざまな属性式の積集合として認識することもできます。

セルの存在

次のセルは常に存在します。

  • すべての階層の (All) メンバーが、同じディメンション内の他の階層のメンバーと交差する場合。

  • 計算されたメンバーが、計算されていない兄弟またはその親や子孫と交差する場合。

既存以外のセルを指定する

既存ではないセルは、キューブに存在しないセルを要求するクエリまたは計算への応答としてシステムによって提供されるセルです。 たとえば、City 属性階層と Country 属性階層が Geography ディメンションに属し、Internet Sales Amount メジャーを持つキューブがある場合、このキューブの領域には、互いに存在するメンバーのみが含まれます。 たとえば、City 属性階層にニューヨーク、ロンドン、パリ、東京、メルボルンの都市が含まれている場合です。Country 属性階層には、米国、英国、フランス、日本、オーストラリアの国/地域が含まれます。その場合、キューブの空間には、パリと米国の交差点のスペース (セル) は含まれません。

存在しないセルに対してクエリを実行すると、既存以外のセルは null を返します。つまり、計算を含めることはできません。また、このスペースに書き込む計算を定義することはできません。 たとえば、次のステートメントには、存在しないセルが含まれています。

SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,  
{[Customer].[Customer].[Aaron A. Allen]  
   ,[Customer].[Customer].[Abigail Clark]} ON ROWS   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

このクエリでは 、Members (Set) (MDX) 関数を使用して列軸の Gender 属性階層のメンバーのセットを返し、このセットを行軸の Customer 属性階層から指定されたメンバーのセットと交差させます。

前のクエリを実行すると、Aaron A の積集合にあるセルが表示されます。Allen と Female には null が表示されます。 同様に、アビゲイル・クラークとマレの交差部分にあるセルには null が表示されます。 これらのセルは存在せず、値を含めることはできませんが、存在しないセルはクエリによって返される結果に表示される可能性があります。

クロス結合 (MDX) 関数を使用して同じディメンション内の属性階層のメンバーのクロス積を返す場合、自動存在では、完全なデカルト積を返すのではなく、実際に存在するタプルのセットに返されるタプルが制限されます。 たとえば、次のクエリの実行結果を実行して確認します。

SELECT CROSSJOIN  
   (  
      {[Customer].[Country].[United States]},  
         [Customer].[State-Province].Members  
  ) ON 0   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

0 は、列軸を指定するために使用されます。これは軸 (0) の短縮形です。これは列軸です。

前のクエリでは、互いに存在するクエリ内の各属性階層のメンバーのセルのみが返されます。 前のクエリは、 * (クロス結合) (MDX) 関数の新しい * バリアントを使用して記述することもできます。

SELECT   
   [Customer].[Country].[United States] *   
      [Customer].[State-Province].Members  
ON 0   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

前のクエリは、次の方法で記述することもできます。

SELECT [Customer].[State-Province].Members  
ON 0   
FROM [Adventure Works]  
WHERE (Measures.[Internet Sales Amount],  
   [Customer].[Country].[United States])  

返されるセルの値は同じですが、結果セット内のメタデータは異なります。 たとえば、前のクエリでは、Country 階層はスライサー軸 (WHERE 句) に移動されたため、結果セットに明示的に表示されません。

上記の 3 つのクエリはそれぞれ、SQL Server SQL Server Analysis Services での自動存在動作の効果を示しています。

深さと浅さのあるオートエグジスト

オートエクスティストは、式にディープまたはシャローとして適用できます。 Deep Autoexists は、スライサー式、軸のサブ選択式などを適用した後、すべての式が可能な限り深い空間を満たすように評価されることを意味します。 簡易オートエックスは 、現在の式の前に外部式が評価され、それらの結果が現在の式に渡されることを意味します。 既定の設定はディープオートエグジストです。

次のシナリオとサンプルは、さまざまな種類の Autoexists を示すのに役立ちます。 次の例では、2 つのセットが作成されます。1 つは計算式として、もう 1 つは定数式です。

//Obtain the Top 10 best reseller selling products by Name

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

取得された結果セットは次のとおりです。

リセラーの売上金額 割引金額 PCT 割引
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Road-250 $9,377,457.68 $4,032.47 0.04%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
Road-650 $7,442,141.81 $39,698.30 0.53%
Touring-1000 $6,723,794.29 $166,144.17 2.47%
Road-550-W $3,668,383.88 $1,901.97 0.05%
Road-350-W $3,665,932.31 $20,946.50 0.57%
HL Mountain Frame $3,365,069.27 $174.11 0.01%
Road-150 $2,363,805.16 $0.00 0.00%
Touring-3000 $2,046,508.26 $79,582.15 3.89%

取得した製品のセットは Preferred10Products と同じようです。したがって、Preferred10Products セットを確認します。

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Preferred10Products on 1

from [Adventure Works]

次の結果に従って、両方のセット (Top10SellingProducts、Preferred10Products) は同じです

リセラーの売上金額 割引金額 PCT 割引
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Road-250 $9,377,457.68 $4,032.47 0.04%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
Road-650 $7,442,141.81 $39,698.30 0.53%
Touring-1000 $6,723,794.29 $166,144.17 2.47%
Road-550-W $3,668,383.88 $1,901.97 0.05%
Road-350-W $3,665,932.31 $20,946.50 0.57%
HL Mountain Frame $3,365,069.27 $174.11 0.01%
Road-150 $2,363,805.16 $0.00 0.00%
Touring-3000 $2,046,508.26 $79,582.15 3.89%

次の例では、ディープオートエグジストの概念を示します。 この例では、[Product].[Product Line] 属性を用いて、[Mountain] グループに属する Top10SellingProducts をフィルター処理しています。 属性 (スライサーと軸) の両方が同じディメンション [Product] に属している点に注意してください。

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

// Preferred10Products set removed for clarity

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

次の結果セットが生成されます。

リセラーの売上金額 割引金額 PCT 割引
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
HL Mountain Frame $3,365,069.27 $174.11 0.01%
Mountain-300 $1,907,249.38 $876.95 0.05%
Mountain-500 $1,067,327.31 $17,266.09 1.62%
Mountain-400-W $592,450.05 $303.49 0.05%
LL マウンテン フレーム $521,864.42 $252.41 0.05%
ML Mountain Frame-W $482,953.16 $206.95 0.04%
ML Mountain Frame $343,785.29 $161.82 0.05%
ウィメンズ マウンテン ショーツ $260,304.09 $6,675.56 2.56%

上記の結果セットでは、Top10SellingProducts と Mountain-200、Mountain-100、HL Mountain Frame の 7 人の新規ユーザーがリストの先頭に移動しました。 前の結果セットでは、これらの 3 つの値が混在していました。

Top10SellingProducts セットがクエリのスライス条件を満たすように評価されるため、これは Deep Autoexists と呼ばれます。 Deep Autoexists は、スライサー式、軸のサブ選択式などを適用した後、すべての式が可能な限り深い空間を満たすように評価されることを意味します。

ただし、次の例のように、Top10SellingProducts に対して Preferred10Products と同等の分析を行えるようにしたい場合があります。

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Preferred10Products on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

次の結果セットが生成されます。

リセラーの売上金額 割引金額 PCT 割引
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
HL Mountain Frame $3,365,069.27 $174.11 0.01%

上記の結果では、[Product]の [Mountain] グループに含まれる Preferred10Products の製品のみが含まれる結果がスライスされます。[製品ライン];Preferred10Products は定数式であるため、想定どおりです。

この結果セットは「Shallow Autoexists(浅いオートエグジスツ)」としても理解されます。 これは、式がスライス句の前に評価されるためです。 前の例では、式は、概念を導入するために説明するための定数式でした。

Autoexists の動作は、 Autoexists 接続文字列プロパティを使用してセッション レベルで変更できます。 次の例では、まず新しいセッションを開き、 Autoexists=3 プロパティを接続文字列に追加します。 この例を実行するには、新しい接続を開く必要があります。 Autoexist 設定で接続が確立されると、その接続が完了するまで有効なままになります。

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

//Preferred10Products set removed for clarity

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

次の結果セットは、Autoexists の浅い動作を示しています。

リセラーの売上金額 割引金額 PCT 割引
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
HL Mountain Frame $3,365,069.27 $174.11 0.01%

Autoexists の動作は、接続文字列の AUTOEXISTS=[1|2|3] パラメーターを使用して変更できます。パラメーターの使用方法については、 サポートされている XMLA プロパティ (XMLA)ConnectionString を参照してください。

こちらもご覧ください

MDX の主な概念 (Analysis Services)
キューブスペース
タプル
メンバー、タプル、およびセットの操作 (MDX)
ビジュアル合計と非ビジュアル合計
MDX 言語リファレンス (MDX)
多次元表現 (MDX) リファレンス