PowerPivot の DAX 演算子リファレンス
Data Analysis Expression (DAX) 言語では、値の比較、算術演算、文字列操作などを行う式を作成するために演算子が使用されます。 ここでは、それぞれの演算子の用途について説明します。
演算子の種類
計算演算子には、算術演算子、比較演算子、テキスト連結演算子、論理演算子の 4 種類があります。
算術演算子
加算、減算、乗算などの基本的な算術演算、数字の組み合わせ、数値結果の生成を実行するには、次の算術演算子を使用します。
算術演算子 |
意味 |
例 |
---|---|---|
+ (正符号) |
加算 |
3+3 |
- (負符号) |
減算または符号 |
3–1–1 |
* (アスタリスク) |
乗算 |
3*3 |
/ (スラッシュ) |
除算 |
3/3 |
^ (キャレット) |
累乗 |
16^4 |
注意
正符号は、二項演算子として使用することも、単項演算子として使用することもできます。二項演算子として使用するには、演算子の両側に数値が必要になります。この場合、2 つの数値の加算が行われます。DAX の数式で二項演算子の両側の値があらかじめ数値になっていなければ、数値以外の値が数値データ型にキャストされます。対照的に、単項演算子は、どのような型の引数にでも適用できます。プラス記号は、型や値に影響を及ぼすことはなく、単に無視されます。これに対し、マイナス演算子は、数値に適用された場合、負の値を表します。
比較演算子
次の演算子は、2 つの値を比較する際に使用します。 これらの演算子を使用して 2 つの値を比較すると、結果は TRUE または FALSE のいずれかの論理値になります。
比較演算子 |
意味 |
例 |
---|---|---|
= |
等しい |
[Region] = "USA" |
> |
より大きい |
[Sales Date] > "Jan 2009" |
< |
より小さい |
[Sales Date] < "Jan 1 2009" |
>= |
以上 |
[Amount] >= 20000 |
<= |
以下 |
[Amount] <= 100 |
<> |
等しくない |
[Region] <> "USA" |
テキスト連結演算子
2 つ以上のテキスト文字列を連結して 1 つのテキストを生成するには、アンパサンド (&) を使用します。
テキスト演算子 |
意味 |
例 |
---|---|---|
& (アンパサンド) |
2 つの値をつなげて (連結して)、1 つのテキスト値にします。 |
[Region] & ", " & [City] |
論理演算子
複数の式を組み合わせて単一の結果を生成するには、論理演算子 (&&) や (||) を使用します。
論理演算子 |
意味 |
例 |
---|---|---|
&& (二重アンパサンド) |
それぞれ結果がブール値になる 2 つの式の間に AND 条件を作成します。 両方の式から TRUE が返される場合、2 つの式の AND 条件からも TRUE が返されます。それ以外の場合は、FALSE が返されます。 |
([Region] = "France") && ([BikeBuyer] = "yes")) |
|| (二重パイプ記号) |
2 つの論理式の OR 条件を作成します。 どちらか一方の式から TRUE が返される場合、結果は TRUE になります。結果が FALSE になるのは、両方の式が FALSE のときだけです。 |
(([Region] = "France") || ([BikeBuyer] = "yes")) |
演算子と優先順位
計算の実行順序が戻り値に影響する場合もあるため、計算順序がどのようにして決まり、どのように変更すると目的の結果が得られるのかを理解しておくことが大切です。
計算順序
式内では演算子および値が特定の順序で評価されます。 すべての式は常に等号 (=) で始まります。 等号は、それに続く文字が式を構成していることを示します。
等号の後に続くのは、計算の対象となる要素 (オペランド) です。要素と要素は計算演算子で区切られます。 式は常に左から右へと読み取られますが、かっこを使って、要素がグループ化される順序をある程度は制御できます。
演算子の優先順位
1 つの数式に複数の演算子が使用されている場合は、次の表に従って演算子の序列が決定されます。 優先順位の等しい演算子が混在する場合は、左から右の順に優先順位が付けられます。 たとえば、式に乗算と除算の両方の演算子が含まれている場合、式に出現する順序で (左から右に) 評価されます。
演算子 |
説明 |
---|---|
^ |
累乗 |
– |
符号 (-1 など) |
* および / |
乗算と除算 |
! |
NOT (単項演算子) |
+ および – |
加算と減算 |
& |
2 つのテキスト文字列の結合 (連結) |
=< ><=>=<> |
比較 |
かっこの使用による計算順序の制御
評価の順序を変更するには、数式の中で、先に計算する必要のある部分をかっこで囲みます。 たとえば、次の数式の結果は 11 です。乗算の方が加算よりも先に計算されるためです。 まず 2 と 3 が乗算された後、その結果に対して 5 が加算されます。
=5+2*3
これに対し、かっこを使用して構文を次のように変更した場合は、先に 5 と 2 を加算し、その結果に 3 を乗じて 21 になるような計算順序に変更されます。
=(5+2)*3
次の例では、数式の最初の部分がかっこで囲まれているため、強制的に式 (3 + 0.25) が先に評価され、その結果が、式 (3 - 0.25) の結果で除算されます。
=(3 + 0.25)/(3 - 0.25)
次の例では、演算子の優先順位の規則に従って、最初に累乗演算子が適用され、次に符号演算子が適用されます。 この式の結果は -4 です。
=-2^2
最初に符号演算子が数値に適用されるようにするには、次の例に示すように、演算子を制御するかっこを使用できます。 この式の結果は 4 です。
= (-2)^2
互換性に関する注意事項
DAX はさまざまなデータ型の処理と比較を簡単に行うことができ、Microsoft Excel と非常によく似ています。 しかし、基になる計算エンジンは SQL Server Analysis Services を基盤としており、リレーショナル データ ストアの高度な機能が追加されています。日付と時間のデータ型に対する豊富なサポートもその 1 つです。 そのため、計算の結果や関数の動作が Excel の場合と異なる場合があります。 さらに、DAX では Excel よりも多くのデータ型がサポートされています。 ここでは、主な違いについて説明します。
オペランドのデータ型の強制型変換
一般に、演算子の右辺と左辺の 2 つのオペランドは、同じデータ型である必要があります。 ただし、データ型が異なる場合、比較できるように DAX によって次のように共通のデータ型に変換されます。
最初に、両方のオペランドが最大公約数的なデータ型に変換されます。
次に、オペランドが比較されます。
たとえば、オペランドに次の 2 つの数値を使用するとします。 数式 (=[Price] * .20 など) の結果として得られる数値。小数点以下の桁数が多く生じます。 文字列値として与えられた整数値。
この場合、DAX は、両方の数値を数値形式の実数に変換します。その際は、どちらの種類の数値も格納できる最大公約数的な数値形式が使用されます。 その後、値が比較されます。
これに対し、Excel は、共通の型への強制型変換は行わずに、異なる型の値を比較しようと試みます。 このため、同じ比較式でも DAX と Excel とで結果が異なる場合があります。
DAX で使用されるデータ型 |
Excel で使用されるデータ型 |
---|---|
Numbers (I8、R8) Boolean String DateTime Currency |
Numbers (R8) Boolean String Variant Currency |
暗黙的なデータ型変換の詳細については、「Data Types Supported in PowerPivot Workbooks」を参照してください。
優先順位の相違
演算子の優先順位は DAX の数式でも Microsoft Excel でも基本的には同じですが、Excel の一部の演算子 (% など) が DAX の数式ではサポートされません。 また、範囲もサポートされません。
したがって、Excel から式をコピーして貼り付ける場合は、無効な演算子や要素が式に含まれていないか慎重に確認するようにしてください。 演算子の実行順序に確信が持てない場合は、かっこを使って演算の順序を制御し、計算結果にあいまいな点が残らないようにすることをお勧めします。