Používání kaskádových parametrů ve stránkovaných sestaváchUse cascading parameters in paginated reports

Tento článek je určen tvůrcům sestav, kteří navrhují stránkované sestavy Power BI.This article targets you as a report author designing Power BI paginated reports. Popisuje scénáře pro navrhování kaskádových parametrů.It provides scenarios for designing cascading parameters. Kaskádové parametry jsou parametry sestavy se závislostmi.Cascading parameters are report parameters with dependencies. Když uživatel sestavy vybere hodnotu parametru (nebo hodnoty), použije se k nastavení dostupných hodnot pro jiný parametr.When a report user selects a parameter value (or values), it's used to set available values for another parameter.

Poznámka

V tomto článku nenajdete úvod do kaskádových parametrů a způsob jejich konfigurace.An introduction to cascading parameters, and how to configure them, isn't covered in this article. Pokud nejste plně obeznámeni s kaskádovými parametry, doporučujeme vám, abyste si nejprve přečetli téma popisující přidání kaskádových parametrů do sestavy (Tvůrce sestav a SSRS).If you're not completely familiar with cascading parameters, we recommend you first read Add Cascading Parameters to a Report (Report Builder and SSRS).

Scénáře návrhuDesign scenarios

Existují dva scénáře návrhu pro použití kaskádových parametrů.There are two design scenarios for using cascading parameters. Můžete je efektivně využít k těmto akcím:They can be effectively used to:

  • Filtrování velkých sad položekFilter large sets of items
  • Prezentace relevantních položekPresent relevant items

Ukázková databázeExample database

Příklady prezentované v tomto článku jsou založené na Azure SQL Database.The examples presented in this article are based on an Azure SQL Database. Databáze zaznamenává prodejní operace a obsahuje různé tabulky s prodejci, produkty a prodejními objednávkami.The database records sales operations, and contains various tables storing resellers, products, and sales orders.

Tabulka s názvem Reseller (Prodejce) ukládá jeden záznam pro každého prodejce a obsahuje mnoho tisíc záznamů.A table named Reseller stores one record for each reseller, and it contains many thousands of records. Tabulka Reseller (Prodejce) má tyto sloupce:The Reseller table has these columns:

  • ResellerCode (celé číslo)ResellerCode (integer)
  • ResellerNameResellerName
  • Země/OblastCountry-Region
  • State-ProvinceState-Province
  • MěstoCity
  • PostalCodePostalCode

Existuje také tabulka s názvem Sales (Prodej).There's a table named Sales, too. Ukládá záznamy prodejních objednávek a má vztah cizího klíče k tabulce Reseller ve sloupci ResellerCode.It stores sales order records, and has a foreign key relationship to the Reseller table, on the ResellerCode column.

Ukázkový požadavekExample requirement

Existuje požadavek na vývoj sestavy Profil prodejce.There's a requirement to develop a Reseller Profile report. Sestava musí být navržená tak, aby zobrazovala informace pro jednoho prodejce.The report must be designed to display information for a single reseller. Není vhodné, aby uživatel přehledu zadával kód prodejce, protože si ho jen zřídka zapamatuje.It's not appropriate to have the report user enter a reseller code, as they rarely memorize them.

Filtrování velkých sad položekFilter large sets of items

Podívejme se na tři příklady, které vám pomůžou omezit velké sady dostupných položek, jako jsou prodejci.Let's take a look at three examples to help you limit large sets of available items, like resellers. Jsou to tyto:They are:

V tomto příkladu uživatel sestavy pracuje s pěti parametry sestavy.In this example, the report user interacts with five report parameters. Musí vybrat zemi/oblast, kraj, město a potom poštovní směrovací číslo.They must select country-region, state-province, city, and then postal code. Poslední parametr pak obsahuje seznam prodejců, kteří se nacházejí v daném zeměpisném umístění.A final parameter then lists resellers that reside in that geographic location.

Snímek obrazovky s parametry stránkované sestavy Power BI s filtrem podle souvisejících sloupců

Tady je postup, jak můžete vytvořit kaskádové parametry:Here's how you can develop the cascading parameters:

  1. Vytvořte pět parametrů sestavy seřazených ve správném pořadí.Create the five report parameters, ordered in the correct sequence.

  2. Vytvořte datovou sadu CountryRegion, která pomocí následujícího příkazu dotazu načte jedinečné hodnoty pro zemi/oblast:Create the CountryRegion dataset that retrieves distinct country-region values, using the following query statement:

    SELECT DISTINCT
      [Country-Region]
    FROM
      [Reseller]
    ORDER BY
      [Country-Region]
    
  3. Vytvořte datovou sadu StateProvince, která pomocí následujícího příkazu dotazu načte jedinečné hodnoty krajů pro vybranou zemi/oblast:Create the StateProvince dataset that retrieves distinct state-province values for the selected country-region, using the following query statement:

    SELECT DISTINCT
      [State-Province]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
    ORDER BY
      [State-Province]
    
  4. Vytvořte datovou sadu City, která pomocí následujícího příkazu dotazu načte jedinečné hodnoty měst pro vybranou zemi/oblast a kraj :Create the City dataset that retrieves distinct city values for the selected country-region and state-province, using the following query statement:

    SELECT DISTINCT
      [City]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
    ORDER BY
      [City]
    
  5. Pokračujte tímto způsobem a vytvořte datovou sadu PostalCode.Continue this pattern to create the PostalCode dataset.

  6. Vytvořte datovou sadu Reseller, která pomocí následujícího příkazu dotazu načte všechny prodejce pro vybrané zeměpisné hodnoty:Create the Reseller dataset to retrieve all resellers for the selected geographic values, using the following query statement:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [Country-Region] = @CountryRegion
      AND [State-Province] = @StateProvince
      AND [City] = @City
      AND [PostalCode] = @PostalCode
    ORDER BY
      [ResellerName]
    
  7. Pro každou datovou sadu s výjimkou první namapujte parametry dotazu na odpovídající parametry sestavy.For each dataset except the first, map the query parameters to the corresponding report parameters.

Poznámka

Všechny parametry dotazu (s předponou @) zobrazené v těchto příkladech můžou být vloženy do příkazů SELECT nebo předány uloženým procedurám.All query parameters (prefixed with the @ symbol) shown in these examples could be embedded within SELECT statements, or passed to stored procedures.

Obecně platí, že uložené procedury představují lepší způsob návrhu.Generally, stored procedures are a better design approach. Je to proto, že jejich plány dotazů jsou ukládány do mezipaměti pro rychlejší spouštění a v případě potřeby vám umožní vyvíjet složitější logiku.It's because their query plans are cached for quicker execution, and they allow you develop more sophisticated logic, when needed. Momentálně však nejsou podporované pro zdroje relačních dat brány, což znamená SQL Server, Oracle a Teradata.However, they aren't currently supported for gateway relational data sources, which means SQL Server, Oracle, and Teradata.

Nakonec byste měli vždy zajistit, aby existovaly vhodné indexy pro podporu efektivního načítání dat.Lastly, you should always ensure suitable indexes exist to support efficient data retrieval. V opačném případě může být naplnění parametrů sestavy pomalé a databáze by se mohla přetížit.Otherwise, your report parameters could be slow to populate, and the database could become overburdened. Další informace o indexování SQL Serveru najdete v tématu týkajícím se průvodce architekturou a návrhem indexu SQL Serveru.For more information about SQL Server indexing, see SQL Server Index Architecture and Design Guide.

Filtrování podle sloupce seskupeníFilter by a grouping column

V tomto příkladu uživatel sestavy pracuje s parametrem sestavy, pomocí něhož vybere první písmeno prodejce.In this example, the report user interacts with a report parameter to select the first letter of the reseller. Druhý parametr pak zobrazí seznam prodejců, jejichž název začíná vybraným písmenem.A second parameter then lists resellers when the name commences with the selected letter.

Snímek obrazovky s parametry stránkované sestavy Power BI s filtrem podle sloupce seskupení

Tady je postup, jak můžete vytvořit kaskádové parametry:Here's how you can develop the cascading parameters:

  1. Vytvořte parametry sestavy ReportGroup a Reseller seřazené ve správném pořadí.Create the ReportGroup and Reseller report parameters, ordered in the correct sequence.

  2. Vytvořte datovou sadu ReportGroup, která pomocí následujícího příkazu načte první písmena použitá u všech prodejců:Create the ReportGroup dataset to retrieve the first letters used by all resellers, using the following query statement:

    SELECT DISTINCT
      LEFT([ResellerName], 1) AS [ReportGroup]
    FROM
      [Reseller]
    ORDER BY
      [ReportGroup]
    
  3. Vytvořte datovou sadu Reseller, která pomocí následujícího příkazu dotazu načte všechny prodejce, jejichž názvy začínají vybraným písmenem:Create the Reseller dataset to retrieve all resellers that commence with the selected letter, using the following query statement:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      LEFT([ResellerName], 1) = @ReportGroup
    ORDER BY
      [ResellerName]
    
  4. Namapujte parametr dotazu datové sady Reseller na odpovídající parametr sestavy.Map the query parameter of the Reseller dataset to the corresponding report parameter.

Je efektivnější přidat sloupec seskupení do tabulky Reseller.It's more efficient to add the grouping column to the Reseller table. Když je trvalý a indexovaný, přináší nejlepší výsledek.When persisted and indexed, it delivers the best result. Další informace najdete v tématu týkajícím se zadání vypočítaných sloupců v tabulce.For more information, see Specify Computed Columns in a Table.

ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED

Tato technika může poskytovat ještě větší potenciál.This technique can deliver even greater potential. Podívejte se na následující skript, který přidá nový sloupec seskupení pro vyfiltrování prodejců pomocí předem definovaných rozsahů písmen.Consider the following script that adds a new grouping column to filter resellers by pre-defined bands of letters. Vytvoří také index, který efektivně načte data požadovaná parametry sestavy.It also creates an index to efficiently retrieve the data required by the report parameters.

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

Filtrování podle vzoru vyhledáváníFilter by search pattern

V tomto příkladu uživatel sestavy pracuje s parametrem sestavy, pomocí něhož zadá vzor vyhledávání.In this example, the report user interacts with a report parameter to enter a search pattern. Druhý parametr pak zobrazí seznam prodejců, jejichž název obsahuje zadaný vzor.A second parameter then lists resellers when the name contains the pattern.

Snímek obrazovky s parametry stránkované sestavy Power BI s filtrem podle vzoru vyhledávání

Tady je postup, jak můžete vytvořit kaskádové parametry:Here's how you can develop the cascading parameters:

  1. Vytvořte parametry sestavy Search a Reseller seřazené ve správném pořadí.Create the Search and Reseller report parameters, ordered in the correct sequence.

  2. Vytvořte datovou sadu Reseller, která pomocí následujícího příkazu dotazu načte všechny prodejce, jejichž názvy obsahují hledaný text:Create the Reseller dataset to retrieve all resellers that contain the search text, using the following query statement:

    SELECT
      [ResellerCode],
      [ResellerName]
    FROM
      [Reseller]
    WHERE
      [ResellerName] LIKE '%' + @Search + '%'
    ORDER BY
      [ResellerName]
    
  3. Namapujte parametr dotazu datové sady Reseller na odpovídající parametr sestavy.Map the query parameter of the Reseller dataset to the corresponding report parameter.

Tip

Tento návrh můžete vylepšit a poskytnout uživatelům sestavy větší kontrolu.You can improve upon this design to provide more control for your report users. Umožňuje jim definovat vlastní vzor porovnávané hodnoty.It lets them define their own pattern matching value. Například hledaná hodnota „red%“ vyfiltruje prodejce s názvy, které začínají písmeny „red“.For example, the search value "red%" will filter to resellers with names that commence with the characters "red".

Další informace naleznete v tématu LIKE (Transact-SQL).For more information, see LIKE (Transact-SQL).

Tady je postup, jak můžete uživatelům sestavy umožnit definovat vlastní vzor.Here's how you can let the report users define their own pattern.

WHERE
  [ResellerName] LIKE @Search

Řada nedatabázových odborníků však zástupný znak procent (%) nezná.Many non-database professionals, however, don't know about the percentage (%) wildcard character. Místo toho jsou obeznámeni se znakem hvězdičky (*).Instead, they're familiar with the asterisk (*) character. Úpravou klauzule WHERE jim umožníte použít tento znak.By modifying the WHERE clause, you can let them use this character.

WHERE
  [ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')

Prezentace relevantních položekPresent relevant items

V tomto scénáři můžete použít faktická data k omezení dostupných hodnot.In this scenario, you can use fact data to limit available values. Uživatelům sestavy se zobrazí položky, u kterých byla zaznamenána aktivita.Report users will be presented with items where activity has been recorded.

V tomto příkladu uživatel sestavy pracuje se třemi parametry sestavy.In this example, the report user interacts with three report parameter. První dva nastaví rozsah kalendářních dat pro datum prodejních objednávek.The first two set a date range of sales order dates. Třetí parametr pak zobrazí seznam prodejců, kteří během tohoto časového období vytvořili objednávky.The third parameter then lists resellers where orders have been created during that time period.

Snímek obrazovky s třemi parametry stránkované sestavy Power BI: počáteční datum objednávky, koncové datum objednávky a prodejce.

Tady je postup, jak můžete vytvořit kaskádové parametry:Here's how you can develop the cascading parameters:

  1. Vytvořte parametry sestavy OrderDateStart, OrderDateEnd a Reseller seřazené ve správném pořadí.Create the OrderDateStart, OrderDateEnd, and Reseller report parameters, ordered in the correct sequence.

  2. Vytvořte datovou sadu Reseller, která pomocí následujícího příkazu dotazu načte všechny prodejce, kteří vytvořili objednávky v daném období:Create the Reseller dataset to retrieve all resellers that created orders in the date period, using the following query statement:

    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]
    

DoporučeníRecommendations

Doporučujeme, abyste sestavy navrhovali pomocí kaskádových parametrů, kdykoli je to možné.We recommend you design your reports with cascading parameters, whenever possible. Je to proto, že:It's because they:

  • Poskytují intuitivní a užitečné prostředí pro uživatele sestavy.Provide intuitive and helpful experiences for your report users
  • Jsou efektivní, protože načítají menší sady dostupných hodnot.Are efficient, because they retrieve smaller sets of available values

Nezapomeňte optimalizovat zdroje dat následujícími postupy:Be sure to optimize your data sources by:

  • Kdykoli je to možné, používejte uložené procedury.Using stored procedures, whenever possible
  • Přidávejte vhodné indexy pro efektivní načítání dat.Adding appropriate indexes for efficient data retrieval
  • Materializujte hodnoty sloupců, a dokonce i řádků, abyste zabránili nákladných vyhodnocením v době dotazu.Materializing column values—and even rows—to avoid expensive query-time evaluations

Další krokyNext steps

Další informace související s tímto článkem najdete v následujících tématech:For more information related to this article, check out the following resources: