データ分析式 (DAX) 言語では、演算子を使用して、値の比較、算術計算の実行、または文字列の操作を行う式を作成します。
演算子の種類
計算演算子には、算術、比較、テキスト連結、論理の 4 種類があります。
算術演算子
加算、減算、乗算などの基本的な数学演算を実行する。数値を結合する。数値結果を生成する場合は、次の算術演算子を使用します。
| 算術演算子 | Meaning | Example |
|---|---|---|
+ (プラス記号) |
加算 | 3+3 |
- (負符号) |
減算または符号 | 3-1-1 |
* (アスタリスク) |
乗算 | 3*3 |
/ (フォワードスラッシュ) |
事業部 | 3/3 |
^ (カレット) |
累乗 | 16^4 |
注
プラス記号は、 二項演算子 と 単項演算子の両方として機能できます。 二項演算子は、演算子の両側に数値を必要とし、加算を実行します。 二項演算子の両側の DAX 数式で値を使用する場合、 DAX は、数値データ型がまだ数値でない場合は、値を数値データ型にキャストしようとします。 これに対し、単項演算子は任意の型の引数に適用できます。 プラス記号は型または値には影響せず、単に無視されますが、負の演算子では負の値が作成されます (数値に適用される場合)。
比較演算子
2 つの値を次の演算子と比較できます。 これらの演算子を使用して 2 つの値を比較すると、結果は論理値 ( TRUE または FALSE) になります。
| 比較演算子 | Meaning | Example |
|---|---|---|
= |
等しい | [Region] = "アメリカ合衆国" |
== |
厳密に等しい | [Region] == "USA" |
> |
より大きい | [販売日] > "Jan 2009" |
< |
より小さい | [販売日] < "Jan 1 2009" |
>= |
以上または等しい | [金額] >= 20000 |
<= |
以下または等しい | [金額] <= 100 |
<> |
等しくない | [Region] <> "USA" |
== を除くすべての比較演算子は、 BLANK を数値 0、空の文字列 ""、 DATE(1899、12、30)、または FALSEとして扱います。 その結果、[Column] の値が 0 または BLANKの場合、[Column] = 0 が true になります。 これに対し、[Column] == 0 は [Column] の値が 0 の場合にのみ true です。
テキスト連結演算子
アンパサンド (&) を使用して、2 つ以上のテキスト文字列を結合または連結して、1 つのテキストを生成します。
| テキスト演算子 | Meaning | Example |
|---|---|---|
& (アンパサンド) |
2 つの値を接続または連結して、1 つの連続テキスト値を生成します | [Region] & ", " & [City] |
論理演算子
論理演算子 (&&) と (||) を使用して式を結合し、1 つの結果を生成します。
| テキスト演算子 | Meaning | 例示 |
|---|---|---|
&&(二重アンパサンド) |
それぞれブール値の結果を持つ 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" } |
演算子と優先順位
場合によっては、計算の実行順序が Return 値に影響を与える場合があります。したがって、順序の決定方法と、目的の結果を得るために順序を変更する方法を理解することが重要です。
計算順序
式は、演算子と値を特定の順序で評価します。 すべての式は常に等号 (=) で始まります。 等号は、後続の文字が式を構成することを示します。
等号の後には、計算演算子で区切られた計算される要素 (オペランド) が続きます。 式は常に左から右に読み取られますが、要素がグループ化される順序は、かっこを使用してある程度制御できます。
演算子の優先順位
1 つの数式で複数の演算子を組み合わせると、次の表に従って演算が順序付けられます。 演算子の優先順位の値が等しい場合、演算子は左から右に並べ替えます。 たとえば、式に乗算演算子と除算演算子の両方が含まれている場合、式に表示される順序で左から右に評価されます。
| Operator | Description |
|---|---|
^ |
累乗 |
– |
符号 (-1 など) |
* および / |
乗算と除算 |
+ および – |
加算と減算 |
& |
テキストの 2 つの文字列を接続します (連結) |
=,==,<,>,<=,>=,<>,IN |
Comparison |
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
Compatibility
DAX は、Microsoft Excel と同様に、さまざまなデータ型を簡単に処理および比較できます。 ただし、基になる計算エンジンは SQL Server Analysis Services に基づいており、日付と時刻の種類に対する豊富なサポートなど、リレーショナル データ ストアの追加の高度な機能を提供します。 そのため、計算結果や関数の動作が Excel と同じでない場合があります。 さらに、 DAX では Excel よりも多くのデータ型がサポートされています。 このセクションでは、主な違いについて説明します。
オペランドのデータ型の強制変換
一般に、演算子の左右の 2 つのオペランドは同じデータ型である必要があります。 ただし、データ型が異なる場合、 DAX はそれらを共通のデータ型に変換して、場合によっては演算子を適用します。
- 両方のオペランドは、可能な限り最大の共通データ型に変換されます。
- 可能であれば、演算子が適用されます。
たとえば、結合する 2 つの数値があるとします。 =[Price] * .20 など、数式から 1 つの数値が生成され、結果に小数点以下の桁数が多い場合があります。 もう 1 つの数値は、文字列値として指定された整数です。
この場合、 DAX は、両方の種類の数値を格納できる最大の数値形式を使用して、両方の数値を数値形式で実数に変換します。 次 DAX 乗算が適用されます。
データ型の組み合わせによっては、比較操作に型強制適用が適用されない場合があります。 DAXでサポートされるデータ型の完全な一覧については、「表形式モデルでサポートされるデータ型」および「Power BI Desktop のデータ型」を参照してください。
整数、実数、通貨、日付/時刻、空白は、比較のために数値と見なされます。 比較を実行すると、空白は 0 に評価されます。 比較操作では、次のデータ型の組み合わせがサポートされています。
| 左側のデータ型 | 右側のデータ型 |
|---|---|
| Numeric | Numeric |
| ブール値 | ブール値 |
| 糸 | 糸 |
その他の混合データ型比較ではエラーが返されます。 たとえば、="1" > 0 などの数式は、 DAX 比較操作で Text 型の値と整数型の値の比較がサポートされていないことを示すエラーを返します。
| で使用されるデータ型 DAX | Excel で使用されるデータ型 |
|---|---|
| 数値 (I8、R8) | 数値 (R8) |
| 糸 | 糸 |
| ブール値 | ブール値 |
| DateTime | Variant |
| 通貨 | 通貨 |
優先順位の違い
DAX数式での操作の優先順位は、基本的に Microsoft Excel で使用される操作と同じですが、割合など、一部の Excel 演算子はサポートされていません。 また、範囲はサポートされていません。
そのため、Excel から数式をコピーして貼り付けるときは必ず、数式の一部の演算子または要素が無効な場合があるため、数式を慎重に確認してください。 操作の実行順序に疑問がある場合は、かっこを使用して操作の順序を制御し、結果に関するあいまいさを取り除くことをお勧めします。