BI探検ノート

Report Builder のパラメーターで表を絞り込む方法(絞られないとき)

約6分

濵口 翔長崎で、Power BI のつまずきを記録しています
目次
  1. 1. パラメーターを作る
  2. 2. 作っただけでは、絞られない
  3. 3. データセットに「フィルター」を足す
  4. 4. エラー: 使用できる値を、同じデータセットから取ったとき
  5. 5. 「値の指定」で、3つを手で入れる
  6. 6. 選択肢のために、別のデータセットを作る
  7. 7. 複数の都市を選べるようにする
  8. 確認していないこと

確認日2026年10月25日。Power BI Report Builder(15.7.1821.21、日本語画面、未サインイン)で、ダミーのデータ3行(Nagasaki 120、Sasebo 90、Isahaya 60)を使いました。ウィザードの「データを入力してください」で作った表です(手順はウィザードの記事に書きました)。確認できていないことは、末尾にまとめました。

Report Builder で、パラメーターを作って「都市」を選べるようにしました。ところが、選んでも、表は絞り込まれませんでした。絞り込めるようにした手順と、途中で出たエラーを、実機で確かめました。

結論(30秒版)

  • 「レポート データ」の「パラメーター」を右クリックして、パラメーター City を作りました。実行すると「都市」の選択欄が出ましたが、Sasebo を選んでも、表は3行のままでした。パラメーターは、作っただけでは、何も絞りません。
  • データセットのプロパティの「フィルター」に、式 [City]、演算子 =、値 [@City] を足すと、Sasebo の1行(合計 90)だけになりました。
  • パラメーターの「使用できる値」を、同じデータセット(DataSet1)から取ると、プレビューが開かず、エラーになりました。「値の指定」で3つを手で入れるか、選択肢用の別のデータセットを作ると、動きました。

1. パラメーターを作る

「レポート データ」の「パラメーター」を右クリックして、「パラメーターの追加…」を選びました。「全般」で、名前を City、プロンプトを「都市」、データ型を「テキスト」にしました。

2. 作っただけでは、絞られない

「実行」を押すと、上に「都市 <値の選択>」の欄が出ました。値を選ぶまで、レポートは出ません。Sasebo を選んで「レポートの表示」を押しても、表は、Isahaya 60、Nagasaki 120、Sasebo 90、合計 270 の3行のままでした。

都市に Sasebo を選んだ画面。表は Isahaya、Nagasaki、Sasebo の3行と、合計 270 のまま

3. データセットに「フィルター」を足す

「データセット」の「DataSet1」を右クリックして、「データセットのプロパティ」を開き、左の「フィルター」を選びました。「追加」を押して、次のように入れました。

  • 式: [City](一覧から選びました)
  • 演算子: =
  • 値: [@City](手で入れました)

データセットのプロパティのフィルター。式が [City]、演算子が =、値が [@City]

4. エラー: 使用できる値を、同じデータセットから取ったとき

このとき、パラメーターの「使用できる値」は、「クエリから値を取得」(データセット DataSet1、値と表示名は City)にしていました。この状態で「実行」を押すと、プレビューが開かず、次のエラーが出ました。

The report parameter ‘City’ has a DefaultValue or a ValidValue that depends on the report parameter “City”. Forward dependencies are not valid.

エラー画面。レポートをプレビューできませんでした。パラメーター City の ValidValue が、パラメーター City に依存している、と出ている

原因は、私の推測では、選択肢の一覧を作るデータセット(DataSet1)が、選んだ値(City)で絞り込まれることです。自分自身の値に依存する形になりました(英文のエラーの意味から、そう読みました)。

5. 「値の指定」で、3つを手で入れる

パラメーターのプロパティの「使用できる値」を、「値の指定」に変え、ラベルと値に、Nagasaki、Sasebo、Isahaya を入れました。

この状態で実行し、Sasebo を選んで「レポートの表示」を押すと、表は Sasebo 90、合計 90 の1行だけになりました。

都市に Sasebo を選んだ画面。表は Sasebo 90 と、合計 90 の1行だけ

6. 選択肢のために、別のデータセットを作る

エラーの原因が、私の推測のとおりなら、選択肢の一覧は、フィルターをかけないデータセットから取ればよいはずです。試しました(フィルターとパラメーターを、先に入れたファイルを開いて、次の2つを画面で行いました)。

  1. 「データセット」を右クリックして「データセットの追加…」を選び、名前 DataSet2、データソース DataSource1、クエリは、都市名だけの XML(Nagasaki、Sasebo、Isahaya の3行)にしました。

データセットのプロパティ。DataSet2、DataSource1、クエリに City だけの XML が入っている

  1. パラメーター City のプロパティで、「使用できる値」を「クエリから値を取得」にし、データセット DataSet2、値フィールドとラベルフィールドを City にしました。

パラメーターのプロパティ。使用できる値がクエリから値を取得、データセット DataSet2、値とラベルが City

実行して Sasebo を選ぶと、Sasebo 90、合計 90 の1行になりました。エラーは出ませんでした。

DataSet2 から選択肢を取ったときの結果。Sasebo 90、合計 90

選択肢用と、表示用の、2つのデータセットに分けると、動きました。

7. 複数の都市を選べるようにする

パラメーターの「全般」で「複数の値を許可」にチェックを入れると、実行したときの選択欄が、チェックボックスの一覧(「(すべて選択)」、Nagasaki、Sasebo、Isahaya)になりました。

複数の値を許可にした選択欄。Nagasaki と Sasebo にチェックが入り、欄に Nagasaki, Sasebo と出ている

フィルターの演算子を = のままにして、Nagasaki と Sasebo を選んで「レポートの表示」を押すと、エラーになりました。

The processing of FilterExpression for the dataset ‘DataSet1’ cannot be performed. Cannot compare data of types System.String and System.Object[]. Please check the data type returned by the FilterExpression.

エラー画面。DataSet1 のフィルター式を処理できない。System.String と System.Object[] は比べられない、と出ている

(複数の値は、Object[](値の並び)として渡されるので、1つの文字と = では比べられない、と読みました。これは、エラー文からの推測です。)

データセット DataSet1 のフィルターで、演算子を「次に含まれる」(In)に変えました。式 [City]、値 [@City] は、そのままです。

フィルターの設定。式が [City]、演算子が次に含まれる、値が [@City]

同じ2つを選ぶと、Nagasaki 120、Sasebo 90、合計 210 になりました。

Nagasaki と Sasebo を選んだ結果。Nagasaki 120、Sasebo 90、合計 210

(この節は、DataSet2 と選択肢の設定が入ったファイルを開いて、画面で、複数の値のチェックと、演算子の変更をしました。)

確認していないこと

  • 別のデータセットで選択肢を取る方法(第6節)は、ファイルに先に入れておいたフィルターとパラメーターの上で、画面で行いました。フィルターを入れる第3節の手順から通しで、もう一度やり直したものではありません。
  • 「(すべて選択)」にしたときの動きと、何も選ばなかったときの動きは、確かめていません。
  • 既定値(初めから選ばれている値)の設定は、確かめていません。
  • SQL Server などのクエリの中で @City を使う方法は、確かめていません(この記事は、データセットのフィルターだけです)。
  • パラメーターを選んだ状態での PDF への書き出しと、Power BI サービスへの公開後の動きは、確かめていません。