PowerBIページ分割レポート（SSRS）にてPowerBIデータセットをソースにした場合の複数パラメータ値の利用方法

## 概要
複数のパラメータ値でデータを抽出するには、下記の３つの方法があるようです。
1. パラメータ値が複数ある場合に"|"にて結合して、PATHCONTAINS関数に繋げた列にてフィルタをを実施する方法
2. パラメータ値が複数ある場合に"|"にて結合して、仮想テーブルとリレーションシップを構築し、フィルタを実施する方法
3. ”複数の値をもつパラメータを有効にする”機能（RSCustomDaxFilter関数）にて、フィルタを実施する方法

 
##  結論
①が一番簡単ですが、パフォーマンスがでない可能性があるそうです。
②が実装が面倒ですが、パフォーマンスが比較的いいそうです。
③だと、レポートビルダーでしかデバックできないようですが、２番目に簡単です。

## 検証
### ①パラメータ値が複数ある場合に、"|"にて結合して、PATHCONTAINS関数に繋げた列にてフィルタを書ける方法
#### 手順
1.パラメータ作成後、フィルタを適応するデータセットのプロパティにおけるパラメータにて、下記の式を記入する
![image-20200222191535774.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/68f97f5a-1a8f-b541-70bf-fa9ef317035e.png)

```DAX
=Join(Parameters!p_sinryocode.Value,”|”)
```

2.下記のクエリに記載する
![image-20200222192104927.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a08537ec-383a-f332-cb69-42680409119c.png)

```DAX
EVALUATE
SUMMARIZECOLUMNS (
    '診療科目マスタ'[診療科目],
    FILTER (
        VALUES ( '診療科目マスタ'[診療科目コード] ),
         PATHCONTAINS(@p_sinryocode ,'診療科目マスタ'[診療科目コード])
    ),
    "科目数のカウント", [科目数のカウント]
)
```

#### 参考リンク
- [SSRS Multivalue Parameters in DAX](https://prologika.com/ssrs-multivalue-parameters-in-dax/)

### ②パラメータ値が複数ある場合に"|"にて結合して、仮想テーブルとリレーションシップを構築し、フィルタを実施する方法
####  手順
1.パラメータ作成後、フィルタを適応するデータセットのプロパティにおけるパラメータにて、下記の式を記入する
![image-20200222191535774.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/68f97f5a-1a8f-b541-70bf-fa9ef317035e.png)

```
=Join(Parameters!p_sinryocode.Value,”|”)
```

2.下記のクエリに記載する
![image-20200222192440794.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a73dcd66-a413-b8b2-8ebd-345cf22f1dd6.png)


```DAX
EVALUATE

//パラメータ名を記載すること
VAR OrderList = @p_sinryocode

//ここは定型文
VAR OrderCount =
    PATHLENGTH ( OrderList )
VAR NumberTable =
    GENERATESERIES ( 1, OrderCount, 1 )
VAR OrderTable =
    GENERATE (
        NumberTable,
        VAR CurrentKey = [Value]
        RETURN
            ROW ( "Key", PATHITEM ( OrderList, CurrentKey ) )
    )
VAR GetKeyColumn =
    SELECTCOLUMNS ( OrderTable, "Key", [Key] )
//ここまで定型文

//ここにフィルタをかけるテーブルを指定
VAR FilterTable =
    TREATAS ( GetKeyColumn, '診療科目マスタ'[診療科目コード])

RETURN

SUMMARIZECOLUMNS (
    '診療科目マスタ'[診療科目],
    FilterTable,
    "科目数のカウント", [科目数のカウント]
)
```

#### 参考リンク
- [A New Approach To Handling SSRS Multi-Valued Parameters in DAX Queries](https://blog.crossjoin.co.uk/2018/05/16/a-new-approach-to-handling-ssrs-multi-valued-parameters-in-dax-queries/)

### ③”複数の値をもつパラメータを有効にする”機能（RSCustomDaxFilter関数）にて、フィルタを実施する方法
#### 手順
1. データセットにて、"複数の値をもつパラメータを有効にする"を選択後、パラメータにてチェックを行う。
![image-20200222193515719.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5f5020f6-9054-2bce-c4af-9ffb64400845.png)

2. 自動で生成されるパラメータに、事前に作成したパラメータを設定する
![image-20200222193618635.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/884729f0-d8b7-c2bd-f6c3-a96dd3627452.png)


#### 注意事項
1.DAX クエリが長くなるとエラーになるようです。
![image-20200222193226688.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bb98f589-d477-b449-5349-2aa8932bf33a.png)


2.GUIでしか設定できない可能性があります。
![image-20200222193107396.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/832ae28b-f18e-2caa-384d-0b204cc3af3a.png)

#### 参考リンク
- [Power BI Report Builder And RSCustomDaxFilter](https://blog.crossjoin.co.uk/2019/11/03/power-bi-report-builder-and-rscustomdaxfilter/)