V minulosti jsem napsal několik tutoriálů na reporting services (najdete je v rubrice reporting services – 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.
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
Nachystám si v SSRS data source a dataset
návod na dataset 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];
Ve výsledku tedy mám v reporting services projektu 2 datasety
Vytvořím SSRS report 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.
Nachystám jednoduchý SSRS report jako zobrazeni tabulky
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:
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 o nastavení parametru. 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
Funkční SSRS report
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
Dalším způsobem jak se dá problém předání hodnot z parametru do SQL dotazu 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.