Power BI  "パラメーター" 解説

:::note info
この記事は「[NEXTSCAPE Advent Calendar 2024](https://qiita.com/advent-calendar/2024/nextscape)」の15日目の記事です。
:::

Azureビジネス部 堀越です。
弊社 Power BI 担当として頑張っています。

Power BI には"パラメーター"と呼ばれる機能が大きく2つあります。
**「クエリパラメーター」** と **「フィールドパラメーター」** です。
今回は使い分けができることをめざしたざっくり解説をします。

# ①クエリパラメーター
**Power Query エディタ内（M言語記述）で利用できる**任意の値を持たせることができます。
公式Doc上では「（ただの）パラメーター 」として記載されていることもあります。

https://learn.microsoft.com/ja-jp/power-query/power-query-query-parameters#using-parameters

Power BI Service に発行後、 
**[セマンティックモデルの設定画面からパラメーター値を変更できる](https://learn.microsoft.com/ja-jp/power-bi/connect-data/service-parameters)** ところがポイントです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/2a3b3100-d4ec-c9fd-d3c1-dff5657ab9a5.png)

## 作成方法
Power BI Desktop >  「ホームタブ」 > 「データの変換」で Query エディタウィンドウを開く > 
「ホーム」タブ > 「パラメーターの管理」 もしくは 「新しいパラメーター」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/d8360a84-1280-f606-e7b4-b95d6de15387.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/a80bf6ab-1e43-286e-c547-dc41ddbbec85.png)

### 種類
Power BI の型の種類
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/fdf63d73-7cd3-bfae-a3a5-9eb10fbfd1a4.png)

### 提案された値
パラメーター値の種類
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/5116e2b7-9be7-541e-3464-8309aa8fe527.png)
- 任意の値：自由入力
- 値の一覧：リスト（ここで作成、Excelからコピペ可能）から値を選択
- クエリ：リスト形式の別のクエリから値を選択

### 備考
Power BI Desktop > 「ホーム」タブ > 「データの変換」ドロップダウン > 「パラメーターの編集」もありますが、こちらは作成したクエリパラメーターの値を変更するための機能です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/20ac52bf-aacf-599d-22c2-4560410ca708.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/b02eb24d-6774-1deb-9850-edd5237dd09e.png)


## 利用パターン_1 データセット作成時の設定管理
 **レポート作成者や編集者のみが管理を行う、データ取得やクレンジングにて利用します。** 
 Power BI Service に発行後も設定画面から値の確認や変更が行えるので便利です。
 ※後述の動的Mクエリパラメーターとして使う場合は除く
 - データ取得時の接続情報
- 開始日・終了日による期間指定
- クレンジングに利用したい変更可能性のある定数（フィルターの値） など


## 利用パターン_2 動的Mクエリパラメーター
**Direct Query を利用する場合は、** クエリパラメーターをレポート画面上のスライサーと連動させ、閲覧者にもパラメーター値の変更を行わせることができます。

https://learn.microsoft.com/ja-jp/power-bi/connect-data/desktop-dynamic-m-query-parameters


## 利用パターン_3  カスタム関数
クエリ内で複数回同じ処理を繰り返したい場合、その処理をカスタム関数化することで、他のクエリから呼び出しを行うことができます。
カスタム関数へ渡す値をパラメーターで指定します。

https://learn.microsoft.com/ja-jp/power-query/custom-function

### 例：ファイルの結合時に自動的に作られるカスタム関数とパラメーター
#### カスタム関数「ファイルの変換」
csvファイルを読み込むクエリをカスタム関数化したもの。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/fabdf990-ebca-1ede-83cd-098f9755dc77.png)

#### パラメーター「パラメーター1」
読み込む対象のBinaryデータを指定。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/d02d2eaa-77df-a864-2116-dcee4c08a41e.png)

#### カスタム関数の呼び出しステップ
パラメーターとしてクエリ内のContent列を指定することで複数ファイルを同時に読み込むことができるつくり。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/f49db85c-43f4-9400-6792-75d9e07e61e9.png)

## クエリパラメーター参考記事
クエリパラメーターについては、
@spumoniさんの記事「[(Power BI) Mから始めよう #8 〜クエリ・パラメータの各種使い方](https://qiita.com/spumoni/items/4badf29d0b3e170fa15b#%EF%BD%83%E5%8B%95%E7%9A%84%EF%BD%8D%E3%82%AF%E3%82%A8%E3%83%AA%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF)」により詳しく書いてくださっています。

# ②フィールドパラメーター
**レポート画面側でメジャーやビジュアルに使用できる**任意の値を持たせることができます。

## 作成方法
Power BI Desktop > 「モデリング」タブ > 「新しいパラメーター」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/202721d2-7630-9c52-d481-e1b181b65388.png)

データとして追加されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/0c345f94-ba66-5d94-4d41-2e0902ea9950.png)

モデリングタブにも同様。
※基本的にはパラメーターはリレーションシップは貼らず、必要がある場合はDAX関数の記述の中で指定するものだと理解しています
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/d2875a56-4f44-92b7-9e37-e90238d12303.png)

## ②-1 フィールドパラメーターを"数値範囲"で作成
最小と最大を定めた数値のリストのパラメーターを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/6e3870fc-0568-6178-d961-1def2c495dcb.png)

### データ型選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/410dad6f-0617-a952-c50d-e5a663f94bfc.png)

### スライサー追加
「このページにスライサーを追加」にチェックを入れておくとスライサーを追加してくれる
見た目は書式タブから変更可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/934f758c-1788-eaa0-333e-95ac88c2c276.png)

### 作成結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/a4474f87-e5ad-bd5f-2673-ed97546ef6b7.png)
```
②フィールドパラメーター1 = GENERATESERIES(1, 20, 1)
```
```
②フィールドパラメーター1 の値 = SELECTEDVALUE('②フィールドパラメーター1'[②フィールドパラメーター1])
```

### フィールドパラメーター"数値範囲"例①
公式Docでは割引率をパラメーターとして作成することで、閲覧者が任意の割引率で可視化を行えるようにしています。

https://learn.microsoft.com/ja-jp/power-bi/transform-model/desktop-what-if

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/d7e87f26-89ff-cd35-cc08-87ce81d74caf.png)

### フィールドパラメーター"数値範囲"例②
X軸が年月、Y軸が売上高の棒グラフで当年度と前年度の売上高を表示したい。
通常通りカレンダーマスタの年度をスライサーに設定し、当年度集計用のメジャーと前年度集計用のメジャーを設定する場合
X軸は選択年度のみが表示されるが、（左の棒グラフ）
前年度と選択年度でX軸を分けたい。（右の棒グラフ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/07a2676b-e4b7-5ee7-711e-b409aa4c2e85.png)

#### 1.年度パラメーターを作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/866e35e4-260a-360c-6a08-c0db9da5267a.png)

- 年度パラメーター
    - パラメーター作成画面では設定値にメジャーは入れられないので、数式バーにて修正。
```
年度パラメーター = GENERATESERIES(2022, [#currentYYYY], 1)
```
- 年度パラメーターの値
    - パラメーター作成時に自動的に作られる。選択されているパラメーター値を取得する。
```
年度パラメーター の値 = SELECTEDVALUE('年度パラメーター'[年度パラメーター])
```
- 表示用年度パラメーター の作成。スライサー設定用。

```
表示用年度パラメーター = [年度パラメーター] & "年度"
```

#### 2.選択年度と前年度の累計金額を出力するメジャーを作成してグラフのY軸に設定。
年度パラメーターを FIRTER 関数に入れた CALCULATE 関数
```
#累計金額_当年度と前年度 = 
VAR selectedPramYYYY = [年度パラメーター の値]
RETURN
    CALCULATE(
        [#累計金額],
        FILTER(
            'カレンダーマスタ',
            OR(
            'カレンダーマスタ'[年度_YYYY] = selectedPramYYYY-1,
            'カレンダーマスタ'[年度_YYYY] = selectedPramYYYY
            )
        )
    )
```

## ②-2 フィールドパラメーターを"フィールド"で作成
"フィールドに格納されている値"ではなく"フィールドそのもの"の切り替えを行うためのパラメーターを作成します。

https://learn.microsoft.com/ja-jp/power-bi/create-reports/power-bi-field-parameters

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/02d23c3e-83a1-2293-80cd-54fec03eac65.png)

予実区分マスタから「予実区分名」フィールドを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/17b5cf66-5fce-6949-1e60-d91633a0121c.png)

利益区分マスタから「利益区分名マスタ」フィールドを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/719df2a8-2d82-251e-506d-89388e01cbd5.png)

### スライサー追加
「このページにスライサーを追加」にチェックを入れておくとスライサーを追加してくれる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/3b4225ab-92f7-55be-4919-97cc9210e894.png)

### 作成結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/4f55e27d-f469-5dde-34b6-db907bb98ec3.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/40200832-b3a0-21f3-9263-3fd09dcc4c54.png)

### フィールドパラメーター"フィールド"利用例①
公式DocではグラフのY軸を同じテーブル内の複数のフィールドに切り替えられる例を載せています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/2caecacf-9be2-008a-ff67-f5275b6491ce.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/b08d1673-13ca-1757-1000-3acb4f2d94f2.png)

https://learn.microsoft.com/ja-jp/power-bi/create-reports/power-bi-field-parameters

### フィールドパラメーター"フィールド"利用例②

グラフのX軸を異なるテーブルのフィールド間で切り替える例です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/02d23c3e-83a1-2293-80cd-54fec03eac65.png)

作成したフィールドパラメーターを棒グラフのX軸に設定します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/f11b130f-a127-4aaa-cff7-5d11b441ba98.png)

フィールドパラメーターのスライサーで棒グラフのX軸を切り替えることができます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/d87b0e45-0003-29f4-5ebc-f8af4301860b.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/b97eea6b-2f8d-cf88-0a1c-4ff7d7b4e67c.png)

## フィールドパラメーター参考記事
フィールドパラメーターについては、[Fabric CAT](https://x.com/marshal_dabao) さんがブログ「[テクテク日記](https://marshal115.hatenablog.com/about)」で丁寧に解説してくださっています。

https://marshal115.hatenablog.com/entry/2022/05/20/192120

https://marshal115.hatenablog.com/entry/2022/09/13/223647

https://marshal115.hatenablog.com/entry/2023/12/04/234525

# 雑感
フィールドパラメーターができる前、数値範囲の場合は
「パラメーター値のリストとしてのテーブル」「選択値を取得するSelectedValueメジャー」を自前で作成してパラメーターとして使っていました。

(その際 @PowerBIxyz (Takeshi Kagata) さんのこちらの記事を大いに参考にさせていただきました)

https://qiita.com/PowerBIxyz/items/5f26ceb2648f8221f5ce

今もこの方法は使えますが、データタブのアイコンで「パラメーターだよ！」というのがわかるし、
「フィールドのフィールドパラメーター」はレポートの作り方がかなり広がったなあと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/431807/6a8d00a1-9955-58fb-b975-42186eee91cc.png "❤ Have a wonderful end of the year ❤")

終わりです。誰かのお役に立てれば幸いです。来年のわたしとか。