Použitie kaskádových parametrov v stránkovaných zostavách
Tento článok je určený pre autorov zostáv, ktorí navrhujú stránkované zostavy služby Power BI. Obsahuje scenáre na navrhovanie kaskádových parametrov. Kaskádové parametre sú parametre zostavy so závislosťami. Keď používateľ zostavy vyberie hodnotu parametra (alebo hodnoty), použije sa na nastavenie dostupných hodnôt pre iný parameter.
Nota
Úvodné informácie o kaskádových parametroch a o tom, ako ich nakonfigurovať, nie sú popísané v tomto článku. Ak nie ste úplne oboznámení s kaskádovými parametrami, odporúča sa najprv si prečítať Pridanie kaskádových parametrov do zostavy v Zostavovači zostáv služby Power BI.
Scenáre návrhu
Kaskádové parametre možno používať v dvoch scenároch návrhu. Dajú sa efektívne používať na:
- Filtrovanie veľkých množín položiek
- Prezentovanie relevantných položiek
Vzorová databáza
Príklady uvedené v tomto článku sú založené na databáze Azure SQL. Databáza obsahuje záznamy o predaji a jej súčasťou sú rôzne tabuľky s údajmi o predajcoch, produktoch a predajných objednávkach.
Tabuľka s názvom Reseller
ukladá jeden záznam pre každého predajcu, pričom obsahuje mnoho tisíc záznamov. Tabuľka Reseller
obsahuje tieto stĺpce:
- ResellerCode (KódPredajníka) (celé číslo)
- ResellerName (MenoPredajníka)
- Country-Region
- State-Province
- Mesto
- PSČ
K dispozícii je aj tabuľka s názvom Sales
. Sú v nej uložené záznamy predajných objednávok a má vzťah cudzieho kľúča k tabuľke Reseller
v stĺpci ResellerCode
.
Vzorová požiadavka
Pri vývoji zostavy Reseller Profile (Profil predajcu) treba splniť požiadavku. Zostava musí byť navrhnutá tak, aby zobrazovala informácie pre jedného predajcu. Nie je vhodné, aby kód predajcu zadával používateľ zostavy, pretože si ho zriedka zapamätá.
Filtrovanie veľkých množín položiek
Pozrime sa na tri príklady, ktoré vám pomôžu obmedziť veľké množiny dostupných položiek, ako sú napríklad predajcovia. Sú to tieto:
- filtrovanie podľa súvisiacich stĺpcov
- filtrovanie podľa stĺpca zoskupenia
- filtrovanie podľa parametra vyhľadávania
Filtrovanie podľa súvisiacich stĺpcov
V tomto príklade pracuje používateľ zostavy s piatimi parametrami zostavy. Musí vybrať krajinu – oblasť, štát – provinciu, mesto a PSČ. Posledný parameter potom zobrazí zoznam predajcov, ktorí sídlia v danej geografickej oblasti.
Takto môžete vyvíjať kaskádové parametre:
Vytvorte päť parametrov zostavy zoradených v správnom poradí.
Pomocou nasledujúceho príkazu dotazu vytvorte CountryRegion množinu údajov, ktorá načíta rozdielne hodnoty krajiny – oblasti:
SELECT DISTINCT [Country-Region] FROM [Reseller] ORDER BY [Country-Region]
Pomocou nasledujúceho príkazu dotazu vytvorte StateProvince množinu údajov, ktorá načíta rozdielne hodnoty štátu – provincie pre vybratú krajinu – oblasť:
SELECT DISTINCT [State-Province] FROM [Reseller] WHERE [Country-Region] = @CountryRegion ORDER BY [State-Province]
Pomocou nasledujúceho príkazu dotazu vytvorte množinu údajov City, ktorá načíta rozdielne hodnoty mesta pre vybratú krajinu – oblasť a provinciu:
SELECT DISTINCT [City] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince ORDER BY [City]
Pokračujte podľa tohto vzoru a vytvorte PostalCode (PSČ) množinu údajov.
Pomocou nasledujúceho príkazu dotazu vytvorte množinu údajov Reseller (Predajca), ktorá načíta všetkých predajcov pre vybraté geografické hodnoty:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [Country-Region] = @CountryRegion AND [State-Province] = @StateProvince AND [City] = @City AND [PostalCode] = @PostalCode ORDER BY [ResellerName]
Pre každú množinu údajov okrem prvej priraďte parametre dotazu k zodpovedajúcim parametrom zostavy.
Nota
Všetky parametre dotazu (pred názvom majú symbol @) uvedené v týchto príkladoch možno vložiť do príkazov SELECT
alebo odovzdať do uložených procedúr.
Uložené procedúry vo všeobecnosti predstavujú lepší prístup k návrhu. Dôvodom je, že ich plány dotazov sa ukladajú do vyrovnávacej pamäte, vďaka čomu sa vykonávajú rýchlejšie, a v prípade potreby umožňujú vývoj sofistikovanejšej logiky. Momentálne sa však nepodporujú pre relačné zdroje údajov brány, teda SQL Server, Oracle a Teradata.
Nakoniec by ste mali vždy zabezpečiť vytvorenie vhodných indexov, ktoré podporia efektívne načítavanie údajov. V opačnom prípade sa parametre zostavy môžu vypĺňať pomaly a databáza môže byť preťažená. Ďalšie informácie o indexovaní SQL Servera nájdete príručky k architektúre a návrhu indexu servera SQL Server.
Filtrovanie podľa stĺpca zoskupenia
V tomto príklade používateľ zostavy pracuje s parametrom zostavy, aby vybral prvé písmeno predajcu. Druhý parameter potom zobrazí zoznam predajcov, keď názov začína vybratým písmenom.
Takto môžete vyvíjať kaskádové parametre:
Vytvorte
ReportGroup (Skupina Zostáv) a parametrov zostavy Reseller (Predajca), zoradené v správnom poradí.Pomocou nasledujúceho príkazu dotazu vytvorte množine údajov
ReportGroup (Skupina Zostáv) na načítanie prvých písmen používaných všetkými predajcami: SELECT DISTINCT LEFT([ResellerName], 1) AS [ReportGroup] FROM [Reseller] ORDER BY [ReportGroup]
Pomocou nasledujúceho príkazu dotazu vytvorte množinu údajov Reseller (Predajca), ktorá načíta všetkých predajcov začínajúcich na vybraté písmeno:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE LEFT([ResellerName], 1) = @ReportGroup ORDER BY [ResellerName]
Priraďte parameter dotazu množiny údajov Reseller (Predajca) k zodpovedajúcemu parametru zostavy.
Efektívnejšie je pridať do tabuľky Reseller
stĺpec zoskupenia. Keď je trvalý a indexovaný, poskytuje najlepšie výsledky. Ďalšie informácie nájdete špecifikácii vypočítaných stĺpcov v tabuľke.
ALTER TABLE [Reseller]
ADD [ReportGroup] AS LEFT([ResellerName], 1) PERSISTED
Táto technika môže priniesť ešte väčší potenciál. Pozrite si nasledujúci skript, ktorý pridá nový stĺpec zoskupenia na filtrovanie predajcov podľa preddefinovaných pásiem písmen. Vytvorí tiež index na efektívne načítanie údajov požadovaných parametrami zostavy.
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
Filtrovanie podľa vzoru vyhľadávania
V tomto príklade používateľ zostavy pracuje s parametrom zostavy, aby zadajte vzor vyhľadávania. Druhý parameter potom zobrazí zoznam predajcov, ktorí majú uvedený názov.
Takto môžete vyvíjať kaskádové parametre:
Vytvorte parametre zostavy Search a Predajca, zoradené v správnom poradí.
Pomocou nasledujúceho príkazu dotazu vytvorte množinu údajov Reseller (Predajca), ktorá načíta všetkých predajcov obsahujúcich hľadaný text:
SELECT [ResellerCode], [ResellerName] FROM [Reseller] WHERE [ResellerName] LIKE '%' + @Search + '%' ORDER BY [ResellerName]
Priraďte parameter dotazu množiny údajov Reseller (Predajca) k zodpovedajúcemu parametru zostavy.
Tip
Tento návrh môžete vylepšiť tak, aby používateľom zostáv poskytoval väčšiu kontrolu. Umožňuje im definovať vlastnú hodnotu zhodnú s vzorom. Hľadaná hodnota "red%" napríklad vyfiltruje predajcov s názvami, ktoré začínajú znakmi "red".
Ďalšie informácie nájdete
Takto môžete používateľom zostavy umožniť definovať si vlastný vzor.
WHERE
[ResellerName] LIKE @Search
Mnohí odborníci, ktorí nie sú odborníkmi na databázy, však zástupný znak percent (%). Namiesto toho poznajú znak hviezdičky (*). Úpravou klauzuly WHERE
im môžete umožniť použiť tento znak.
WHERE
[ResellerName] LIKE SUBSTITUTE(@Search, '%', '*')
Prezentovanie relevantných položiek
V tomto scenári môžete pomocou údajov faktov obmedziť dostupné hodnoty. Používateľom zostáv sa zobrazia položky, pri ktorých bola zaznamenaná aktivita.
V tomto príklade pracuje používateľ zostavy s tromi parametrami zostavy. Prvé dva nastavia rozsah dátumov predajných objednávok. Tretí parameter potom zobrazí zoznam predajcov, ktorých objednávky boli vytvorené počas tohto obdobia.
Takto môžete vyvíjať kaskádové parametre:
Vytvorte OrderDateStart, OrderDateEnda parametre zostavy Reseller zoradené v správnom poradí.
Pomocou nasledujúceho príkazu dotazu vytvorte množinu údajov Reseller (Predajca), ktorá množinu údajov, aby ste načítali všetkých predajcov, ktorí vytvorili objednávky v časovom období:
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]
Odporúčania
Odporúča sa navrhovať zostavy s kaskádovými parametrami vždy, keď je to možné. Dôvod:
- Používateľom zostáv poskytujú intuitívne a užitočné prostredie.
- sú efektívne, pretože načítavajú menšie množiny dostupných hodnôt.
Nezabudnite optimalizovať zdroje údajov takto:
- vždy, keď je to možné, použite uložené procedúry.
- pridanie vhodných indexov na efektívne načítavanie údajov,
- realizáciou hodnôt stĺpcov (a dokonca aj riadkov), aby sa predišlo časovo náročným vyhodnocovaniam dotazov.
Súvisiaci obsah
Ďalšie informácie súvisiace s týmto článkom nájdete v nasledujúcich zdrojoch:
- parametre zostavy v nástroji Power BI Report Builder
- pridanie kaskádových parametrov do zostavy (Zostavovač zostáv).
- Otázky? Skúste sa spýtať na komunity Fabric
- Návrhy? prispievať nápadmi na zlepšenie v látkach