DAX 演算子

Data Analysis Expression (DAX) 言語では、演算子を使用し、値を比較したり、算術計算を実行したり、文字列を操作したりする式を作成します。

演算子の種類

計算演算子には、算術、比較、テキスト連結、論理の 4 種類があります。

算術演算子

次の算術演算子を使用し、加算、減算、乗算などの基本的な算術演算を実行したり、数値を結合したり、数値による結果を生成したりします。

算術演算子 意味
+ (プラス記号) 加算 3+3
– (マイナス記号) 減算または符号 3–1–1
* (アスタリスク) 乗算 3*3
/ (スラッシュ) 除算 3/3
^ (キャレット) 累乗 16^4

注意

プラス記号は二項演算子としても単項演算子としても機能します。 二項演算子の場合、演算子の両側に数値が必要になり、加算を実行します。 DAX 式で二項演算子の両側に値を使用すると、DAX では、その値が数値ではない場合、数値データ型への型変換が試行されます。 対照的に、単項演算子はあらゆる型の引数に適用できます。 プラス記号は型や値に影響を与えず、単純に無視されますが、マイナス記号の場合、数値に適用されると値が負になります。

比較演算子

2 つの値を次の演算子で比較できます。 これらの演算子で 2 つの値が比較されると、結果は論理値 (TRUE または FALSE) になります。

比較演算子 意味
= 等しい [Region] = "USA"
== 厳密に等しい [Region] == "USA"
> より大きい [Sales Date] > "Jan 2009"
< より小さい [Sales Date] < "Jan 1 2009"
>= 以上 [Amount] >= 20000
<= 以下 [Amount] <= 100
<> 等しくない [Region] <> "USA"

== を除くすべての比較演算子では、BLANK は数値の 0、空の文字列 ""、DATE(1899, 12, 30)、または FALSE に等しいものとして処理されます。 結果的に、[Column] の値が 0 か BLANK のとき、[Column] = 0 は true になります。 対照的に、[Column] == 0 は [Column] の値が 0 のときにのみ true になります。

テキスト連結演算子

アンパサンド (&) を使い、2 つ以上のテキスト文字列を結合 (連結) して、1 つのテキストにします。

テキスト演算子 意味
& (アンパサンド) 2 つの値を接続 (連結) し、連続する 1 つのテキスト値を生成します。 [Region] & ", " & [City]

論理演算子

論理演算子 (&&) と (||) を使って式を結合し、1 つの結果を生成します。

テキスト演算子 意味
&& (二重アンパサンド) それぞれに結果としてブール値が与えられる 2 つの式の間に AND 条件を作成します。 両方の式で TRUE が返される場合、式を組み合わせても TRUE が返されます。それ以外の組み合わせでは FALSE が返されます。 ([Region] = "France") && ([BikeBuyer] = "yes"))
|| (二重パイプ記号) 2 つの論理式の間に OR 条件を作成します。 いずれかの式で TRUE が返される場合、結果は TRUE になります。両方の式が FALSE のときにのみ、結果は FALSE になります。 (([Region] = "France") || ([BikeBuyer] = "yes"))
IN テーブルと比較される各行の間に論理 OR 条件を作成します。 注: テーブル コンストラクター構文では、中かっこが使用されます。 'Product'[Color] IN { "Red", "Blue", "Black" }

演算子と優先順位

計算の実行順序が戻り値に影響を与える場合があります。そのため、順序が決定されるしくみと求める結果を得るために順序を変更する方法を理解しておくことが重要です。

計算順序

式では、演算子と値が特定の順序で評価されます。 式はすべて、常に等号 (=) で始まります。 等号は、後続の文字により式が作られることを示します。

等号の後に続くのは、計算される要素 (オペランド) です。要素は計算演算子で区切られます。 式は常に左から右に読み取られますが、要素がグループ化される順序は括弧を使用することである程度まで制御できます。

演算子の優先順位

1 つの数式で複数の演算子を組み合わせる場合、次の表に基づき、演算の順序が決定されます。 演算子の優先順位値が同じ場合、左から右にという順序になります。 たとえば、式に乗算演算子と除算演算子の両方が含まれている場合、式に出現する順序で左から右に評価されます。

演算子 説明
^ 累乗
符号 (-1 など)
* と / 乗算と除算
+ と – 加算と減算
& 2 つのテキスト文字列を接続します (連結)
=、==、<、>、<=、>=、<>、IN 比較
NOT NOT (単項演算子)

括弧を使用して計算順序を制御する

評価順序を変更するには、数式の中で先に計算する部分を括弧で囲みます。 たとえば、次の数式では、加算の前に乗算が計算されるため、答えは 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 を基礎としており、リレーショナル データ ストアの高度な追加機能を提供します。たとえば、日付型や時刻型のサポートが充実します。 そのため、計算の結果または関数の動作が Excel とは異なる場合があります。 さらに、DAX の場合、サポートされているデータ型が Excel より多くなります。 このセクションでは主な違いについて説明します。

オペランドのデータ型を強制する

一般的に、演算子の両側のオペランドは 2 つとも同じデータ型にする必要があります。 しかしながら、データ型が異なる場合、DAX では、一般的なデータ型に変換され、演算子が適用されることがあります。

  1. 両方のオペランドが、可能な限り最大の一般的なデータ型に変換されます。
  2. 可能であれば、演算子が適用されます。

たとえば、2 つの数値を結合するとします。 =[Price] * .20 など、ある数式からある数値が生成され、結果にはたくさんの小数点以下桁数が含まれる可能性があります。 もう 1 つの数値は、文字列値として与えられている整数です。

この場合、DAX では、両方の種類の数値を格納できる最大の数値形式を使用し、数値形式の実数に両方の数値が変換されます。 次に、DAX では乗算が適用されます。

データ型の組み合わせによっては、比較演算の場合、型が強制されないことがあります。 DAX でサポートされているデータ型の完全な一覧については、「テーブル モデルでサポートされるデータ型」と「Power BI Desktop でのデータ型」をご覧ください。

Integer、Real Number、Currency、Date/Time、Blank は比較目的では数値であると見なされます。 比較の際、Blank の値はゼロになります。 比較演算では、次のデータ型の組み合わせがサポートされています。

左側のデータ型 右側のデータ型
数値 数値
ブール値 Boolean
String 文字列

データ型が混在するその他の比較ではエラーが返されます。 たとえば、="1" > 0 のような数式では、"DAX 比較演算では、Text 型の値と Integer 型の値を比較できない" というエラーが返されます。

DAX で使用されるデータ型 Excel で使用されるデータ型
数値 (I8、R8) 数値 (R8)
文字列 文字列
ブール値 Boolean
DateTime バリアント
通貨 通貨

優先順位の違い

DAX 数式における演算の優先順位は Microsoft Excel のそれと基本的に同じですが、パーセントなど、一部の Excel 演算子はサポートされていません。 また、範囲がサポートされていません。

そのため、Excel から数式をコピーして貼り付けるときは必ず、数式を慎重に見直してください。数式内の一部の演算子または要素が無効な場合があります。 演算の実行順序に自信が持てない場合、括弧を使用して演算の順序を制御し、結果に関するあいまいさを取り除くことをお勧めします。

DAX の構文
DAX パラメーターの命名