DAX UDF: 一度コードを書く、どこでも再利用(プレビュー)| Microsoft Power BI ブログ

Power BIは、DAXユーザー定義関数(UDF)のサポートを開始しました。これにより、パラメータを持つ再利用可能な関数を定義でき、複数のメジャーでロジックを再利用可能になります。DAX UDFは、計算グループとは異なり、パラメータ化が可能で、柔軟性が向上します。UDFは、DAXがサポートされている場所で使用でき、簡単に作成・管理できます。新機能により、より効率的で理解しやすいモデルが構築可能になります。

DAX UDFs の概要と活用法

はじめに

Power BI はこれまで、Power Query においてカスタム関数をサポートしてきましたが、DAX には同様の機能がありませんでした。しかし、今回新たに導入された DAX ユーザー定義関数(UDFs)により、プログラミングの伝統的な手法を用いた再利用可能な関数の定義が可能になりました。

DAX ユーザー定義関数を使用することで、複数のメジャーにわたってロジックをコピー&ペーストする必要がなくなり、一度定義すればモデルのどこでも再利用できます。これによって、コードの記述、理解、保守、デバッグが容易になり、複雑なモデルやクリーンで保守性の高い DAX を目指すことができます。

DAX UDFs は、計算グループとは異なり、パラメータ化をサポートしており、より高い柔軟性と再利用性を実現します。

DAX UDFs の始め方

DAX UDFs を有効にするには、Power BI Desktop のオプションと設定セクションに移動し、「DAX ユーザー定義関数」機能をオンにします。

スクリーンショット

DAX ユーザー定義関数を有効化

有効化後は、次の方法で UDFs を定義できます。

関数を定義した後は、DAX がサポートされている場所—メジャー、計算列、視覚的計算—でどこでも使用できます。

関数の定義

関数は DAX クエリビュー (DQV) または TMDL ビューを使用して定義できます。基本的な関数の構造は以下の通りです。

/// [関数の説明]

FUNCTION <functionname> = ( [parameter name] : [parameter type] ) =>
<functionname>

以下は、DQV を使用して 2 つのパラメータ(a と b)を取り、それらを掛け算して結果を返すトリビアルな関数 Multiply を定義し評価するシンプルな例です。

DEFINE
    /// Multiply は 2 つのパラメータを受け取り、掛け算の結果を返します
    FUNCTION Multiply = (
            a,
            b
        ) =>
        a * b

EVALUATE {
    Multiply(6, 7) // 結果は 42
}

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

DAX UDFs の管理

関数をモデルに追加した後、モデルエクスプローラーに表示されます。DAX クエリビューでは、迅速なクエリを使用して関数を定義したり評価したりできます。TMDL ビューでは、関数をキャンバスにドラッグ&ドロップするか、右クリックメニューを使ってスクリプトを生成できます。

スクリーンショット

モデルエクスプローラー

DAX UDFs を使用して強力なビジネスロジックを定義することが可能です。

DAX UDFs の使用

モデルに追加された関数は、あらゆる DAX 式から呼び出すことができます。たとえば、税金を計算する関数 AddTax を定義し、以下のように使用します。

DEFINE
    /// AddTax は、税金を含む金額を返します
    FUNCTION AddTax = (amount: numeric) => amount * 1.1

TotalWithTax = AddTax([Total Sales])

この場合、Total Sales はメジャーを指します。

パラメータの扱い

DAX UDFs はゼロまたはそれ以上のパラメータをサポートし、パラメータの型を指定することで耐障害性を追加できます。

パラメータの例

x: scalar int64 val

上記のように書くことで、x が整数値であることを指定できます。異なるデータ型に対応した関数を作成することで、関数の汎用性を高めます。

高度な例: 柔軟な通貨変換

DAX UDFs による高度なロジックを示す例として、通貨変換のシナリオを考えてみましょう。以下の関数は、指定された日付の平均または終値の為替レートを用いて、金額をターゲット通貨に変換します。

function convertToCurrency =
    (
        p_currency: variant,
        p_date: variant,
        p_use_average_rate: boolean,
        p_amount: decimal
    ) =>
        var exchange_rate =
            IF (
                p_use_average_rate,
                CALCULATE(MAX('Currency Rate'[Average Rate]), ...),
                CALCULATE(MAX('Currency Rate'[End Of Day Rate]), ...)
            )
        RETURN exchange_rate * p_amount

このロジックをもとにした「ローカル通貨での合計売上」というメジャーを定義することで、適切にフォーマットされた売上額を表示できます。

まとめ

DAX ユーザー定義関数は、Power BI における柔軟性と再利用性の新たなレベルを解放します。ぜひプレビューを有効にし、可能性を探求してください。詳細については、公式ドキュメントをご覧ください。あなたが作成するものを見るのを楽しみにしています!

————-

DAX UDFs: Code once, reuse everywhere (Preview) | Microsoft Power BI Blog

Source link

Power BI now supports DAX User-Defined Functions (UDFs), allowing users to create reusable functions with parameters, similar to traditional programming. This enhances code maintainability, reduces duplication, and improves flexibility compared to DAX’s prior capabilities.

Key Features of DAX UDFs:

  • Reusable Functions: Write once, use anywhere in your model (measures, calculated columns, etc.).
  • Parameterization: Unlike calculation groups, DAX UDFs allow for parameters, unlocking new levels of functionality.
  • Easy Management: Functions are managed via DAX Query View (DQV) or TMDL, and can be easily defined and evaluated.

Getting Started:

To enable DAX UDFs, go to Power BI Desktop under Options > Preview features. You can define functions in either DQV or TMDL.

Basic Definition Structure:

FUNCTION Name = (parameter_name : parameter_type) => expression

Example Function:

DEFINE
    FUNCTION Multiply = (a, b) => a * b
EVALUATE {
    Multiply(6, 7) // Returns 42
}

Function Usage:

Once defined, functions can be called in DAX expressions like:

TotalWithTax = AddTax([Total Sales])

Parameters & Type Checking:

  • Supports multiple parameter types, including scalar and table.
  • Type-checking functions help validate parameter types.
  • Implicit casting allows for flexible input types.

Advanced Example – Currency Conversion:

Functions can handle complex scenarios, such as converting currencies depending on the date and rate type:

function convertToCurrency = (p_currency: variant, p_date: variant, p_use_average_rate: boolean, p_amount: decimal) => { ... }

Conclusion:

DAX UDFs significantly enhance the Power BI experience by providing greater flexibility and reusability. Users are encouraged to explore this feature and expand their DAX capabilities. For further information, refer to the official documentation.

関連記事