DAXとMDXの違い

DAXとMDXの主な違い、または一般的に表形式モデルと多次元モデルの違いについてよく聞かれます。



式またはクエリ言語に関して、最も重要な違いの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では、むしろ、






All Articles