Database
 sql >> Base de données >  >> RDS >> Database

Comment écrire des procédures stockées pour les rapports SSRS professionnels

Dans cet article, nous parlerons des rapports professionnels SQL Server Reporting Services, de la manière de créer des procédures stockées pour ces rapports afin de répondre aux exigences de l'entreprise et des avantages de l'utilisation de procédures stockées pour s'exécuter derrière les rapports SSRS.

À propos des rapports SSRS professionnels

Commençons par nous familiariser avec les rapports SSRS professionnels.

Définition simple

Un rapport SSRS professionnel est un rapport créé avec les pratiques standard de développement de rapport à l'esprit et qui a été soigneusement testé pour être capable de répondre aux exigences de l'entreprise.

En d'autres termes, un rapport SSRS professionnel est très soigneusement conçu, développé, testé et déployé dans l'environnement cible pour s'assurer qu'il sert l'objectif et est bénéfique pour l'entreprise.

Exemples

Un exemple simple de rapport SSRS professionnel est un rapport de vente mensuel qui donne un aperçu de la qualité de l'entreprise en termes de vente de ses services ou produits.

Un autre exemple de rapport SSRS développé par des professionnels est un rapport qui montre les transactions commerciales quotidiennes du point de vue commercial.

Fréquence des rapports SSRS professionnels

La fréquence d'un rapport décrit la fréquence à laquelle ce rapport doit être exécuté pour afficher les derniers chiffres qui peuvent ensuite être envoyés aux services concernés au sein de l'entreprise ou à des clients externes.

La fréquence d'un rapport SSRS professionnel peut être l'une des suivantes :

Rapport quotidien

Un rapport quotidien, comme son nom l'indique, doit s'exécuter quotidiennement pour être consulté ou envoyé à ses abonnés internes et/ou externes.

Rapport hebdomadaire

Un rapport qui affiche les chiffres hebdomadaires et est envoyé aux destinataires chaque semaine.

Rapport mensuel

Un rapport mensuel contient des données pour l'ensemble du mois et est censé être envoyé chaque mois.

Rapport annuel

Un rapport annuel donne plus d'informations sur les données en calculant les chiffres annuels pour ses abonnés et utilisateurs finaux.

Rapport basé sur n'importe quelle période financière

Les rapports qui suivent toute autre période financière entrent dans cette catégorie.

À propos de la fréquence des rapports

Veuillez garder à l'esprit que le rapport le plus important en termes de fréquence est le rapport quotidien.

En fait, il n'y a pas que le rapport ; les données que vous préparez quotidiennement pour le rapport sont également importantes.

Si vous avez préparé des données pour un rapport quotidien, la préparation des données pour un rapport hebdomadaire revient au même que l'exécution de rapports quotidiens pour une semaine entière. Un rapport mensuel, à son tour, équivaut à exécuter un rapport hebdomadaire quatre fois.

Toutefois, si vous êtes uniquement invité à créer un rapport mensuel, la préparation des données pour le rapport sur une base mensuelle est également acceptable et est recommandée dans certaines circonstances plutôt que la préparation des données quotidiennes.

Les détails à ce sujet dépassent le cadre de cet article, mais la raison pour laquelle je l'ai mentionné ici est de souligner l'importance de développer un rapport quotidien qui nécessite de préparer quotidiennement des données pour le rapport. Cela peut également montrer comment préparer les données pour les rapports hebdomadaires, mensuels et annuels.

Le rôle d'une procédure stockée

Les procédures stockées jouent un rôle essentiel dans les rapports SSRS professionnels, car elles obtiennent les données requises pour le rapport à partir de la base de données.

Les procédures stockées offrent de nombreux avantages lorsqu'elles sont utilisées à des fins de création de rapports.

Logique métier et procédures stockées

Les procédures stockées sont fortement recommandées pour mettre en œuvre la logique métier de création de rapports.

Facilité de test unitaire de la base de données

Les procédures stockées peuvent être facilement testées à l'unité pour s'assurer qu'elles répondent aux spécifications métier et implémentent la logique métier pour le rapport SSRS.

Sécurité

L'utilisation de procédures stockées pour exécuter un rapport nécessite des droits d'accès à la procédure stockée requise - cela peut être géré avec des utilisateurs ou des rôles de base de données.

Cette gestion des accès pour les procédures stockées écrites à des fins de création de rapports permet de créer une solution de création de rapports sécurisée dans laquelle seuls des utilisateurs spécifiques peuvent accéder aux rapports et les exécuter.

Entretien

Les rapports SSRS basés sur des procédures stockées sont faciles à gérer car seules des modifications de la procédure stockée sont nécessaires, sans qu'il soit nécessaire de modifier et de suivre les scripts de forme libre pour les ensembles de données du rapport.

Pré-requis

Cet article suppose que les lecteurs connaissent les bases des scripts T-SQL et des rapports de base de données.

Veuillez lire l'article Développement des rapports SSRS en mots simples pour comprendre rapidement comment créer un rapport SSRS simple.

Configurer un exemple de base de données (ITSales)

Pour commencer, créons un exemple de base de données nommé ITSales qui contient les chiffres des ventes informatiques :

-- Create a sample database (ITSales)
CREATE DATABASE ITSales;
GO


USE ITSales;

-- (1) Create a monthly sale table in the sample database
CREATE TABLE MonthlySale (
  SaleId INT PRIMARY KEY IDENTITY (1, 1)
 ,SellingDate DATETIME2
 ,Customer	VARCHAR(50)
 ,Product VARCHAR(150)
 ,TotalPrice DECIMAL(10,2)
)

GO

-- (2) Populate the monthly sale table
SET IDENTITY_INSERT [dbo].[MonthlySale] ON
INSERT 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], [Customer], [Product], [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], [Customer], [Product], [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], [Customer], [Product], [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], [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]) 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] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (15, N'2019-06-14 00:00:00', N'Sarah', N'Lenovo Desktop', CAST(400.00 AS Decimal(10, 2)))
INSERT INTO [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], [Customer], [Product], [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].[MonthlySale] ([SaleId], [SellingDate], [Customer], [Product], [TotalPrice]) VALUES (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] OFF

Exigences, analyse et planification

Avant de commencer à travailler sur ce projet, examinons les besoins commerciaux attendus pour notre rapport mensuel et une analyse préliminaire.

Déclaration

L'exigence commerciale du rapport mensuel peut vous parvenir sous la forme suivante :

"En tant qu'utilisateur professionnel, je souhaite afficher un rapport mensuel rapport de vente"

Astuce

Veuillez rechercher les mots-clés dans l'exigence commerciale, tels que mensuel , quotidiennement ou hebdomadaire pour comprendre quelle fréquence le rapport résultant devrait avoir.

Analyse préliminaire

Puisqu'il s'agit d'un rapport de ventes mensuel, il nécessite soit que des paramètres soient fournis automatiquement au moment de l'exécution, soit s'appuie sur le code de la procédure stockée pour calculer les ventes mensuelles.

Un rapport mensuel affiche les chiffres d'un mois complet. Cela signifie que le rapport doit garder à l'esprit les éléments suivants :

  1. Le rapport doit indiquer les chiffres du mois précédent en fonction de la date actuelle
  2. Le rapport doit calculer dynamiquement le mois précédent de l'année en cours

Enfin, nous devons choisir l'objet de base de données le mieux adapté. Et une procédure stockée est la meilleure option pour faire face à ce type d'exigence de création de rapports.

Plan de développement

Le plan de développement est simple :

  1. Créer une procédure stockée pour afficher les chiffres des ventes mensuelles
  2. Créer un rapport SSRS pour afficher les chiffres de ventes mensuels basés sur la procédure stockée

Vous pouvez aborder cela de l'une des manières suivantes :

  1. Une procédure stockée sans paramètres, et la procédure calcule à la fois la période du mois dernier et les ventes
  2. Une procédure stockée avec des paramètres, où la procédure calcule les ventes et le rapport calcule la période du mois dernier

Créer et tester une procédure stockée de rapport

La première chose ici serait de créer une procédure stockée qui peut répondre aux besoins de l'entreprise.

Choix de la procédure sans approche de paramètre

Ici, nous allons respecter la spécification métier en utilisant une procédure stockée sans paramètres. Cela signifie que nous n'allons pas seulement calculer les ventes à l'aide de la procédure stockée, mais nous allons également calculer la période de vente mensuelle en fonction de la date actuelle dans la procédure stockée plutôt que de le faire au moment de l'exécution.

Comprendre la logique du rapport mensuel

Le rapport mensuel ne signifie pas vraiment "un rapport de ventes pour le mois en cours", car le mois en cours n'est pas encore complet, nous devons donc traiter le dernier mois complet, c'est-à-dire le mois précédent.

C'est ainsi que sont construits la plupart des rapports mensuels professionnels, sauf indication contraire.

Par exemple, si la date actuelle est le 06 juillet 2019, nous nous attendons à ce que le rapport mensuel sur les ventes nous indique les ventes de juin 2019, car juin est le dernier mois complet.

Concevoir la logique du rapport mensuel

Il existe de nombreuses façons de concevoir une logique de rapport mensuel dans T-SQL.

Le concept de StartDate et AfterEndDate

C'est le concept le plus important dans le reporting professionnel avec des fréquences quotidiennes, mensuelles, hebdomadaires ou annuelles.

Nous devons interroger les tables de ventes à partir d'une date de début jusqu'à la date de fin - cette dernière peut également être appelée après la date de fin .

Donc, en supposant que la date actuelle est le 06 juillet 2019, nous devons initialiser la date de début (StartDate) avec le 01 juin 2019 et après la date de fin (AfterEndDate) avec le 01 juillet 2019, mais cela doit être effectué dynamiquement chaque fois que la procédure est appelée.

Calcul de la date de fin après

AfterEndDate est le jour suivant la fin du dernier mois.

En supposant qu'aujourd'hui est le 06 juillet 2019, l'AfterEndDate sera le 01 juillet 2019.

Le moyen le plus simple d'y parvenir est d'utiliser DateFromParts() fonction qui prend les paramètres Année, Mois et Jour pour configurer une date.

Exécutez le code T-SQL suivant pour obtenir AfterEndDate en utilisant DateFromParts() fonction :

DECLARE @CurrentYear INT
,@CurrentMonth INT
, @AfterEndDate DATETIME

SET @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

Le résultat est le suivant :

Calcul de la date de début

La date de début (StartDate) est le premier jour du mois dernier. Cela peut également être calculé par le DATEFROMPARTS() fonction avec DATEADD() fonction.

Soustraire un mois de AfterEndDate en utilisant DATEADD() fonction, nous obtenons la date de début du mois dernier.

Veuillez consulter le code T-SQL suivant :

-- Computing StartDate and AfterEndDate for the monthly report
DECLARE @CurrentYear INT
,@CurrentMonth INT
, @AfterEndDate DATETIME
, @StartDate DATETIME

SET @CurrentYear=YEAR(GETDATE())
SET @CurrentMontH=Month(GETDATE())

SET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)
SET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Subtracting one month from AfterEndDate


SELECT GETDATE() AS CurrentDate,@StartDate AS StartDate,@AfterEndDate as Next_Day_After_Last_Complete_Month

Le résultat est le suivant :

La procédure stockée ShowMonthlySales

Nous allons coder la procédure stockée de manière à ce qu'elle calcule la période correcte plus les ventes mensuelles sur la base des calculs ci-dessus, sans avoir besoin de paramètres.

Créez la procédure stockée comme suit :

CREATE PROCEDURE ShowMonthlySales
AS
SET NOCOUNT ON
BEGIN

DECLARE @CurrentYear INT
,@CurrentMonth INT
, @AfterEndDate DATETIME
, @StartDate DATETIME

SET @CurrentYear=YEAR(GETDATE())
SET @CurrentMontH=Month(GETDATE())

-- Calculating the first day of the current month
SET @AfterEndDate=DATEFROMPARTS(@CurrentYear,@CurrentMonth,1)

-- Calculating the first day of the last month
SET @StartDate=DATEADD(MM,-1,@AfterEndDate) -- Subtracting one month from AfterEndDate

-- Show sales from the first day of last month through the first day of the current month
SELECT s.SellingDate,s.Customer,s.Product,s.TotalPrice FROM MonthlySale s
where s.SellingDate>[email protected] and s.SellingDate<@AfterEndDate
order by s.SellingDate

END

Tester la procédure stockée

En supposant que la date actuelle est le 06 juillet 2019 , exécutons la procédure stockée sur l'exemple de base de données ITSales pour voir les résultats :

--Test-run the ShowMonthlySales procedure
EXEC ShowMonthlySales

Le résultat est le suivant :

Toutes nos félicitations! Vous avez créé avec succès une procédure stockée qui peut s'exécuter derrière un rapport de ventes mensuel professionnel. Tant qu'elle reste intacte et que les exigences de l'entreprise ne changent pas, la procédure fait le travail tout au long de l'année.

Choses à faire

Maintenant que vous savez écrire des procédures stockées pour les rapports mensuels, essayez les choses suivantes pour améliorer vos compétences :

  1. Créer une procédure stockée de rapport pour afficher les chiffres des ventes quotidiennes en fonction de la date de début et après la date de fin logique abordée dans cet article
  2. En gardant à l'esprit la logique des ventes mensuelles, essayez de créer une procédure de rapport pour les chiffres des ventes annuelles
  3. Créez un rapport SSRS pour afficher les ventes mensuelles basées sur la procédure stockée mentionnée dans cet article en utilisant les articles suivants comme référence :
  • Créer des rapports SSRS axés sur le client avec des paramètres
  • Développement des rapports SSRS en termes simples