Database
 sql >> Baza danych >  >> RDS >> Database

Jak pisać procedury składowane dla profesjonalnych raportów SSRS

W tym artykule omówimy profesjonalne raporty SQL Server Reporting Services, jak tworzyć procedury składowane dla tych raportów, aby spełnić wymagania biznesowe, oraz korzyści płynące z używania procedur składowanych do uruchamiania raportów SSRS.

Informacje o profesjonalnych raportach SSRS

Najpierw zapoznajmy się z profesjonalnymi raportami SSRS.

Prosta definicja

Profesjonalny raport SSRS to raport stworzony z myślą o standardowych praktykach opracowywania raportów, który został dokładnie przetestowany pod kątem spełniania wymagań biznesowych.

Innymi słowy, profesjonalny raport SSRS jest bardzo starannie zaprojektowany, opracowany, przetestowany i wdrożony w środowisku docelowym, aby upewnić się, że służy celowi i jest korzystny dla firmy.

Przykłady

Prostym przykładem profesjonalnego raportu SSRS jest miesięczny raport sprzedaży, który daje wgląd w to, jak dobrze firma radzi sobie pod względem sprzedaży swoich usług lub produktów.

Innym przykładem profesjonalnie opracowanego raportu SSRS jest raport, który pokazuje codzienne transakcje biznesowe z perspektywy biznesowej.

Częstotliwość profesjonalnych raportów SSRS

Częstotliwość raportu opisuje, jak często ten raport powinien być uruchamiany, aby pokazać najnowsze dane, które można następnie przesłać do powiązanych działów w firmie lub do klientów zewnętrznych.

Częstotliwość profesjonalnego raportu SSRS może być jedną z następujących:

Raport dzienny

Codzienny raport, jak sama nazwa wskazuje, musi być uruchamiany codziennie, aby można go było uzyskać lub wysłać do wewnętrznych i/lub zewnętrznych subskrybentów.

Raport tygodniowy

Raport, który pokazuje tygodniowe liczby i jest wysyłany do odbiorców co tydzień.

Raport miesięczny

Raport miesięczny zawiera dane za cały miesiąc i powinien być dostarczany co miesiąc.

Raport roczny

Raport roczny daje lepszy wgląd w dane, obliczając roczne dane dla subskrybentów i użytkowników końcowych.

Raport na podstawie dowolnego okresu finansowego

Raporty następujące po dowolnym innym okresie finansowym należą do tej kategorii.

Informacje o częstotliwości raportów

Pamiętaj, że najważniejszym raportem, jeśli chodzi o częstotliwość, jest raport dzienny.

W rzeczywistości nie chodzi tylko o raport – ważne są również dane, które codziennie przygotowujesz do raportu.

Jeśli przygotowałeś dane do raportu dziennego, przygotowanie danych do raportu tygodniowego jest tym samym, co generowanie raportów dziennych przez cały tydzień. Z kolei raport miesięczny jest taki sam, jak czterokrotne uruchomienie raportu tygodniowego.

Jeśli jednak zostaniesz poproszony tylko o utworzenie raportu miesięcznego, przygotowanie danych do raportu w trybie miesięcznym jest również dopuszczalne i jest zalecane w niektórych przypadkach zamiast przygotowywania danych dziennych.

Szczegóły wykraczają poza zakres tego artykułu, ale wspomniałem o tym tutaj, aby podkreślić wagę opracowania raportu dziennego, który wymaga codziennego przygotowywania danych do raportu. Może to również pokazać, jak przygotować dane do raportów tygodniowych, miesięcznych i rocznych.

Rola procedury przechowywanej

Procedury składowane odgrywają istotną rolę w profesjonalnych raportach SSRS, ponieważ pobierają wymagane dane do raportu z bazy danych.

Procedury składowane zapewniają wiele korzyści, gdy są wykorzystywane do celów raportowania.

Logika biznesowa i procedury składowane

W celu wdrożenia logiki biznesowej raportowania zdecydowanie zaleca się procedury przechowywane.

Łatwość testowania jednostkowego bazy danych

Procedury składowane można łatwo testować jednostkowo, aby upewnić się, że spełniają one specyfikację biznesową i implementują logikę biznesową dla raportu SSRS.

Bezpieczeństwo

Używanie procedur składowanych do uruchamiania raportu wymaga praw dostępu do wymaganej procedury składowanej — można nią zarządzać za pomocą użytkowników bazy danych lub ról.

To zarządzanie dostępem do procedur składowanych napisanych do celów raportowania pomaga zbudować bezpieczne rozwiązanie raportowania, w którym tylko określeni użytkownicy mogą uzyskiwać dostęp i uruchamiać raporty.

Konserwacja

Raporty SSRS oparte na procedurach składowanych są łatwe w utrzymaniu, ponieważ wymagane są tylko zmiany w procedurze składowanej, bez konieczności modyfikowania i śledzenia dowolnych skryptów dla zestawów danych raportu.

Wymagania wstępne

W tym artykule założono, że czytelnicy są zaznajomieni z podstawami skryptów T-SQL i raportowania baz danych.

Przeczytaj artykuł Tworzenie raportów SSRS w prostych słowach aby szybko zrozumieć, jak utworzyć prosty raport SSRS.

Skonfiguruj przykładową bazę danych (ITSales)

Na początek utwórzmy przykładową bazę danych o nazwie ITSales który zawiera dane dotyczące sprzedaży IT:

-- Utwórz przykładową bazę danych (ITSales)CREATE DATABASE ITSales;GOUSE ITSales;-- (1) Utwórz tabelę sprzedaży miesięcznej w przykładowej bazie danychCREATE TABLE MonthlySale ( SaleId INT PRIMARY KEY IDENTITY (1, 1) ,SellingDate DATETIME2 , Klient VARCHAR(50) ,Produkt VARCHAR(150) ,Cena całkowita DECIMAL(10,2))GO-- (2) Wypełnij tabelę sprzedaży miesięcznejSET IDENTITY_INSERT [dbo].[Sprzedaż miesięczna] ONINSERT INTO [dbo].[Sprzedaż miesięczna] ([ SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) WARTOŚCI (1, N'2019-05-01 00:00:00', N'Asif', N'Dell Laptop', CAST( 300,00 AS Dziesiętne (10, 2))) WSTAW W [dbo]. [MiesięcznaSprzedaż] ([Identyfikator Sprzedaży], [Data Sprzedaży], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (2, N'2019-05- 02 00:00:00', N'Mike', N'Dell Laptop', CAST(300.00 AS Decimal(10, 2)))INSERT INTO [dbo].[Miesięczna wyprzedaż] ([Identyfikator sprzedaży], [Data sprzedaży], [ Klient], [Produkt], [Cena całkowita]) WARTOŚCI (3, N'2019-05-02 00:00:00', N'Adil', N'Lenovo Laptop', CAST (350,00 jako dziesiętne (10, 2) )) INSERT INTO [dbo]. [MiesięcznaSprzedaż] ([Identyfikator Wyprzedaży], [DataSprzedaży], [Cu stomer], [Produkt], [Cena całkowita]) WARTOŚCI (4, N'2019-05-03 00:00:00', N'Sarah', N'HP Laptop', CAST (250.00 AS dziesiętny(10, 2) )) INSERT INTO [dbo].[MiesięcznaSprzedaż] ([Identyfikator Wyprzedaży], [DataSprzedaży], [Klient], [Produkt], [CenaCałkowita]) WARTOŚCI (5, N'2019-05-05 00:00:00', N'Asif', N'Dell Desktop', CAST(200,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MiesięcznaSprzedaż] ([Identyfikator sprzedaży], [Data sprzedaży], [Klient], [Produkt], [ Cena całkowita]) VALUES (6, N'2019-05-10 00:00:00', N'Sam', N'HP Desktop', CAST (300,00 AS Decimal(10, 2)))INSERT INTO [dbo]. [Miesięczna wyprzedaż] ([Identyfikator sprzedaży], [Data sprzedaży], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (7, N'2019-05-12 00:00:00', N'Mike', N'iPad ', CAST(250,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MiesięcznaSprzedaż] ([Identyfikator Sprzedaży], [DataSprzedaży], [Klient], [Produkt], [CenaCałkowita]) WARTOŚCI (8, N' 2019-05-13 00:00:00', N'Mike', N'iPad', CAST(250.00 AS Decimal(10, 2)))INSERT INTO [dbo].[Miesięczna wyprzedaż] ([Identyfikator sprzedaży], [Data sprzedaży ], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (9, N'2019-05-20 00:00:00', N'Peter', N'Dell Laptop”, RZUT (350,00 AS dziesiętny(10, 2)))WSTAW DO [dbo].[Sprzedaż miesięczna] ([Identyfikator sprzedaży], [Data sprzedaży], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (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], [Data sprzedaży], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (11, N'2019-06-03 00:00:00', N'Sarah', N'iPad', CAST(300,00 jako dziesiętne) ( 10, 2))) WSTAW W [dbo]. [MiesięcznaSprzedaż] ([Identyfikator Wyprzedaży], [DataSprzedaży], [Klient], [Produkt], [CenaCałkowita]) WARTOŚCI (12, N'2019-06-05 00:00 :00', N'Sam', N'Dell Laptop', CAST(350.00 AS Decimal(10, 2)))INSERT INTO [dbo].[Miesięczna wyprzedaż] ([Identyfikator sprzedaży], [Data sprzedaży], [Klient], [ Produkt], [Cena całkowita]) WARTOŚCI (13, N'2019-06-10 00:00:00', N'Akeel', N'Laptop Acer', ODLEW (300.00 AS dziesiętny(10, 2)))WSTAW DO [dbo].[MiesięcznaSprzedaż] ([Identyfikator Wyprzedaży], [DataSprzedaży], [Klient], [Produkt], [CenaCałkowita]) WARTOŚCI (14, N'2019-06-12 00:00:00', N'Asif' , N'iPad', CAST(400,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MiesięcznaSprzedaż] ([Sal eId], [Data sprzedaży], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (15, N'2019-06-14 00:00:00', N'Sarah', N'Lenovo Desktop', CAST( 400,00 AS Decimal (10, 2))) WSTAW W [dbo]. [MiesięcznaSprzedaż] ([Identyfikator Sprzedaży], [Data Sprzedaży], [Klient], [Produkt], [Cena całkowita]) WARTOŚCI (16, N'2019-06- 15 00:00:00', N'Sahil', N'HP Desktop', CAST(500,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MiesięcznaSprzedaż] ([Identyfikator Wyprzedaży], [DataSprzedaży], [ Klient], [Produkt], [Cena całkowita]) WARTOŚCI (17, N'2019-06-20 00:00:00', N'Akeel', N'iPad', CAST(350.00 AS Decimal(10, 2)) )WSTAW DO [dbo].[MiesięcznaSprzedaż] ([Identyfikator Wyprzedaży], [DataSprzedaży], [Klient], [Produkt], [CenaCałkowita]) WARTOŚCI (18, N'2019-06-24 00:00:00', N 'Mike', N'Dell Desktop', CAST(300,00 AS Decimal(10, 2)))INSERT INTO [dbo].[MiesięcznaSprzedaż] ([Identyfikator sprzedaży], [Data sprzedaży], [Klient], [Produkt], [Cena całkowita ]) VALUES (19, N'2019-06-25 00:00:00', N'Sahil', N'Lenovo Laptop', CAST(500.00 AS Decimal(10, 2)))INSERT INTO [dbo].[ MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) WARTOŚĆ S (20, N'2019-06-26 00:00:00', N'Peter', N'Laptop Acer', CAST(350.00 AS Decimal(10, 2)))SET IDENTITY_INSERT [dbo].[Miesięczna wyprzedaż] WYŁĄCZ

Wymagania, analiza i planowanie

Zanim zaczniesz pracę nad tym projektem, przyjrzyjmy się oczekiwanym wymaganiom biznesowym dla naszego miesięcznego raportu i wstępnej analizy.

Oświadczenie

Wymaganie biznesowe dotyczące miesięcznego raportu może pojawić się w następującej formie:

„Jako użytkownik biznesowy chcę przeglądać miesięcznik raport sprzedaży”

Wskazówka

Poszukaj słów kluczowych w wymaganiach biznesowych, takich jak co miesiąc , codziennie lub co tydzień aby zrozumieć, z jaką częstotliwością powinien mieć wynikowy raport.

Analiza wstępna

Ponieważ jest to miesięczny raport sprzedaży, wymaga on albo automatycznego dostarczania parametrów w czasie wykonywania, albo opiera się na kodzie procedury składowanej w celu obliczenia miesięcznej sprzedaży.

Raport miesięczny zawiera dane za cały miesiąc – oznacza to, że raport powinien uwzględniać następujące kwestie:

  1. Raport musi zawierać dane z poprzedniego miesiąca na podstawie bieżącej daty
  2. Raport musi dynamicznie obliczać poprzedni miesiąc bieżącego roku

Na koniec musimy wybrać najbardziej odpowiedni obiekt bazy danych. A procedura składowana to najlepsza opcja do radzenia sobie z tego rodzaju wymaganiami dotyczącymi raportowania biznesowego.

Plan rozwoju

Plan rozwoju jest prosty:

  1. Utwórz procedurę składowaną, aby wyświetlić miesięczne dane dotyczące sprzedaży
  2. Utwórz raport SSRS, aby pokazać miesięczne dane sprzedaży na podstawie procedury składowanej

Możesz podejść do tego na jeden z następujących sposobów:

  1. Procedura składowana bez parametrów, która oblicza zarówno okres ostatniego miesiąca, jak i sprzedaż
  2. Procedura składowana z parametrami, w której procedura oblicza sprzedaż, a raport oblicza okres ostatniego miesiąca

Utwórz i przetestuj procedurę przechowywania raportów

Pierwszą rzeczą tutaj byłoby utworzenie procedury składowanej, która może spełnić wymagania biznesowe.

Wybór procedury bez podejścia do parametrów

Tutaj spełnimy specyfikację biznesową za pomocą procedury składowanej bez parametrów. Oznacza to, że nie tylko obliczymy sprzedaż za pomocą procedury składowanej, ale również obliczymy miesięczny okres sprzedaży na podstawie bieżącej daty wewnątrz procedury składowanej, zamiast robić to w czasie wykonywania.

Zrozumienie logiki raportu miesięcznego

Raport miesięczny tak naprawdę nie oznacza „raportu sprzedaży za bieżący miesiąc”, ponieważ bieżący miesiąc nie jest jeszcze kompletny, więc mamy do czynienia z ostatnim pełnym miesiącem – to znaczy z poprzednim miesiącem.

W ten sposób budowana jest większość profesjonalnych raportów miesięcznych, chyba że zaznaczono inaczej.

Na przykład, jeśli bieżąca data to 06 lipca 2019 r., oczekujemy, że miesięczny raport sprzedaży pokaże nam sprzedaż za czerwiec 2019 r., ponieważ czerwiec jest ostatnim pełnym miesiącem.

Projektowanie logiki raportu miesięcznego

Istnieje wiele sposobów projektowania logiki raportów miesięcznych w T-SQL.

Koncepcja StartDate i AfterEndDate

Jest to najważniejsza koncepcja w profesjonalnym raportowaniu z częstotliwościami dziennymi, miesięcznymi, tygodniowymi lub rocznymi.

Musimy wysyłać zapytania do tabel sprzedaży od daty rozpoczęcia do daty zakończenia – tę ostatnią można również nazwać po dacie zakończenia .

Czyli zakładając, że aktualna data to 06 lipca 2019, musimy zainicjować datę początkową (StartDate) na 01 Jun 2019 a po dacie zakończenia (AfterEndDate) na 01 Jul 2019, ale powinno to być wykonywane dynamicznie przy każdym wywołaniu procedury.

Obliczanie po dacie zakończenia

AfterEndDate to kolejny dzień po zakończeniu ostatniego miesiąca.

Zakładając, że dzisiaj jest 06 lipca 2019 r., AfterEndDate będzie 1 lipca 2019 r.

Najprostszym sposobem na osiągnięcie tego jest użycie DateFromParts() funkcja, która pobiera parametry roku, miesiąca i dnia do ustawienia daty.

Uruchom następujący kod T-SQL, aby uzyskać AfterEndDate za pomocą DateFromParts() funkcja:

DECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Miesiąc(GETDATE())SET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentETth () AS CurrentDate,@AfterEndDate jako Next_Day_After_Last_Complete_Month

Dane wyjściowe są następujące:

Obliczanie daty rozpoczęcia

Data rozpoczęcia (StartDate) to pierwszy dzień ostatniego miesiąca. Można to również obliczyć za pomocą DATEFROMPARTS() funkcja wraz z DATEADD() funkcja.

Odejmowanie jednego miesiąca od AfterEndDate za pomocą DATEADD() funkcji, otrzymujemy datę rozpoczęcia z ostatniego miesiąca.

Proszę zapoznać się z następującym kodem T-SQL:

-- Obliczanie StartDate i AfterEndDate dla raportu miesięcznegoDECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Miesiąc(GETDATEer())SETDA =DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)SET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Odjęcie jednego miesiąca od AfterEndDateSELECT GETDATE() AS CurrentDate,@StartDate JAKO StartDate,@AfterEndDate jako Next_Day_After_Last> 

Dane wyjściowe są następujące:

Procedura składowana ShowMonthlySales

Zamierzamy zakodować procedurę składowaną w taki sposób, aby obliczała poprawny okres czasu plus miesięczną sprzedaż w oparciu o powyższe obliczenia, bez konieczności podawania parametrów.

Utwórz procedurę składowaną w następujący sposób:

CREATE PROCEDURE ShowMonthlySalesASSET NOCOUNT ONBEGINDECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Miesiąc(GETDATE())- current monthSET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)-- Obliczanie pierwszego dnia ostatniego miesiącaSET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Odjęcie jednego miesiąca od AfterEndDate-- Pokaż sprzedaż od od pierwszego dnia ostatniego miesiąca do pierwszego dnia bieżącego miesiącaSELECT s.SellingDate,s.Customer,s.Product,s.TotalPrice FROM MonthlySale swhere s.SellingDate>[email protected] i s.SellingDate<@AfterEndDateorder by s .Data sprzedażyEND

Testowe uruchomienie procedury składowanej

Zakładając, że aktualna data to 06 lipca 2019 , uruchommy procedurę składowaną na przykładowej bazie danych ITSales aby zobaczyć wyniki:

--Przetestuj procedurę ShowMonthlySalesEXEC ShowMonthlySales

Dane wyjściowe są następujące:

Gratulacje! Pomyślnie utworzono procedurę składowaną, która może działać w ramach profesjonalnego miesięcznego raportu sprzedaży. Dopóki pozostaje nienaruszona, a wymagania biznesowe się nie zmieniają, procedura wykonuje pracę przez cały rok.

Rzeczy do zrobienia

Teraz, gdy możesz już pisać procedury składowane dla raportów miesięcznych, spróbuj następujących rzeczy, aby jeszcze bardziej poprawić swoje umiejętności:

  1. Utwórz procedurę przechowywaną w raporcie, aby pokazać dzienne dane dotyczące sprzedaży na podstawie daty rozpoczęcia i po dacie zakończenia logika omówiona w tym artykule
  2. Mając na uwadze logikę miesięcznej sprzedaży, spróbuj utworzyć procedurę raportu dla rocznych danych sprzedaży
  3. Utwórz raport SSRS, aby pokazać miesięczną sprzedaż na podstawie procedury składowanej wymienionej w tym artykule, korzystając z następujących artykułów w celach informacyjnych:
  • Tworzenie zorientowanych na klienta raportów SSRS z parametrami
  • Tworzenie raportów SSRS w prostych warunkach

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zrozumienie obsługi Java dla trwałości z JPA

  2. Szybka wskazówka – przyspiesz powolne przywracanie z dziennika transakcji

  3. Instrukcja SQL WHERE

  4. Knee-Jerk Performance Tuning:wystarczy dodać dysk SSD

  5. Jaki wpływ mogą mieć różne opcje kursora?