概要
複数のパラメータ値でデータを抽出するには、下記の3つの方法があるようです。
- パラメータ値が複数ある場合に"|"にて結合して、PATHCONTAINS関数に繋げた列にてフィルタをを実施する方法
- パラメータ値が複数ある場合に"|"にて結合して、仮想テーブルとリレーションシップを構築し、フィルタを実施する方法
- ”複数の値をもつパラメータを有効にする”機能(RSCustomDaxFilter関数)にて、フィルタを実施する方法
結論
①が一番簡単ですが、パフォーマンスがでない可能性があるそうです。
②が実装が面倒ですが、パフォーマンスが比較的いいそうです。
③だと、レポートビルダーでしかデバックできないようですが、2番目に簡単です。
検証
①パラメータ値が複数ある場合に、"|"にて結合して、PATHCONTAINS関数に繋げた列にてフィルタを書ける方法
手順
1.パラメータ作成後、フィルタを適応するデータセットのプロパティにおけるパラメータにて、下記の式を記入する
=Join(Parameters!p_sinryocode.Value,”|”)
EVALUATE
SUMMARIZECOLUMNS (
'診療科目マスタ'[診療科目],
FILTER (
VALUES ( '診療科目マスタ'[診療科目コード] ),
PATHCONTAINS(@p_sinryocode ,'診療科目マスタ'[診療科目コード])
),
"科目数のカウント", [科目数のカウント]
)
参考リンク
②パラメータ値が複数ある場合に"|"にて結合して、仮想テーブルとリレーションシップを構築し、フィルタを実施する方法
手順
1.パラメータ作成後、フィルタを適応するデータセットのプロパティにおけるパラメータにて、下記の式を記入する
=Join(Parameters!p_sinryocode.Value,”|”)
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,
"科目数のカウント", [科目数のカウント]
)