sql >> Databáze >  >> RDS >> Database

Jak psát uložené procedury pro profesionální zprávy SSRS

V tomto článku budeme hovořit o profesionálních sestavách SQL Server Reporting Services, o tom, jak vytvořit uložené procedury pro tyto sestavy, aby splňovaly obchodní požadavky, a o výhodách používání uložených procedur ke spuštění za sestavami SSRS.

O profesionálních zprávách SSRS

Pojďme se nejprve seznámit s profesionálními zprávami SSRS.

Jednoduchá definice

Profesionální zpráva SSRS je zpráva vytvořená s ohledem na standardní postupy vývoje zpráv a která byla důkladně testována, aby byla schopna splnit obchodní požadavky.

Jinými slovy, profesionální zpráva SSRS je velmi pečlivě navržena, vyvinuta, testována a nasazena do cílového prostředí, aby bylo zajištěno, že bude sloužit účelu a bude přínosem pro podnikání.

Příklady

Jednoduchým příkladem profesionální zprávy SSRS je měsíční zpráva o prodeji, která poskytuje přehled o tom, jak dobře si podnik vede, pokud jde o prodej svých služeb nebo produktů.

Dalším příkladem profesionálně vyvinuté zprávy SSRS je zpráva, která ukazuje každodenní obchodní transakce z obchodní perspektivy.

Frekvence profesionálních zpráv SSRS

Frekvence zprávy popisuje, jak často by měla být tato zpráva spouštěna, aby zobrazovala nejnovější čísla, která pak mohou být zaslána souvisejícím oddělením v rámci společnosti nebo externím klientům.

Frekvence profesionálního hlášení SSRS může být jedna z následujících:

Denní přehled

Denní zpráva, jak název napovídá, musí běžet denně, aby byla přístupná nebo odeslána jejím interním a/nebo externím odběratelům.

Týdenní zpráva

Zpráva, která zobrazuje týdenní údaje a je zasílána příjemcům každý týden.

Měsíční přehled

Měsíční přehled obsahuje údaje za celý měsíc a má být doručován každý měsíc.

Výroční zpráva

Roční zpráva poskytuje lepší přehled o datech tím, že vypočítává roční údaje pro odběratele a koncové uživatele.

Přehled založený na jakémkoli finančním období

Do této kategorie spadají zprávy, které následují po jakémkoli jiném finančním období.

O frekvenci hlášení

Mějte prosím na paměti, že nejdůležitější zprávou, pokud jde o frekvenci, je denní zpráva.

Ve skutečnosti nejde jen o report – důležitá jsou také data, která pro report denně připravujete.

Pokud jste připravili data pro denní přehled, pak příprava dat pro týdenní přehled je stejná jako spouštění denních přehledů za celý týden. Měsíční přehled je zase stejný jako spuštění týdenního přehledu čtyřikrát.

Pokud jste však požádáni pouze o vytvoření měsíčního přehledu, pak je také přijatelné připravovat data pro přehled na měsíční bázi a za určitých okolností se doporučuje před přípravou denních údajů.

Podrobnosti o tom přesahují rámec tohoto článku, ale důvod, proč jsem to zde zmínil, je zdůraznit důležitost vypracování denní zprávy, která vyžaduje každodenní přípravu dat pro zprávu. Může také ukázat, jak připravit data pro týdenní, měsíční a roční přehledy.

Role uložené procedury

Uložené procedury hrají zásadní roli v profesionálních zprávách SSRS, protože získávají požadovaná data pro zprávu z databáze.

Uložené procedury poskytují mnoho výhod, když se používají pro účely hlášení.

Obchodní logika a uložené procedury

Uložené procedury se důrazně doporučují k implementaci obchodní logiky výkaznictví.

Snadné testování databázových jednotek

Uložené procedury lze snadno otestovat, aby bylo zajištěno, že splňují obchodní specifikace a implementují obchodní logiku pro sestavu SSRS.

Zabezpečení

Použití uložených procedur ke spuštění sestavy vyžaduje přístupová práva k požadované uložené proceduře – to lze spravovat pomocí databázových uživatelů nebo rolí.

Tato správa přístupu k uloženým procedurám napsaným pro účely vytváření sestav pomáhá vytvořit zabezpečené řešení sestavování, ve kterém budou mít přístup k sestavám a spouštět je pouze konkrétní uživatelé.

Údržba

Zprávy SSRS založené na uložených procedurách se snadno udržují, protože jsou vyžadovány pouze změny v uložené proceduře, aniž by bylo nutné upravovat a sledovat volné skripty pro datové sady sestav.

Předpoklady

Tento článek předpokládá, že čtenáři jsou obeznámeni se základy T-SQL skriptů a databázových sestav.

Přečtěte si prosím článek Vývoj zpráv SSRS jednoduchými slovy abyste rychle pochopili, jak vytvořit jednoduchý přehled SSRS.

Nastavení ukázkové databáze (ITSales)

Pro začátek si vytvořte vzorovou databázi s názvem ITSales který obsahuje údaje o prodeji IT:

-- Vytvořte ukázkovou databázi (ITSales)CREATE DATABASE ITSales;GOUSE ITSales;-- (1) Vytvořte měsíční tabulku prodeje ve vzorové databáziCREATE TABLE MonthlySale ( SaleId INT PRIMARY KEY IDENTITY (1, 1) ,SellingDate DATETIME2 , Zákazník VARCHAR(50) ,Produkt VARCHAR(150) ,Cena celkem DECIMAL(10,2))GO-- (2) Vyplňte tabulku měsíčního prodejeSET IDENTITY_INSERT [dbo].[MonthlySale] ONINSERT INTO [dbo].[MonthlySale] ([ SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (1, N'2019-05-01 00:00:00', N'Asif', N'Dell Laptop', CAST( 300,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (2, N'2019-05- 02 00:00:00', N'Mike', N'Dell Laptop', CAST(300,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [ Zákazník], [Produkt], [TotalPrice]) VALUES (3, N'2019-05-02 00:00:00', N'Adil', N'Lenovo Laptop', CAST(350,00 AS Decimal(10, 2)) ))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Cu stomer], [Produkt], [TotalPrice]) VALUES (4, N'2019-05-03 00:00:00', N'Sarah', N'HP Laptop', CAST(250,00 AS Decimal(10, 2)) ))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (5, N'2019-05-05 00:00:00', N'Asif', N'Dell Desktop', CAST(200,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [ TotalPrice]) VALUES (6, N'2019-05-10 00:00:00', N'Sam', N'HP Desktop', CAST(300,00 AS Decimal(10, 2)))INSERT INTO [dbo]. [Měsíční prodej] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (7, N'2019-05-12 00:00:00', N'Mike', N'iPad ', CAST(250,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (8, N' 2019-05-13 00:00:00', N'Mike', N'iPad', CAST(250,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate ], [Zákazník], [Produkt], [TotalPrice]) VALUES (9, N'2019-05-20 00:00:00', N'Peter', N'Dell Laptop', CAST(350,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (10, N '2019-05-25 00:00:00', N'Peter', N'Asus Laptop', CAST(400,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [Datum prodeje], [Zákazník], [Produkt], [TotalPrice]) VALUES (11, N'2019-06-03 00:00:00', N'Sarah', N'iPad', CAST(300,00 AS Decimal( 10, 2)))VLOŽTE DO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (12, N'2019-06-05 00:00 :00', N'Sam', N'Dell Laptop', CAST(350,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [ Product], [TotalPrice]) VALUES (13, N'2019-06-10 00:00:00', N'Akeel', N'Acer Laptop', CAST(300,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (14, N'2019-06-12 00:00:00', N'Asif' , N'iPad', CAST(400,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([Sal eId], [Datum prodeje], [Zákazník], [Produkt], [TotalPrice]) VALUES (15, N'2019-06-14 00:00:00', N'Sarah', N'Lenovo Desktop', CAST( 400,00 AS desetinné číslo(10, 2)))VLOŽTE DO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (16, N'2019-06- 15 00:00:00', N'Sahil', N'HP Desktop', CAST(500,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [ Zákazník], [Produkt], [TotalPrice]) VALUES (17, N'2019-06-20 00:00:00', N'Akeel', N'iPad', CAST(350,00 AS Decimal(10, 2)) )INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (18, N'2019-06-24 00:00:00', N 'Mike', N'Dell Desktop', CAST(300,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice ]) VALUES (19, N'2019-06-25 00:00:00', N'Sahil', N'Lenovo Laptop', CAST(500,00 AS Decimal(10, 2)))INSERT INTO [dbo].[ Měsíční prodej] ([SaleId], [SellingDate], [Zákazník], [Produkt], [TotalPrice]) VALUE S (20, N'2019-06-26 00:00:00', N'Peter', N'Acer Laptop', CAST(350,00 AS Decimal(10, 2)))SET IDENTITY_INSERT [dbo].[Měsíční prodej] VYP

Požadavky, analýza a plánování

Než začnete pracovat na tomto projektu, podívejme se na očekávané obchodní požadavky pro naši měsíční zprávu a předběžnou analýzu.

Prohlášení

Obchodní požadavek na měsíční výkazy vám může přijít v následující podobě:

„Jako firemní uživatel si chci prohlížet měsíčník zpráva o prodeji“

Nápověda

Hledejte prosím klíčová slova v obchodním požadavku, například měsíčně , denně nebo týdně abyste pochopili, jakou frekvenci by měl mít výsledný přehled.

Předběžná analýza

Vzhledem k tomu, že se jedná o měsíční výkaz prodeje, vyžaduje buď automatické dodání parametrů za běhu, nebo se při výpočtu měsíčního prodeje spoléhá na kód uložené procedury.

Měsíční zpráva zobrazuje údaje za celý měsíc – to znamená, že zpráva by měla mít na paměti následující věci:

  1. Přehled musí obsahovat údaje z předchozího měsíce na základě aktuálního data
  2. Přehled musí dynamicky vypočítat předchozí měsíc aktuálního roku

Nakonec musíme vybrat nejvhodnější databázový objekt. A uložená procedura je nejlepší možností, jak se vypořádat s tímto druhem požadavků na obchodní výkaznictví.

Plán rozvoje

Plán rozvoje je jednoduchý:

  1. Vytvořte uloženou proceduru pro zobrazení měsíčních tržeb
  2. Vytvořte sestavu SSRS, která zobrazí měsíční údaje o prodeji na základě uložené procedury

Můžete k tomu přistoupit jedním z následujících způsobů:

  1. Uložená procedura bez parametrů, která vypočítává časové období posledního měsíce i tržby
  2. Uložená procedura s parametry, kde procedura vypočítá tržby a sestava vypočítá časové období posledního měsíce

Vytvořte a otestujte uloženou proceduru sestavy

První věcí by zde bylo vytvořit uloženou proceduru, která může splnit obchodní požadavky.

Výběr postupu bez přístupu parametrů

Zde splníme obchodní specifikaci použitím uložené procedury bez parametrů. To znamená, že nebudeme pouze počítat prodeje pomocí uložené procedury, ale budeme také počítat měsíční období prodeje na základě aktuálního data v uložené proceduře, nikoli za běhu.

Podstata logiky měsíčních zpráv

Měsíční zpráva ve skutečnosti neznamená „přehled prodeje za aktuální měsíc“, protože aktuální měsíc ještě není dokončen, takže se musíme zabývat posledním úplným měsícem – tedy předchozím měsícem.

Takto se vytváří většina profesionálních měsíčních zpráv, pokud není uvedeno jinak.

Pokud je například aktuální datum 6. července 2019, očekáváme, že měsíční přehled prodeje nám zobrazí tržby za červen 2019, protože červen je posledním úplným měsícem.

Návrh logiky měsíčního výkazu

Existuje mnoho způsobů, jak navrhnout logiku měsíčních sestav v T-SQL.

Koncept StartDate a AfterEndDate

Toto je nejdůležitější koncept v profesionálním reportingu s denní, měsíční, týdenní nebo roční frekvencí.

Musíme se dotazovat na prodejní tabulky od počátečního data do koncového data – to druhé lze také nazvat po koncovém datu .

Za předpokladu, že aktuální datum je 06. července 2019, musíme inicializovat počáteční datum (StartDate) na 01. června 2019 a po datu ukončení (AfterEndDate) na 01. července 2019, ale toto by mělo být provedeno dynamicky při každém volání procedury.

Výpočet data po ukončení

AfterEndDate je následující den po skončení posledního měsíce.

Za předpokladu, že dnes je 6. července 2019, bude AfterEndDate 1. července 2019.

Nejjednodušším způsobem, jak toho dosáhnout, je použít DateFromParts() funkce, která vyžaduje parametry Year, Month a Day k nastavení data.

Spusťte následující kód T-SQL a získejte AfterEndDate pomocí DateFromParts() funkce:

DECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Month(GETDATE())SET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)SELECT GETDATE () AS CurrentDate,@AfterEndDate as Next_Day_After_Last_Complete_Month

Výstup je následující:

Výpočet počátečního data

Datum zahájení (StartDate) je první den posledního měsíce. To lze také vypočítat pomocí DATEFROMPARTS() spolu s funkcí DATEADD() funkce.

Odečtením jednoho měsíce od AfterEndDate pomocí DATEADD() získáme počáteční datum za poslední měsíc.

Podívejte se prosím na následující kód T-SQL:

-- Výpočet StartDate a AfterEndDate pro měsíční přehled DECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Month(GETDATE())Date @AfterEndDate =DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)SET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Odečtení jednoho měsíce od AfterEndDateSELECT GETDATE() AS CurrentDate,@StartDate AS StartDate,@AfterEndDate jako Next_Day_AfteM 

Výstup je následující:

Uložená procedura ShowMonthlySales

Uloženou proceduru nakódujeme tak, aby vypočítala správné časové období plus měsíční tržby na základě výše uvedených výpočtů, bez potřeby parametrů.

Vytvořte uloženou proceduru takto:

VYTVOŘENÍ POSTUPU ShowMonthlySalesASSET NOCOUNT ONBEGINDECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMonTH=Month(GETDATE())- Výpočet prvního dne aktuální měsícSET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)-- Výpočet prvního dne posledního měsíceSET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Odečtení jednoho měsíce od AfterEndDate-- Zobrazit prodeje od od prvního dne minulého měsíce do prvního dne aktuálního měsíceSELECT s.SellingDate,s.Customer,s.Product,s.TotalPrice FROM MonthlySale kde s.SellingDate>[email protected] a s.SellingDate<@AfterEndDateorder by s .SellingDateEND

Test-spuštění uložené procedury

Za předpokladu, že aktuální datum je 06. červenec 2019 , spusťte uloženou proceduru proti ukázkové databázi ITSales zobrazíte výsledky:

--Otestujte-spusťte proceduru ShowMonthlySalesEXEC ShowMonthlySales

Výstup je následující:

Gratulujeme! Úspěšně jste vytvořili uloženou proceduru, která může běžet za profesionální měsíční sestavou prodeje. Dokud zůstane nedotčen a obchodní požadavky se nezmění, postup funguje po celý rok.

Co dělat

Nyní, když můžete psát uložené procedury pro měsíční zprávy, vyzkoušejte následující věci, abyste své dovednosti dále zlepšili:

  1. Vytvořte uloženou proceduru sestavy pro zobrazení denních údajů o prodeji na základě datu zahájení a po datu ukončení logika popsaná v tomto článku
  2. S ohledem na logiku měsíčního prodeje se pokuste vytvořit postup sestavování ročních údajů o prodeji
  3. Vytvořte přehled SSRS pro zobrazení měsíčního prodeje na základě uložené procedury uvedené v tomto článku, přičemž jako referenci použijte následující články:
  • Vytváření přehledů SSRS zaměřených na zákazníka s parametry
  • Vývoj přehledů SSRS v jednoduchých termínech

  1. Operátor PostgreSQL IN se slabým výkonem poddotazu

  2. Odstranit dotaz Chcete-li odstranit řádky v MySQL

  3. Zakažte všechna omezení tabulky v Oracle

  4. Základy tabulkových výrazů, 4. část – Odvozené tabulky, optimalizační úvahy, pokračování