SQL Server

Vytvoření datumové řady pro reporty s pohyblivou časovou osou

Pokud potřebujeme vytvořit report, který nám bude ukazovat například počet objednávek za posledních třicet dnů zpět, potřebujeme získat datový set, který bude obsahovat řádek pro každý den a k němu odpovídající počet objednávek. V následujícím tutoriálu si ukážeme jednoduchou implementaci pomocí rekurzivní definice tabulky  a také příklad použití výsledných dat v grafu.

Nejprve si vytvoříme testovací data. Tabulku dbo.Orders naplníme několika objednávkami, které mají OrderDate v uplynulých třiceti dnech:

Agregovaná data objednávek podle OrderDate vypadají takto:

ValuesRangeForReportingCharts

Pro datový set použitelný v grafu však potřebujeme vygenerovat i dny, ve kterých nejsou žádné objednávky. Toho dosáhneme následujícím postupem:

Nejprve vytvoříme definici tabulky Dates a jako kotvu určíme datum, který je o 30 dnů menší než aktuální datum, získané pomocí funkce GETDATE(). Poté ke kotvě přidáme rekurzivní člen, který bude tabulku Dates procházet tak dlouho, dokud v ní nebude sloupec DT obsahovat datum, který se rovná datu dnešnímu. Z připravené Dates tabulky provedeme SELECT všech řádků a pomocí OUTER APPLY operátoru dohledáme počet objednávek pro každý datum. Získáváme tak datový set, který ve sloupci DT obsahuje datum pro každý z minulých třiceti dnů a ve sloupci OrderCount počet objednávek pro každý den, případně 0, pokud pro daný den žádné objednávky nejsou.

V Reporting Services datový set přiřadíme jako datový zdroj grafu následujícím způsobem:

ValuesRangeForReportingCharts3

A výsledný graf může vypadat například takto (vertikální axis je třeba naformátovat pro “Days” formát vstupních dat):

ValuesRangeForReportingCharts2

Leave a Reply

Your email address will not be published. Required fields are marked *