データ分析式 (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 が定義されたら、モデルを更新するか、コード レンズを使用して関数をモデルに追加できます。
TMDL ビューでも同じ例を作成できます。
createOrReplace
/// AddTax takes in amount and returns amount including tax
function AddTax = (amount : NUMERIC) => amount * 1.1
UDF が定義されたら、変更を適用してモデルに関数を追加できます。
ユーザー定義関数の管理
定義してモデルに追加すると、モデル エクスプローラー の [ Functions] ノード ですべてのユーザー定義関数を表示および管理できます。
DAX クエリ ビュー (DQV) では、モデル エクスプローラーを使用してクイック クエリを使用して、関数を簡単に定義および評価できます。
TMDL ビューでは、関数をキャンバスにドラッグ アンド ドロップしたり、Script TMDL を使用してモデル エクスプローラーを使用したりできます。
Power BI Project を使用する場合、関数は functions.tmdl フォルダー内の にも格納されます。
ユーザー定義関数を使用する
モデルに 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 個以上のパラメーターがサポートされます。 関数の安全性と予測性を高めるために、必要に応じてパラメーター型ヒントを指定できます。
-
型: パラメーターが受け取る値の種類 (
AnyVal、Scalar、Table、AnyRef、CalendarRef、ColumnRef、MeasureRef、またはTableRef)。 -
サブタイプ (スカラー型の場合のみ): 特定のスカラー データ型 (
Variant、Int64、Decimal、Double、String、DateTime、Boolean、または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 ユーザー定義関数に関するページを参照してください。
関連するコンテンツ
ユーザー定義関数の使用の詳細については、次のリソースを参照してください。