Database
 sql >> база данни >  >> RDS >> Database

Как да напишете съхранени процедури за професионални SSRS отчети

В тази статия ще говорим за професионални отчети на SQL Server Reporting Services, как да създадете съхранени процедури за тези отчети, за да отговарят на бизнес изискванията, и ползите от използването на съхранени процедури за изпълнение зад SSRS отчети.

Относно професионалните SSRS отчети

Нека първо се запознаем с професионалните SSRS отчети.

Проста дефиниция

Професионалният SSRS отчет е отчет, създаден с оглед на стандартните практики за разработване на отчети и който е щателно тестван, за да може да изпълни бизнес изискванията.

С други думи, професионален SSRS отчет е много внимателно проектиран, разработен, тестван и внедрен в целевата среда, за да се гарантира, че служи на целта и е от полза за бизнеса.

Примери

Прост пример за професионален SSRS отчет е месечен отчет за продажбите, който дава представа за това колко добре се справя бизнесът по отношение на продажбата на своите услуги или продукти.

Друг пример за професионално разработен SSRS отчет е отчет, който показва ежедневните бизнес транзакции от гледна точка на бизнеса.

Честота на професионалните SSRS отчети

Честотата на отчета описва колко често трябва да се изпълнява този отчет, за да покаже най-новите данни, които след това могат да бъдат изпратени до свързани отдели в компанията или до външни клиенти.

Честотата на професионален SSRS отчет може да бъде една от следните:

Ежедневен отчет

Ежедневният отчет, както показва името, трябва да се изпълнява ежедневно, за да бъде достъпен или изпратен до вътрешните и/или външните си абонати.

Седмичен отчет

Отчет, който показва седмични цифри и се изпраща на получателите всяка седмица.

Месечен отчет

Месечният отчет съдържа данни за целия месец и е предназначен да се доставя всеки месец.

Годишен отчет

Годишният отчет дава по-добра представа за данните, като изчислява годишните цифри за своите абонати и крайни потребители.

Отчет въз основа на всеки финансов период

Отчетите, които следват всеки друг финансов период, попадат в тази категория.

Относно честотата на отчетите

Моля, имайте предвид, че най-важният отчет, когато става въпрос за честота, е дневният отчет.

Всъщност не е само отчетът – данните, които подготвяте за отчета ежедневно, също са важни.

Ако сте подготвили данни за дневен отчет, тогава изготвянето на данни за седмичен отчет е същото като изготвянето на ежедневни отчети за цяла седмица. Месечен отчет от своя страна е същото като пускането на седмичен отчет четири пъти.

Въпреки това, ако бъдете помолени да създадете само месечен отчет, тогава изготвянето на данни за отчета на месечна база също е приемливо и се препоръчва при някои обстоятелства вместо изготвянето на ежедневни данни.

Подробностите за това са извън обхвата на тази статия, но причината, поради която споменах това тук, е да подчертая важността на разработването на ежедневен отчет, който изисква подготовка на данни за отчета на дневна база. Това може също да покаже как да подготвите данни за седмични, месечни и годишни отчети.

Ролята на съхранената процедура

Съхранените процедури играят жизненоважна роля в професионалните SSRS отчети, тъй като получават необходимите данни за отчета от базата данни.

Съхранените процедури предоставят много предимства, когато се използват за целите на отчитането.

Бизнес логика и съхранени процедури

Съхранените процедури са силно препоръчителни за прилагане на бизнес логиката за отчитане.

Леснота на тестване на база данни

Съхранените процедури могат лесно да бъдат тествани с единици, за да се гарантира, че отговарят на бизнес спецификацията и прилагат бизнес логиката за SSRS отчета.

Сигурност

Използването на съхранени процедури за стартиране на отчет изисква права за достъп до необходимата съхранена процедура – ​​това може да се управлява с потребители или роли на базата данни.

Това управление на достъпа за съхранени процедури, написани за целите на отчитането, помага да се изгради защитено решение за отчитане, в което само определени потребители имат достъп и изпълняват отчетите.

Поддръжка

SSRS отчетите, базирани на съхранени процедури, са лесни за поддържане, тъй като са необходими само промени в съхранената процедура, без да е необходимо да се променят и следят скриптове в свободна форма за наборите от данни за отчети.

Предварителни условия

Тази статия предполага, че читателите са запознати с основите на T-SQL скриптовете и отчитането на база данни.

Моля, прочетете статията Разработване на SSRS отчети с прости думи за да получите бързо разбиране как да създадете прост SSRS отчет.

Настройте примерна база данни (ITSales)

За да започнем нещата, нека създадем примерна база данни с име ITSales която съдържа данни за ИТ продажбите:

-- Създайте примерна база данни (ITSales)CREATE DATABASE ITSales;GOUSE ITSales;-- (1) Създайте месечна таблица за продажби в примерната база данниCREATE TABLE MonthlySale ( SaleId INT PRIMARY KEY IDENTITY (1, 1) ,SellingDate DATETIME2 , Клиент VARCHAR(50) ,Продукт VARCHAR(150) ,Обща цена DECIMAL(10,2))GO-- (2) Попълване на месечната таблица за продажбаSET IDENTITY_INSERT [dbo].[MonthlySale] ONINSERT INTO [dbo].[MonthlySale] ([[MonthlySale] ([MonthlySale]) SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (1, N'2019-05-01 00:00:00', N'Asif', N'Dell Laptop', CAST( 300,00 КАТО десетична(10, 2))) ВМЕСТЕ В [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) СТОЙНОСТИ (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], [SellingDate], [MonthlySale] Клиент], [Продукт], [Обща цена]) СТОЙНОСТИ (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], [Продукт], [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]. [MonthlySale] ([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) ], [Клиент], [Продукт], [Обща цена]) СТОЙНОСТИ (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]) СТОЙНОСТИ (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], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (11, N'2019-06-03 00:00:00', N'Sarah', N'iPad', CAST(300.00 AS Decimal( 10, 2)))INSERT INTO [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) STONYS (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], [Customer], [MonthlySale] Продукт], [TotalPrice]) СТОЙНОСТИ (13, N'2019-06-10 00:00:00', N'Akeel', N'Acer Laptop', CAST(300,00 КАТО десетичен знак(10, 2)))ВМЕСЕТЕ В [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], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (15, N'2019-06-14 00:00:00', N'Sarah', N'Lenovo Desktop', CAST( 400,00 КАТО десетична(10, 2))) ВМЕСТЕ В [dbo].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) СТОЙНОСТИ (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], [SellingDate], [MonthlySale] Клиент], [Продукт], [Обща цена]) СТОЙНОСТИ (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]). ]) СТОЙНОСТИ (19, N'2019-06-25 00:00:00', N'Sahil', N'Lenovo Laptop', CAST(500.00 AS Decimal(10, 2)))INSERT INTO [dbo].[ Месечна разпродажба] ([SaleId], [SellingDate], [Customer], [Product], [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].[MonthlySale] ИЗКЛ.

Изисквания, анализ и планиране

Преди да започнете да работите по този проект, нека да разгледаме очакваното бизнес изискване за нашия месечен отчет и предварителен анализ.

Изявление

Бизнес изискването за месечен отчет може да ви дойде в следната форма:

„Като бизнес потребител искам да гледам месечно отчет за продажбите“

Съвет

Моля, потърсете ключовите думи в бизнес изискването като месечно , ежедневно или седмично за да разберете каква честота трябва да има полученият отчет.

Предварителен анализ

Тъй като това е месечен отчет за продажбите, той или изисква параметрите да се предоставят автоматично по време на изпълнение, или разчита на кода на съхранената процедура за изчисляване на месечните продажби.

Месечният отчет показва цифри за цял месец – това означава, че отчетът трябва да има предвид следните неща:

  1. Отчетът трябва да показва цифри от предходния месец въз основа на текущата дата
  2. Отчетът трябва да изчислява динамично предходния месец на текущата година

Накрая трябва да изберем най-подходящия обект на база данни. А съхранената процедура е най-добрият вариант за справяне с този вид изискване за бизнес отчетност.

План за развитие

Планът за развитие е прост:

  1. Създайте съхранена процедура за показване на месечни данни за продажбите
  2. Създайте SSRS отчет за показване на месечни данни за продажбите въз основа на съхранената процедура

Можете да подходите към това по един от следните начини:

  1. Запазена процедура без параметри и процедурата изчислява както периода от последния месец, така и продажбите.
  2. Запазена процедура с параметри, където процедурата изчислява продажбите, а отчетът изчислява периода от време за последния месец.

Създаване и тестване на съхранена процедура на отчет

Първото нещо тук би било да се създаде съхранена процедура, която да изпълни бизнес изискването.

Избор на процедура без параметърен подход

Тук ще изпълним бизнес спецификацията, като използваме съхранена процедура без параметри. Това означава, че не само ще изчислим продажбите, използвайки съхранената процедура, но също така ще изчислим месечния период от време за продажби въз основа на текущата дата в съхранената процедура, вместо да го правим по време на изпълнение.

Понижаване на логиката на месечния отчет

Месечният отчет всъщност не означава „отчет за продажбите за текущия месец“, тъй като текущият месец все още не е завършен, така че трябва да се справим с последния пълен месец – тоест предходния месец.

По този начин се изграждат повечето професионални месечни отчети, освен ако не е посочено друго.

Например, ако текущата дата е 6 юли 2019 г., тогава очакваме месечният отчет за продажбите да ни покаже продажбите за юни 2019 г., тъй като юни е последният пълен месец.

Проектиране на логиката на месечния отчет

Има много начини за проектиране на логика за месечен отчет в T-SQL.

Концепцията за начална дата и последна дата

Това е най-важната концепция в професионалното отчитане с ежедневна, месечна, седмична или годишна честота.

Трябва да потърсим таблиците за продажби от начална дата до крайна дата – последната може да се извика и след крайна дата .

Така че, ако приемем, че текущата дата е 06 юли 2019 г., трябва да инициализираме началната дата (StartDate) с 01 юни 2019 г. и след крайната дата (AfterEndDate) с 01 юли 2019 г., но това трябва да се извършва динамично всеки път, когато процедурата бъде извикана.

Изчисляване на крайната дата

AfterEndDate е следващият ден след края на последния месец.

Ако приемем, че днес е 06 юли 2019 г., AfterEndDate ще бъде 01 юли 2019 г.

Най-простият начин да постигнете това е да използвате DateFromParts() функция, която приема параметри за година, месец и ден, за да настрои дата.

Изпълнете следния T-SQL код, за да получите AfterEndDate, като използвате DateFromParts() функция:

DECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Month(GETDATE())SET @AfterEndDate=DATEFROMPARTS(@CurrentCurrent)SELECT на GETDATE () КАТО CurrentDate,@AfterEndDate като Next_Day_After_Last_Complete_Month

Резултатът е както следва:

Изчисляване на началната дата

Началната дата (StartDate) е първият ден от последния месец. Това може да се изчисли и от DATEFROMPARTS() функция заедно с DATEADD() функция.

Изваждане на един месец от AfterEndDate с помощта на DATEADD() функция, получаваме началната дата за последния месец.

Моля, вижте следния T-SQL код:

-- Изчисляване на начална дата и дата след края за месечния отчетDECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentMontH=Month(f)Date =DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)SET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Изваждане на един месец от AfterEndDateSELECT GETDATE() AS CurrentDate,@StartDate AS StartDate,@AfterEndDate като Next_Laonth_Date> 

Резултатът е както следва:

Запазената процедура ShowMonthlySales

Ще кодираме съхранената процедура по такъв начин, че да изчисли правилния период от време плюс месечните продажби въз основа на горните изчисления, без да има нужда от параметри.

Създайте съхранената процедура, както следва:

СЪЗДАВАНЕ НА ПРОЦЕДУРА ShowMonthlySalesASSET NOCOUNT ONBEGINDECLARE @CurrentYear INT,@CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @CurrentYear=YEAR(GETDATE())SET @CurrentYear(GETDATE())SET @CurrentMonth(GETDATE())SET @CurrentMontGET на първия ден(дата на първия месец) текущ месецSET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)-- Изчисляване на първия ден от последния месецSET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Изваждане на един месец от AfterEndDate-- Показване на продажбите от от първия ден на последния месец до първия ден на текущия месецSELECT s.SellingDate,s.Customer,s.Product,s.TotalPrice FROM MonthlySale, където s.SellingDate>[email protected] и s.SellingDate<@AfterEndDateorder by s .SellingDateEND

Тест-изпълнение на съхранената процедура

Ако приемем, че текущата дата е 6 юли 2019 г. , нека изпълним съхранената процедура срещу примерната база данни ITSales за да видите резултатите:

--Тестово стартиране на процедурата ShowMonthlySalesEXEC ShowMonthlySales

Резултатът е както следва:

Честито! Успешно създадохте съхранена процедура, която може да работи зад професионален месечен отчет за продажбите. Докато остава недокоснат и бизнес изискванията не се променят, процедурата върши работата през цялата година.

Неща за правене

Сега, когато можете да пишете съхранени процедури за месечни отчети, моля, опитайте следните неща, за да подобрите още повече уменията си:

  1. Създайте съхранена процедура за отчет, за да показвате дневни данни за продажбите въз основа на начална дата и след крайна дата логиката, разгледана в тази статия
  2. Имайки предвид логиката на месечните продажби, моля, опитайте се да създадете процедура за отчет за годишните данни за продажбите
  3. Създайте SSRS отчет, който да показва месечните продажби въз основа на съхранената процедура, спомената в тази статия, като използвате следните статии за справка:
  • Създаване на ориентирани към клиента SSRS отчети с параметри
  • Развитие на SSRS отчети с прости думи

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да коментирате в SQL

  2. Преглед на функцията DBCC CheckDB

  3. Как да премахнете дубликатите в SQL

  4. Работа с JDBC данни в Domo

  5. Инкременталните статистики НЕ се използват от оптимизатора на заявки