DAX ユーザー定義関数

データ分析式 (DAX) ユーザー定義関数 (UDF) を使用すると、再利用可能なパラメーター化された DAX ロジックをモデルにパッケージ化できるため、DAX コードの記述、保守、共有が容易になります。 UDF は、メジャー、計算列、ビジュアル間で数式を繰り返す代わりに、セマンティック モデルにプログラミング スタイルの柔軟性をもたらします。これにより、関数を 1 回定義し、DAX がサポートされているすべての場所で使用できます。

DAX UDF は、Power BI Desktop および 2026 年 6 月リリース以降の Power BI サービスで一般提供されています。 詳細については、 DAX ユーザー定義関数に関するページを参照してください。

ユーザー定義関数を使用する理由

  • 再利用性と一貫性: 計算を 1 回定義し、あらゆる場所で再利用します。
  • 保守容易性: ルールを修正または進化させるために、ロジックを 1 か所で更新します。
  • より安全な作成: 省略可能な型ヒントと型チェック ヘルパーは、予測可能でエラーに強いコードをサポートします。
  • 最上位モデル オブジェクト: UDF はモデル内に存在し、モデル エクスプローラーで表示できます。

関数を定義する

DAX クエリ ビュー (DQV)、TMDL ビュー、またはモデル ビューを使用して、Power BI Desktop でユーザー定義関数定義できます。 Power BI Service Web モデリングを使用して、ブラウザーで UDF を表示および編集することもできます。

一般的な構文

UDF の一般的な構文は次のとおりです。

/// Optional description above the function
/// @param {ParameterType} ParameterName - ParameterDescription
/// ...
/// @returns Return description
FUNCTION <FunctionName> = ( [<ParameterName> [: [<ParameterType>] [<ParameterSubtype>] [<ParameterPassingMode>]] [= <DefaultExpression>], ...] ) => <FunctionBody>

例: 単純な税関数

指定した金額に税金を加算する DQV の簡単な例を次に示します。 DQV で UDF を評価することもできます。

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

EVALUATE
{ AddTax ( 10 ) }
// Returns 11

UDF が定義されたら、モデルを更新するか、コード レンズを使用して関数をモデルに追加できます。

Power BI Desktop の DAX クエリ ビューのスクリーンショット。ユーザー定義関数を保存できる 2 か所が強調表示されています。1 つ目は、ビュー上部にある [変更を反映してモデルを更新] ボタンです。2 つ目は、コード エディター内の [モデルの更新: 新しい関数の追加] というラベルのステータス行です。

TMDL ビューでも同じ例を作成できます。

createOrReplace
    /// AddTax takes in amount and returns amount including tax
    function AddTax = (amount : NUMERIC) => amount * 1.1

UDF が定義されたら、変更を適用してモデルに関数を追加できます。

Power BI Desktop の TMDL ビューのスクリーンショット。ビューの上部にある [適用] ボタンが強調表示されています。このボタンからユーザー定義関数を保存できます。

ユーザー定義関数の管理

定義してモデルに追加すると、モデル エクスプローラー の [ Functions] ノード ですべてのユーザー定義関数を表示および管理できます。

Power BI Desktop のモデル エクスプローラー パネルで、展開された関数ノードを示すスクリーンショット。3 つのユーザー定義関数 AddTax、AverageOrderValue、CustomerLifetimeValue が一覧表示されています。

DAX クエリ ビュー (DQV) では、モデル エクスプローラーを使用してクイック クエリを使用して、関数を簡単に定義および評価できます。

Power BI Desktop のモデル エクスプローラー ペインのスクリーンショットには、展開された [Functions] ノードが表示されています。2 つのコンテキスト メニューが開いています。1 つ目のメニューには、[Quick queries]、[Rename]、[Delete from model]、[Hide in report view]、[Unhide all]、[Collapse all]、[Expand all] が表示されています。[Quick queries] が強調表示され、選択されています。2 つ目のメニューも強調表示されており、[Quick queries] のオプションとして [Evaluate]、[Define and evaluate]、[Define new function]、[Define all functions in this model] が表示されています。

TMDL ビューでは、関数をキャンバスにドラッグ アンド ドロップしたり、Script TMDL を使用してモデル エクスプローラーを使用したりできます。

Power BI Desktop のモデル エクスプローラー ペインのスクリーンショットで、展開された Functions ノードが表示されています。2 つのコンテキスト メニューが開いています。最初のメニューには、Script to TMDL、Rename、Delete from model、Hide in report view、Unhide all、Collapse all、Expand all が表示されています。Script to TMDL が強調表示され、選択されています。2 番目のメニューも強調表示されており、Script to TMDL のオプションとして Script tab と Clipboard が表示されています。

Power BI Project を使用する場合、関数は functions.tmdl フォルダー内の にも格納されます。

Power BI プロジェクトの Visual Studio Code のスクリーンショット。セマンティック モデル フォルダーに対してエクスプローラーが開いています。コード エディターで 'functions.tmdl' が開いています。CustomerLifetimeValue、AverageOrderValue、AddTax の 3 つの関数が表示されます。

ユーザー定義関数を使用する

モデルに UDF を追加した後は、DAX がサポートされている任意の場所で使用できます。 ここでは、例として AddTax を使用します。

完全なフィルター コンテキストで メジャー と共に UDF を使用する。

Total Sales with Tax = AddTax ( [Total Sales] )

計算列を含むテーブルのすべての行に UDF を適用します。

Sales Amount with Tax = CONVERT ( AddTax ( 'Sales'[Sales Amount] ), CURRENCY )

ビジュアル計算でビジュアル内の UDF を直接使用します。

Sales Amount with Tax = AddTax ( [Sales Amount] )

UDF を高度なシナリオ向けに入れ子にする。

DEFINE
    /// AddTax takes in amount and returns amount including tax
    FUNCTION AddTax = (
            amount : NUMERIC
        ) =>
        amount * 1.1

	FUNCTION AddTaxAndDiscount = (
			amount : NUMERIC,
			discount : NUMERIC
		) =>
		AddTax ( amount - discount )

EVALUATE
{ AddTaxAndDiscount ( 10, 2 ) }
// Returns 8.8

Parameters

DAX UDF では、0 個以上のパラメーターがサポートされます。 関数の安全性と予測性を高めるために、必要に応じてパラメーター型ヒントを指定できます。

  • : パラメーターが受け取る値の種類 (AnyValScalarTableAnyRefCalendarRefColumnRefMeasureRef、または TableRef)。
  • サブタイプ (スカラー型の場合のみ): 特定のスカラー データ型 (VariantInt64DecimalDoubleStringDateTimeBoolean、または Numeric)。
  • ParameterMode: 引数を評価するタイミング(即時評価の場合は val、遅延評価の場合は expr)。

型ヒントは次の形式に従います。 [type] [subtype] [parameterMode]

例: 型キャスト

DEFINE
    /// returns x cast to an Int64
    FUNCTION CastToInt = (
            x : SCALAR INT64 VAL
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

この例では、 Scalar 型、 Int64 サブタイプ、および val parameterMode を使用します。 次の例に示すように、 Int64 サブタイプを含むだけで、同じ効果を得ることもできます。 数値以外の文字列を指定すると、エラーが発生します。

DEFINE
    /// returns x as an Int64
    FUNCTION CastToInt = (
            x : INT64
        ) =>
        x

EVALUATE
{ CastToInt ( 3.4 ), CastToInt ( 3.5 ), CastToInt ( "5" ) }
// returns 3, 4, 5

型チェック

次のような組み込みの DAX 型チェック関数を使用して、関数内のパラメーター型を検証します。

使用可能な型チェック関数の完全な一覧については、 DAX ユーザー定義関数に関するページを参照してください。

ユーザー定義関数の使用の詳細については、次のリソースを参照してください。