SSRS Jak řeším multiple values filtry v reportech?

V minulosti jsem napsal několik tutoriálů na reporting services (najdete je v rubrice SSRS). Celkem podrobně jsem prošel jak se dá přes SSRS vytvořit jednoduchý report, jak výsledek reportu omezit přes parametry/filtry a podobně. Složitější a pěknější reporty jsou už jen o zkušenostech a tréninku, s tím vám už moc nepomůžu.

Jedné věci jsem se ale ještě dostatečně nepověnoval. Představil jsem sice možnost omezit výsledek reportu na parametr, ale pouze na parametr o jedné hodnotě. SSRS má možnost tzn. multiple values parametru, tzn. že můžete vybrat více hodnot. V takovém případě je řešení složitější, protože je těžší předat parametr do SQL query, která se z Reporting services pouští.

Multiple values filtry v Reporting services – jak na to?

Ukážu zase na příkladu, pojďme postupně. V příkladu budu chtít udělat report, který využívá multiple filtr.

(1) Datová základna reportu – Data pro jednoduchý report bude seznam geograficky rozdělených zákazníků ze sample databáze AdventureworksDW2016CTP3. Prostě jsem tam něco naflákal, to je pro ukázku jedno

priklad multiple values filtr v ssrs - zadani

(2) Nachystám si Datasource  (návod zde)  a hlavní dataset (návod zde) z předchozího kroku. Navíc si ještě nachystám jeden pomocný dataset, který bude sloužit jako nabídka hodnot pro filtr
(parametr). Protože budu chtít filtrovat podle regionu, tak dataset nastavím jako distinct Regionu:

SELECT
   DISTINCT [geo].[EnglishCountryRegionName]
FROM [AdventureworksDW2016CTP3].[dbo].[DimCustomer] [cust]
     JOIN [AdventureworksDW2016CTP3].[dbo].[DimGeography] [geo]
        ON [cust].[GeographyKey] = [geo].[GeographyKey];

dataset pro multiple values filter v ssrs

Ve výsledku tedy mám v reporting services projektu 2 datasety

ssrs datasety

(3) Vytvořím parametr REGION (jak vytvořit parametr je vysvětleno zde), jako povolené hodnoty (available values) zvolím dataset “filtr_region” a jako defaultní hodnoty (default values) zvolím rovněž tento dataset. Default values znamená, že při spuštění reportu budou zaškrtnuty všechny hodnoty.

ssrs parametr multiple values ssrs multiple values get values from query

(4) Nachystám jednudochý report – vůbec se s tím nemažu a zobrazuji pouze tabulku s hodnotami hlavního datasetu, který jsem si nachystal a zobrazím si náhled (Preview), vypadá to takto:

ssrs report preview

(5) V tomto bodě máme problém jak provázat parametr s datasetem – Pokud nemáme povolenou volbu allow multiple values, tak je řešení jednoduché, protože můžeme z parametru předávat pouze 1 hodnotu, to jsem řešil v 5. díle o SSRS. Jak to ale udělat, pokud nám z parametru jde více hodnot, které jsou odděleny středníkem?

  • Postupujeme podle obrázků, nejprve na hlavním datasetu Zakaznici přidáme WHERE klauzuli a vložíme do ní podmínku Region in @REGION (náš parametr) –  1. obrázek
  • Pak je ještě potřeba vypořádat se s tím, aby byl parametr poslán do SQL dotazu ve správném tvaru. K tomu se používá SSRS Expression, které se nastavuje v záložce “Parameters” a napíšeme tam:

=SPLIT(JOIN(Parameters!REGION.Value,”,”),”,”) – to nám vytvoří čárkou oddělené vybrané hodnoty v parametru ,které nám posléze zpracuje SQL dotaz

ssrs multiple values parameter

ssrs multiple value parameter nastaveni parametru pres expression

(6) Nyní by měl filtr fungovat a pokud vybereme napříklar region Austrálie, Canada tak se nám zobrazí zákazníci pouze za tyto dva regiony

ssrs multiple values vysledek reportu

Dalším způsobem jak se dá problém předání hodnot z parametru do SQL query je přes funkci. V databázi si vytvoříme table funkci, která nám rozparsuje hodnoty v parametru do tabulky a tuto tabulku pak v datasetu INNER JOINUJEME. Tím výsledek automaticky omezíme.

_______________________________________________________________________________________________
Intelligent technologies - podniková řešení a školení
SSRS Jak řeším multiple values filtry v reportech?
Hodnocení

Napsat komentář

Vaše emailová adresa nebude zveřejněna.

This site uses Akismet to reduce spam. Learn how your comment data is processed.