Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách viết các thủ tục được lưu trữ cho các báo cáo SSRS chuyên nghiệp

Trong bài viết này, chúng ta sẽ nói về các báo cáo Dịch vụ báo cáo SQL Server chuyên nghiệp, cách tạo các thủ tục được lưu trữ cho các báo cáo này để đáp ứng các yêu cầu kinh doanh và lợi ích của việc sử dụng các thủ tục được lưu trữ để chạy sau các báo cáo SSRS.

Giới thiệu về Báo cáo SSRS Chuyên nghiệp

Đầu tiên chúng ta hãy làm quen với các báo cáo SSRS chuyên nghiệp.

Định nghĩa đơn giản

Một báo cáo SSRS chuyên nghiệp là một báo cáo được tạo ra với lưu ý đến các thông lệ tiêu chuẩn về phát triển báo cáo và đã được kiểm tra kỹ lưỡng để có thể đáp ứng các yêu cầu kinh doanh.

Nói cách khác, một báo cáo SSRS chuyên nghiệp được thiết kế, phát triển, thử nghiệm và triển khai rất cẩn thận cho môi trường mục tiêu để đảm bảo nó phục vụ mục đích và có lợi cho doanh nghiệp.

Ví dụ

Một ví dụ đơn giản về báo cáo SSRS chuyên nghiệp là báo cáo bán hàng hàng tháng cung cấp thông tin chi tiết về doanh nghiệp đang hoạt động tốt như thế nào về việc bán dịch vụ hoặc sản phẩm của mình.

Một ví dụ khác về báo cáo SSRS được phát triển chuyên nghiệp là báo cáo cho thấy các giao dịch kinh doanh hàng ngày từ góc độ kinh doanh.

Tần suất báo cáo SSRS chuyên nghiệp

Tần suất của một báo cáo mô tả tần suất nên chạy báo cáo này để hiển thị các số liệu mới nhất, sau đó có thể được gửi đến các bộ phận liên quan trong công ty hoặc cho các khách hàng bên ngoài.

Tần suất của báo cáo SSRS chuyên nghiệp có thể là một trong những mức độ sau:

Báo cáo hàng ngày

Báo cáo hàng ngày, như tên gọi đã chỉ ra, phải chạy hàng ngày để được truy cập hoặc gửi đến người đăng ký nội bộ và / hoặc bên ngoài.

Báo cáo hàng tuần

Một báo cáo hiển thị số liệu hàng tuần và được gửi đến người nhận hàng tuần.

Báo cáo hàng tháng

Báo cáo hàng tháng chứa dữ liệu cho cả tháng và được gửi hàng tháng.

Báo cáo hàng năm

Báo cáo hàng năm cung cấp thông tin chi tiết hơn về dữ liệu bằng cách tính toán số liệu hàng năm cho người đăng ký và người dùng cuối.

Báo cáo dựa trên bất kỳ thời kỳ tài chính nào

Các báo cáo theo sau bất kỳ thời kỳ tài chính nào khác đều thuộc loại này.

Giới thiệu về Tần suất Báo cáo

Xin lưu ý rằng báo cáo quan trọng nhất về tần suất là báo cáo hàng ngày.

Trên thực tế, đó không chỉ là báo cáo - dữ liệu bạn chuẩn bị cho báo cáo hàng ngày cũng rất quan trọng.

Nếu bạn đã chuẩn bị dữ liệu cho báo cáo hàng ngày, thì việc chuẩn bị dữ liệu cho báo cáo hàng tuần cũng giống như việc chạy báo cáo hàng ngày cho cả tuần. Đến lượt mình, báo cáo hàng tháng cũng giống như báo cáo hàng tuần bốn lần.

Tuy nhiên, nếu bạn chỉ được yêu cầu tạo báo cáo hàng tháng, thì việc chuẩn bị dữ liệu cho báo cáo hàng tháng cũng được chấp nhận và trong một số trường hợp được khuyến nghị thay vì chuẩn bị dữ liệu hàng ngày.

Chi tiết về điều này nằm ngoài phạm vi của bài viết này, nhưng lý do tôi đề cập ở đây là để làm nổi bật tầm quan trọng của việc phát triển một báo cáo hàng ngày đòi hỏi phải chuẩn bị dữ liệu cho báo cáo hàng ngày. Điều này cũng có thể chỉ ra cách chuẩn bị dữ liệu cho các báo cáo hàng tuần, hàng tháng và hàng năm.

Vai trò của một thủ tục được lưu trữ

Các thủ tục được lưu trữ đóng một vai trò quan trọng trong các báo cáo SSRS chuyên nghiệp vì chúng nhận được dữ liệu cần thiết cho báo cáo từ cơ sở dữ liệu.

Các thủ tục được lưu trữ mang lại nhiều lợi ích khi được sử dụng cho mục đích báo cáo.

Logic kinh doanh và các thủ tục được lưu trữ

Các thủ tục được lưu trữ rất được khuyến khích để triển khai logic nghiệp vụ báo cáo.

Dễ dàng kiểm tra đơn vị cơ sở dữ liệu

Các thủ tục đã lưu trữ có thể dễ dàng được kiểm tra theo đơn vị để đảm bảo rằng chúng đáp ứng đặc điểm kỹ thuật nghiệp vụ và triển khai logic nghiệp vụ cho báo cáo SSRS.

Bảo mật

Việc sử dụng các thủ tục được lưu trữ để chạy báo cáo yêu cầu quyền truy cập vào thủ tục được lưu trữ bắt buộc - điều này có thể được quản lý bằng vai trò hoặc người dùng cơ sở dữ liệu.

Quản lý quyền truy cập cho các thủ tục được lưu trữ được viết cho mục đích báo cáo giúp xây dựng một giải pháp báo cáo an toàn, trong đó chỉ những người dùng cụ thể mới có thể truy cập và chạy báo cáo.

Bảo trì

Báo cáo SSRS dựa trên các thủ tục được lưu trữ rất dễ duy trì vì chỉ cần thay đổi quy trình được lưu trữ, không cần sửa đổi và theo dõi các tập lệnh dạng tự do cho tập dữ liệu báo cáo.

Điều kiện tiên quyết

Bài viết này giả định rằng người đọc đã quen thuộc với những kiến ​​thức cơ bản về tập lệnh T-SQL và báo cáo cơ sở dữ liệu.

Vui lòng đọc bài viết Phát triển báo cáo SSRS bằng từ ngữ đơn giản để hiểu nhanh về cách tạo một báo cáo SSRS đơn giản.

Thiết lập cơ sở dữ liệu mẫu (ITSales)

Để bắt đầu mọi thứ, hãy tạo một cơ sở dữ liệu mẫu có tên ITSales trong đó chứa số liệu bán hàng CNTT:

 - Tạo cơ sở dữ liệu mẫu (ITSales) TẠO CƠ SỞ DỮ LIỆU ITSales; GOUSE ITSales; - (1) Tạo bảng doanh số hàng tháng trong cơ sở dữ liệu mẫu VARCHAR của khách hàng (50), VARCHAR của sản phẩm (150), TotalPrice DECIMAL (10,2)) ĐI-- (2) Điền vào bảng doanh số hàng thángSET IDENTITY_INSERT [dbo]. [MonthlySale] ONINSERT INTO [dbo]. [MonthlySale] ([ SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (1, N'2019-05-01 00:00:00 ', N'Asif', N'Dell Laptop ', CAST ( 300,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (2, N'2019-05- 02 00:00:00 ', N'Mike', N'Dell Laptop ', CAST (300.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate], [ Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (3, N'2019-05-02 00:00:00 ', N'Adil', N'Lenovo Laptop ', CAST (350,00 AS Decimal (10, 2) )) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [SaleDate], [Cu stomer], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (4, N'2019-05-03 00:00:00 ', N'Sarah', N'HP Laptop ', CAST (250,00 AS Decimal (10, 2) )) CHÈN VÀO [dbo]. [Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (5, N'2019-05-05 00:00:00 ', N'Asif ', N'Dell Desktop', CAST (200,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate], [Customer], [Product], [ TotalPrice]) VALUES (6, N'2019-05-10 00:00:00 ', N'Sam', N'HP Desktop ', CAST (300,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (7, N'2019-05-12 00:00:00 ', N'Mike', N'iPad ', CAST (250,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate], [Customer], [Product], [TotalPrice]) GIÁ TRỊ (8, N' 2019-05-13 00:00:00 ', N'Mike', N'iPad ', CAST (250,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [Ngày bán hàng ], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (9, N'2019-05-20 00:00:00 ', N'Peter', N'Dell Máy tính xách tay ', CAST (350,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate], [Customer], [Product], [TotalPrice]) GIÁ TRỊ (10, N '2019-05-25 00:00:00', N'Peter ', N'Asus Laptop', CAST (400,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (11, N'2019-06-03 00:00:00 ', N'Sarah', N'iPad ', CAST (300,00 AS Decimal ( 10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([Giá bán], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (12, N'2019-06-05 00:00 :00 ', N'Sam', N'Dell Laptop ', CAST (350.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [sellDate], [Customer], [ Product], [TotalPrice]) VALUES (13, N'2019-06-10 00:00:00 ', N'Akeel', N'Acer Laptop ', CAST (300.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [SaleDate], [Customer], [Product], [TotalPrice]) GIÁ TRỊ (14, N'2019-06-12 00:00:00 ', N'Asif' , N'iPad ', CAST (400,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([Sal eId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (15, N'2019-06-14 00:00:00 ', N'Sarah', N'Lenovo Desktop ', CAST ( 400,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (16, N'2019-06- 15 00:00:00 ', N'Sahil', N'HP Desktop ', CAST (500.00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [SellingDate], [ Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (17, N'2019-06-20 00:00:00 ', N'Akeel', N'iPad ', CAST (350,00 AS Decimal (10, 2)) ) CHÈN VÀO [dbo]. [Hàng tháng] ([Giá bán], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) GIÁ TRỊ (18, N'2019-06-24 00:00:00 ', N 'Mike', N'Dell Desktop ', CAST (300,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice ]) VALUES (19, N'2019-06-25 00:00:00 ', N'Sahil', Máy tính xách tay N'Lenovo ', CAST (500,00 AS Decimal (10, 2))) CHÈN VÀO [dbo]. [ Hàng tháng] ([SaleId], [Ngày bán], [Khách hàng], [Sản phẩm], [Tổng giá]) 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] TẮT 

Yêu cầu, Phân tích và Lập kế hoạch

Trước khi bạn bắt đầu thực hiện dự án này, hãy xem xét yêu cầu kinh doanh dự kiến ​​cho báo cáo hàng tháng của chúng tôi và phân tích sơ bộ.

Tuyên bố

Yêu cầu kinh doanh báo cáo hàng tháng có thể đến với bạn dưới dạng sau:

“Với tư cách là người dùng doanh nghiệp, tôi muốn xem hàng tháng báo cáo bán hàng ”

Gợi ý

Vui lòng tìm các từ khóa trong yêu cầu kinh doanh, chẳng hạn như hàng tháng , hàng ngày hoặc hàng tuần để hiểu tần suất mà báo cáo kết quả phải có.

Phân tích sơ bộ

Vì đây là báo cáo bán hàng hàng tháng, nó yêu cầu các thông số được cung cấp tự động tại thời điểm chạy hoặc dựa vào mã của quy trình được lưu trữ để tính toán doanh số hàng tháng.

Báo cáo hàng tháng hiển thị số liệu cho một tháng hoàn chỉnh - điều này có nghĩa là báo cáo cần lưu ý những điều sau:

  1. Báo cáo phải hiển thị các số liệu của tháng trước dựa trên ngày hiện tại
  2. Báo cáo phải tự động tính toán tháng trước của năm hiện tại

Cuối cùng, chúng ta phải chọn đối tượng cơ sở dữ liệu phù hợp nhất. Và một thủ tục được lưu trữ là lựa chọn tốt nhất để đối phó với loại yêu cầu báo cáo kinh doanh này.

Kế hoạch phát triển

Kế hoạch phát triển rất đơn giản:

  1. Tạo Quy trình được lưu trữ để hiển thị số liệu bán hàng hàng tháng
  2. Tạo báo cáo SSRS để hiển thị số liệu bán hàng hàng tháng dựa trên quy trình đã lưu trữ

Bạn có thể tiếp cận vấn đề này theo một trong những cách sau:

  1. Một thủ tục được lưu trữ không có tham số và thủ tục tính toán cả khoảng thời gian của tháng trước và doanh số bán hàng
  2. Một thủ tục được lưu trữ với các tham số, trong đó thủ tục tính toán doanh số bán hàng và báo cáo tính toán khoảng thời gian của tháng trước

Tạo và Kiểm tra-Chạy một Quy trình đã Lưu trữ Báo cáo

Điều đầu tiên ở đây là tạo một thủ tục được lưu trữ có thể đáp ứng yêu cầu kinh doanh.

Chọn thủ tục mà không có phương pháp tiếp cận tham số

Ở đây, chúng ta sẽ đáp ứng các đặc tả nghiệp vụ bằng cách sử dụng một thủ tục được lưu trữ mà không có tham số. Điều này có nghĩa là chúng tôi sẽ không chỉ tính toán doanh số bán hàng bằng quy trình được lưu trữ mà còn tính toán khoảng thời gian bán hàng hàng tháng dựa trên ngày hiện tại bên trong quy trình được lưu trữ thay vì thực hiện tại thời gian chạy.

Đánh giá thấp lôgic của Báo cáo Hàng tháng

Báo cáo hàng tháng không thực sự có nghĩa là "báo cáo bán hàng cho tháng hiện tại" vì tháng hiện tại chưa hoàn thành, vì vậy chúng tôi phải xử lý tháng hoàn chỉnh gần nhất - tức là tháng trước đó.

Đây là cách hầu hết các báo cáo chuyên nghiệp hàng tháng được xây dựng trừ khi có quy định khác.

Ví dụ:nếu ngày hiện tại là ngày 6 tháng 7 năm 2019, thì chúng tôi hy vọng báo cáo bán hàng hàng tháng sẽ hiển thị cho chúng tôi doanh số bán hàng cho tháng 6 năm 2019 vì tháng 6 là tháng hoàn chỉnh cuối cùng.

Thiết kế lôgic báo cáo hàng tháng

Có nhiều cách để thiết kế logic báo cáo hàng tháng trong T-SQL.

Khái niệm về StartDate và AfterEndDate

Đây là khái niệm quan trọng nhất trong báo cáo chuyên nghiệp với tần suất hàng ngày, hàng tháng, hàng tuần hoặc hàng năm.

Chúng tôi phải truy vấn các bảng bán hàng từ ngày bắt đầu đến ngày kết thúc - ngày sau cũng có thể được gọi là sau ngày kết thúc .

Vì vậy, giả sử rằng ngày hiện tại là ngày 6 tháng 7 năm 2019, chúng ta phải khởi tạo ngày bắt đầu (StartDate) là ngày 01 tháng 6 năm 2019 và sau ngày kết thúc (AfterEndDate) là ngày 01 tháng 7 năm 2019, nhưng điều này phải được thực hiện động mỗi khi quy trình được gọi.

Tính toán ngày kết thúc

AfterEndDate là ngày tiếp theo sau khi tháng trước kết thúc.

Giả sử hôm nay là ngày 6 tháng 7 năm 2019, thì AfterEndDate sẽ là ngày 1 tháng 7 năm 2019.

Cách đơn giản nhất để đạt được điều này là sử dụng DateFromParts () hàm sử dụng các tham số Năm, Tháng và Ngày để thiết lập một ngày.

Chạy mã T-SQL sau để tải AfterEndDate bằng cách sử dụng DateFromParts () chức năng:

 DECLARE @CurrentYear INT, @ CurrentMonth INT, @AfterEndDate DATETIMESET @ CurrentYear =YEAR (GETDATE ()) SET @ CurrentMontH =Tháng (GETDATE ()) SET @ AfterEndDate =DATEFROMPARTS (@ CurrentYear, @ CurrentMonth, 1) CHỌN GETDATE () AS CurrentDate, @ AfterEndDate as Next_Day_After_Last_Complete_Month 

Kết quả như sau:

Tính toán ngày bắt đầu

Ngày bắt đầu (StartDate) là ngày đầu tiên của tháng trước. Điều này cũng có thể được tính bằng DATEFROMPARTS () cùng với hàm DATEADD () chức năng.

Trừ một tháng cho AfterEndDate bằng cách sử dụng DATEADD () , chúng tôi lấy ngày bắt đầu cho tháng trước.

Vui lòng xem mã T-SQL sau:

 - Tính toán StartDate và AfterEndDate cho báo cáo hàng thángDECLARE @CurrentYear INT, @ CurrentMonth INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @ CurrentYear =YEAR (GETDATE ()) SET @ CurrentMontH =Month (GETDATE ()) SET @AfterEndDate =DATEFROMPARTS (@ CurrentYear, @ CurrentMonth, 1) SET @ StartDate =DATEADD (MM, -1, @ AfterEndDate) - Trừ một tháng cho AfterEndDateSELECT GETDATE () AS CurrentDate, @ StartDate AS StartDate, @ AfterEndDate as Next_Day_After_Last  

Kết quả như sau:

Quy trình được lưu trữ ShowMonthlySales

Chúng tôi sẽ viết mã quy trình được lưu trữ theo cách nó tính toán khoảng thời gian chính xác cộng với doanh số hàng tháng dựa trên các tính toán ở trên mà không cần tham số.

Tạo quy trình được lưu trữ như sau:

 TẠO THỦ TỤC ShowMonthlySalesASSET SỐ TÀI KHOẢN ONBEGINDECLARE @CurrentYear INT, @ CurrentMontH INT, @AfterEndDate DATETIME, @StartDate DATETIMESET @ CurrentYear =YEAR (GETDATE ()) SET @ CurrentMontH =Tháng (GETDATE ()) - Tính toán ngày đầu tiên tháng hiện tạiSET @ AfterEndDate =DATEFROMPARTS (@ CurrentYear, @ CurrentMonth, 1) - Tính ngày đầu tiên của tháng trướcSET @ StartDate =DATEADD (MM, -1, @ AfterEndDate) - Trừ một tháng cho AfterEndDate - Hiển thị doanh số bán hàng từ từ ngày đầu tiên của tháng trước đến ngày đầu tiên của tháng hiện tại .SellingDateEND 

Kiểm tra-Chạy quy trình đã lưu trữ

Giả sử ngày hiện tại là ngày 6 tháng 7 năm 2019 , hãy chạy quy trình được lưu trữ dựa trên cơ sở dữ liệu mẫu ITSales để xem kết quả:

 - Chạy thử thủ tục ShowMonthlySalesEXEC ShowMonthlySales 

Kết quả như sau:

Xin chúc mừng! Bạn đã tạo thành công một quy trình được lưu trữ có thể chạy sau một báo cáo bán hàng hàng tháng chuyên nghiệp. Miễn là nó vẫn còn nguyên và các yêu cầu kinh doanh không thay đổi, thì quy trình sẽ hoạt động hiệu quả trong suốt cả năm.

Việc cần làm

Bây giờ bạn có thể viết các thủ tục được lưu trữ cho các báo cáo hàng tháng, vui lòng thử những điều sau để cải thiện kỹ năng của bạn hơn nữa:

  1. Tạo một thủ tục báo cáo được lưu trữ để hiển thị số liệu bán hàng hàng ngày dựa trên ngày bắt đầu sau ngày kết thúc logic được thảo luận trong bài viết này
  2. Lưu ý logic doanh số hàng tháng, vui lòng cố gắng tạo quy trình báo cáo cho các số liệu bán hàng hàng năm
  3. Tạo báo cáo SSRS để hiển thị doanh số hàng tháng dựa trên quy trình được lưu trữ được đề cập trong bài viết này trong khi sử dụng các bài viết sau để tham khảo:
  • Tạo Báo cáo SSRS Tập trung vào Khách hàng với các Tham số
  • Phát triển Báo cáo SSRS bằng các Điều khoản Đơn giản

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ký hiệu ERD trong mô hình hóa dữ liệu

  2. Mô hình dữ liệu ứng dụng đào tạo Marathon

  3. Phân tích cú pháp các giá trị mặc định của tham số bằng PowerShell - Phần 1

  4. Cách cài đặt pgAdmin 4 trên Ubuntu 20.04 / 18.04 / 16.04

  5. Cách cài đặt và cấu hình ClickHouse trên Ubuntu 20.04