式またはクエリ言語に関して、最も重要な違いの1つは両方のアプローチの中核にあります。
キューブでは、空間内のセルをアドレス指定するために、タプルの概念があります。 タプルの軸は座標を設定します。 単一のタプルがある場合、結果はキューブ内の対応するセルのコンテンツです。 キューブの属性には(ほとんどの場合)デフォルト値として機能するAll要素があるため、属性がタプルに含まれていない場合は、そこにあるかのように集約を実行します。 たとえば、次のタプルは2013年の(集計された)売上を返します
(Date.Calendar.[Calendar Year].&[2013], Measures.[Internet Sales Amount])
他の属性(製品など)は、デフォルトでアイテムレベルにあります。 ご覧のとおり、この場合、キューブは売上を集計する方法を「知っている」ため、集計関数を指定する必要はありません(MDXにはセットごとに値を集計する関数がありますが)。 次のスケッチは、キューブ内の値をアドレス指定するこの方法を示しています。
テーブルモデルの場合、ピボットテーブルのフィルターは、ベーステーブルの通常のフィルター処理のように機能します。 単一の値を選択した場合でも、いくつかの要素をテーブルフィルターに含めることができます。 たとえば、2013をフィルタリングすると、基準日付テーブルは今年の365日すべてに対してフィルタリングされます。 選択の結果は、フィルター処理されたメジャーを持つ他のテーブルのすべての交点になります。 ここでは、結果を計算する集約関数が必要です。なぜなら、 この操作は、潜在的に複数行のデータを返します。 これを次の図に示します。
MDXよりもSQLに精通している場合、DAXでのフィルタリングと集計の概念はより明確になります。 SQLでは、DAXと同様に、通常、テーブル行を制限します(SQLのWhereステートメントまたはDAXのFILTER関数を使用)。 次に、グループ化(SQLのGROUP BYまたはDAXのSUMMARIZE関数を使用)を行い、最後に適切な集計関数(SUMなど)を使用して集計を計算します。
ただし、SQLまたはDAXでこのような操作を必要とする多くのタスクは、セルをアドレス指定することによってのみMDXで解決できます。 MDXの講義でよく使用する例を紹介します。週末の販売量を示す計算可能なメジャーを作成する必要があります。 あなたが熱心なSQLボックスの場合、MDXソリューションは次のようになります。
Aggregate( filter( descendants( [Date].[Calendar].currentmember, [Date].[Calendar].[Date] ) , [Date].[Day of Week].currentmember IS [Date].[Day of Week].[Sunday] or [Date].[Day of Week].currentmember IS [Date].[Day of Week].[Saturday] ) ,[Measures].[Internet Sales Amount] )
このアプローチは自然に思えます。 子関数を使用して、選択したアイテムのすべての日付のセットを作成します(例:月、四半期、年)。 次に、Filter関数を使用してこのセットをフィルタリングし、土曜日と日曜日のみがセットに残るようにします。 最後に、このセットの販売量を集計します。
実際、このソリューションはSQLまたはDAXに非常に似ています。 たとえば、DAXでは、この計算をほぼ同じ方法で行います。
evaluate( summarize( filter( ‚Internet Sales' , related(‚Date'[Calendar Year])=2007 ) , ‚Date'[Month] , "Umsatz" , Sum(‚Internet Sales'[Sales Amount]) , "UmsatzWE" , Calculate( Sum(‚Internet Sales'[Sales Amount]) , Or( ‚Date'[Day Name Of Week]="Sunday" , ‚Date'[Day Name Of Week]="Saturday" ) ) ) )
ただし、このDAXコードは上記で検討したMDXコードに非常に似ているという事実にもかかわらず、提示されたMDXバージョンはほとんど最も難しいソリューションです。 「就業日」はキューブの属性であるため、週末の売上を単純に参照できますが、タプル(まあ、2つのタプルの合計)を使用します。
([Measures].[Internet Sales Amount], [Date].[Day Name].[Sunday]) + ([Measures].[Internet Sales Amount], [Date].[Day Name].[Saturday])
したがって、DAXリクエストを作成するときは、むしろ
- 実表をフィルタリングする方法
- 使用する集計関数
次に、MDXでは、むしろ、
- キューブから目的の値を抽出するには、どの軸を参照する必要がありますか