DAX 演算子を使用する

完了

DAX 式では、演算子を使用して、算術計算、値の比較、文字列の操作、または条件のテストを実行する式を作成できます。

ヒント

DAX 演算子と優先順位の多くは、Excel のものと同じです。

算術演算子

次の表は、算術演算子の一覧です。

演算子 説明
+ 加算
- 減算
* 乗算
/ 除算
^ 累乗

2 つの式を除算するときに、分母がゼロまたは BLANK を返す可能性がある場合は、DIVIDE DAX 関数を使用する方が効率的で安全であることを覚えておいてください。

比較演算子

次の表は、2 つの値の比較に使用される比較演算子の一覧です。 結果は TRUE または FALSE のいずれかになります。

演算子 説明
= 等しい
== 厳密に等しい
> より大きい
< より小さい
>= 以上
<= 以下
<> 等しくない

厳密に等しい (==) を除くすべての比較演算子は、BLANK を、数値のゼロ、空の文字列 ("")、1899 年 12 月 30 日の日付、または FALSE に等しいものとして扱います。 これは、式 [Revenue] の値がゼロまたは空白の場合に式 [Revenue] = 0 が TRUE になることを意味します。 これに対して、[Revenue] == 0 が TRUE になるのは、[Revenue] の値がゼロの場合に限られます。

テキスト連結演算子

アンパサンド (&) 文字を使用して、2 つのテキスト値を接続または連結し、1 つの連続するテキスト値を生成します。 たとえば、次の計算列の定義について考えてみます。

Model Color = 'Product'[Model] & "-" & 'Product'[Color]

論理演算子

単一の結果を生成する式を組み合わせるには、論理演算子を使用します。 次の表に、すべての論理演算子を示します。

演算子 説明
&& それぞれ結果がブール値になる 2 つの式の間に AND 条件を作成します。 両方の式から TRUE が返される場合、式を組み合わせたものからも TRUE が返されます。それ以外の場合は、組み合わせたものから FALSE が返されます。
|| (二重パイプ) 2 つの論理式の間に OR 条件を作成します。 いずれかの式で TRUE が返される場合、結果は TRUE になります。両方の式が FALSE のときにのみ、結果は FALSE になります。
IN テーブルと比較される各行の間に論理 OR 条件を作成します。 注: テーブル コンストラクター構文では中かっこを使用します。
NOT ブール式の状態を反転します (FALSE から TRUE、またはその逆)。

論理演算子 IN を使用する例として、ANZ Revenue メジャー定義があります。これは、CALCULATE DAX 関数を使用して、オーストラリアとニュージーランドの 2 つの国の特定のフィルターを適用します。

注意

強力な CALCULATE 関数については、フィルター コンテキストの変更方法を学習するときに紹介します。

ANZ Revenue =
CALCULATE(
    [Revenue],
    Customer[Country-Region] IN {
        "Australia",
        "New Zealand"
    }
)

演算子の優先順位

DAX 式に複数の演算子が含まれている場合、DAX は "演算子の優先順位" と呼ばれているルールを使用して評価順序を決定します。 演算は、次の表に従って順序付けられます。

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

演算子の優先順位が同じときは、左から右に優先順位が付けられます。

一般に、演算子の優先順位は、Excel の場合と同じです。 評価順序をオーバーライドする必要がある場合は、かっこを使用して操作をグループ化してください。

たとえば、次の計算列の定義について考えてみます。

Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * 1 - [Unit Price Discount Pct]

このサンプル計算列の定義では、減算の前に乗算が行われるため、不適切な結果となります。 次の正しい計算列の定義では、かっこを使用して、乗算の前に減算が行われるようにしています。

Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * (1 - [Unit Price Discount Pct])

ヒント

演算子の優先順位の規則を覚えることは、特に DAX の初心者にとっては難しい場合があります。 そのため、数式を十分にテストすることをお勧めします。 評価順序が間違っているために数式で正しい結果が出ない場合は、かっこを追加して評価順序を調整してみることができます。 また、数式を読みやすくするために、かっこを追加することもできます。

DAX の演算子と優先順位の詳細については、「DAX 演算子」を参照してください。

暗黙的な型変換

演算子を使用して異なるデータ型を結合する DAX 式を記述する場合、型を明示的に変換する必要はありません。 DAX では通常、参照されるモデル オブジェクトのデータ型が自動的に識別され、指定された操作を完了するために必要な場合は暗黙的な型変換が行われます。

ただし、正常に変換できる値に関していくつかの制限が存在します。 値または列のデータ型が現在の操作と合わない場合、DAX からエラーが返されます。 たとえば、日付値を乗算しようとすると、論理的でないためエラーが発生します。

空白の処理方法は、使用されている演算子によって異なります。 Excel で空白が処理される方法と同様に処理されますが、データベース (SQL) で NULL が処理される方法とは異なります。 空白は、算術演算子によって処理される場合はゼロとして、文字列に連結される場合は空の文字列として扱われます。

ヒント

空白の処理方法を覚えることは、特に DAX の初心者にとっては難しい場合があります。 そのため、数式を十分にテストすることをお勧めします。 空白によって予期しない結果が出る場合は、IF および ISBLANK DAX 関数を使用して空白をテストし、適切な方法で応答することを検討してください。