この記事では、Power BI のページ分割されたレポートを設計するレポート作成者を対象にしています。 カスケード パラメーターを設計するためのシナリオを提供します。 カスケード パラメーターは、依存関係を持つレポート パラメーターです。 レポート ユーザーがパラメーター値 (または値) を選択すると、別のパラメーターで使用可能な値を設定するために使用されます。
注
カスケード パラメーターの概要とその構成方法については、この記事では説明しません。 カスケード パラメーターに詳しくない場合は、 最初に Power BI レポート ビルダーのレポートにカスケード パラメーターを追加する方法に関するページを参照することをお勧めします。
設計シナリオ
カスケード パラメーターを使用する場合、2 つの設計シナリオがあります。 これらは、次の用途に効果的に使用できます。
- 大量のアイテム セット をフィルター処理する
- 関連項目を表示する
データベースの例
この記事で紹介する例は、Azure SQL Database に基づいています。 データベースには販売操作が記録され、リセラー、製品、販売注文を格納するさまざまなテーブルが含まれています。
Resellerという名前のテーブルには、リセラーごとに 1 つのレコードが格納され、何千ものレコードが含まれています。
Reseller テーブルには、次の列があります。
- ResellerCode (整数)
- 販売代理店名
- 国/地域
- State-Province
- 市区町村
- 郵便番号
Salesという名前のテーブルもあります。 販売注文レコードを格納し、Reseller列のResellerCode テーブルとの外部キーリレーションシップを持ちます。
要件の例
リセラー プロファイル レポートを作成する必要があります。 レポートは、1 つのリセラーの情報を表示するように設計されている必要があります。 レポート ユーザーにリセラー コードを入力させるのは適切ではありません。リセラーコードを覚えることはほとんどないのでです。
大量のアイテムセットをフィルター処理する
リセラーなど、使用可能な項目の大きなセットを制限するのに役立つ 3 つの例を見てみましょう。 これらは次のとおりです。
関連する列でフィルターする
この例では、レポート ユーザーは 5 つのレポート パラメーターを操作します。 国/地域、都道府県、市区町村、郵便番号を選択する必要があります。 最後のパラメーターには、その地理的な場所に存在するリセラーが一覧表示されます。
カスケード パラメーターを開発する方法を次に示します。
正しい順序で並べ替えられた 5 つのレポート パラメーターを作成します。
次のクエリ ステートメントを使用して、個別の国と地域の値を取得する CountryRegion データセットを作成します。
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]次のクエリ ステートメントを使用して、選択した国と地域の個別の州州の値を取得する StateProvince データセットを作成します。
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]次のクエリ ステートメントを使用して、選択した国/地域と都道府県の個別の市区町村の値を取得する City データセットを作成します。
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]このパターンを続行して PostalCode データセットを作成します。
次のクエリ ステートメントを使用して、選択した地理的な値のすべてのリセラーを取得する Reseller データセットを作成します。
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]最初のデータセットを除く各データセットについて、クエリ パラメーターを対応するレポート パラメーターにマップします。
注
これらの例に示されているすべてのクエリ パラメーター (@記号がプレフィックス付き) は、 SELECT ステートメント内に埋め込んだり、ストアド プロシージャに渡したりすることができます。
一般に、ストアド プロシージャの方が優れた設計アプローチです。 これは、クエリ プランがより迅速に実行されるようにキャッシュされ、必要に応じてより高度なロジックを開発できるためです。 ただし、現在、ゲートウェイ リレーショナル データ ソースではサポートされていません。これは、SQL Server、Oracle、Teradata を意味します。
最後に、効率的なデータ取得をサポートするために、適切なインデックスが常に存在することを確認する必要があります。 そうしないと、レポート パラメーターの設定に時間がかかり、データベースが過負荷になる可能性があります。 SQL Server インデックス作成の詳細については、「 SQL Server インデックスのアーキテクチャと設計ガイド」を参照してください。
グループ化列でフィルター処理する
この例では、レポート ユーザーがレポート パラメーターを操作して、リセラーの最初の文字を選択します。 2 番目のパラメーターは、選択した文字で名前が開始されたときにリセラーを一覧表示します。
カスケード パラメーターを開発する方法を次に示します。
適切な順序で並べ替えられた ReportGroup と Reseller のレポート パラメーターを作成します。
次のクエリ ステートメントを使用して、すべてのリセラーが使用する最初の文字を取得する ReportGroup データセットを作成します。
SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]次のクエリ ステートメントを使用して、選択したレターで始まるすべてのリセラーを取得する Reseller データセットを作成します。
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]Reseller データセットのクエリ パラメーターを対応するレポート パラメーターにマップします。
グループ化列を Reseller テーブルに追加する方が効率的です。 永続化してインデックスを作成すると、最適な結果が得られます。 詳細については、「 テーブルの計算列の指定」を参照してください。
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
この手法は、さらに大きな可能性を提供できます。 事前に定義された文字のバンドでリセラーをフィルター処理するための新しいグループ化列を追加する次のスクリプトについて考えてみましょう。 また、レポート パラメーターに必要なデータを効率的に取得するためのインデックスも作成されます。
ALTER TABLE [Reseller]
ADD [ReportGroup2] AS CASE
WHEN [ResellerName] LIKE '[A-C]%' THEN 'A-C'
WHEN [ResellerName] LIKE '[D-H]%' THEN 'D-H'
WHEN [ResellerName] LIKE '[I-M]%' THEN 'I-M'
WHEN [ResellerName] LIKE '[N-S]%' THEN 'N-S'
WHEN [ResellerName] LIKE '[T-Z]%' THEN 'T-Z'
ELSE '[Other]'
END PERSISTED
GO
CREATE NONCLUSTERED INDEX [Reseller_ReportGroup2]
ON [Reseller] ([ReportGroup2]) INCLUDE ([ResellerCode], [ResellerName])
GO
検索パターンでフィルター処理する
この例では、レポート ユーザーがレポート パラメーターを操作して検索パターンを入力します。 2 番目のパラメーターは、名前にパターンが含まれている場合にリセラーを一覧表示します。
カスケード パラメーターを開発する方法を次に示します。
適切な順序で並べ替えられた 検索 および リセラー レポート パラメーターを作成します。
次のクエリ ステートメントを使用して、検索テキストを含むすべてのリセラーを取得する Reseller データセットを作成します。
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]Reseller データセットのクエリ パラメーターを対応するレポート パラメーターにマップします。
ヒント
この設計を改善して、レポート ユーザーをより詳細に制御できます。 これにより、独自のパターン マッチング値を定義できます。 たとえば、検索値 "red%" は、名前が "red" から始まるリセラーに絞り込みます。
詳細については、「 LIKE (Transact-SQL)」を参照してください。
レポート ユーザーが独自のパターンを定義できるようにする方法を次に示します。
WHERE
[ResellerName] LIKE @Search
ただし、多くのデータベース以外の専門家は、割合 (%) ワイルドカード文字について知りません。 代わりに、アスタリスク (*) 文字に精通しています。
WHERE句を変更すると、この文字を使用できるようになります。
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
関連項目を表示する
このシナリオでは、ファクト データを使用して使用可能な値を制限できます。 レポート ユーザーには、アクティビティが記録されたアイテムが表示されます。
この例では、レポート ユーザーは 3 つのレポート パラメーターを操作します。 最初の 2 つは、販売注文日付の範囲を設定します。 3 番目のパラメーターには、その期間中に注文が作成されたリセラーが一覧表示されます。
カスケード パラメーターを開発する方法を次に示します。
OrderDateStart、OrderDateEnd、および Reseller レポート パラメーターを正しい順序で作成します。
次のクエリ ステートメントを使用して、日付期間内に注文を作成したすべてのリセラーを取得する Reseller データセットを作成します。
SELECT DISTINCT [r].[ResellerCode], [r].[ResellerName] FROM [Reseller] AS [r] INNER JOIN [Sales] AS [s] ON [s].[ResellerCode] = [r].[ResellerCode] WHERE [s].[OrderDate] >= @OrderDateStart AND [s].[OrderDate] < DATEADD(DAY, 1, @OrderDateEnd) ORDER BY [r].[ResellerName]
推奨事項
可能な限り、カスケード パラメーターを使用してレポートを設計することをお勧めします。 それは彼らが〜からです。
- レポート ユーザーに直感的で役立つエクスペリエンスを提供する
- より小さいセットの使用可能な値を取得するため、効率的です。
次の方法でデータ ソースを最適化してください。
- 可能な限り、ストアド プロシージャを使用する
- 効率的なデータ取得のための適切なインデックスの追加
- コストの高いクエリ時間の評価を回避するために列値 (さらには行) を具体化する
関連コンテンツ
この記事に関連する詳細については、次のリソースを参照してください。
- Power BI レポート ビルダーのレポート パラメーター
- カスケード パラメーターをレポートに追加する (レポート ビルダー)
- 質問がありますか? Fabric コミュニティに問い合わせしてみてください
- Suggestions? Fabric の を向上させるためにアイデアを投稿する