Abonnement piloté par les données avec Sharepoint 2013

Dans cet article, mon ambition est de vous faire partager mon retour d’expérience dans la mise en place d’abonnement piloté par les données  via un portail Sharepoint.
A noter que ce processus d’abonnement peut aussi être réalisé sur un serveur RS standalone. Cependant, pour l’exemple nous décrirons les étapes à partir d’un environnement serveur Windows 2012 Server avec le module Sharepoint 2013.

Pré-requis

  • Serveur avec Sharepoint 2013 Enterprise
  • Reporting Services Intégré à Sharepoint
  • Table (SQL) de paramétrage
  • Fonction pour décomposer les paramètres multi-valués
  • Avoir un utilisateur de base de données ayant les droits suffisants pour requêter les bases disponibles
  • Un compte utilisateur avec les droits d’administration du portail Sharepoint
  • Créer une bibliothèque dans le contenu du site Sharepoint qui servira de répertoire cible pour les rapports générés
  • Ne pas utiliser de fonctions systèmes directement en paramètre du dataset d’un rapport
    • Exemple la variable système qui permet de récupérer l’identité de l’utilisateur connecté
    • -> USER !USERID

blog ai3 image2-300x66 Abonnement piloté par les données avec Sharepoint 2013

 

Elle devra au préalable être instanciée et définie directement dans le corps du rapport  en allant dans le menu:

Report > Code Function >

blog ai3 image3 Abonnement piloté par les données avec Sharepoint 2013

 

Si vous avez des rapports déja développés, il vous faudra les modifier à minima.
Prenons l’exemple suivant.
Considérons un rapport dans lequel un paramètre nommé PSelectentite  permet à l’utilisateur de choisir  une Business Unit pour laquelle il souhaiterait afficher les diagrammes et graphiques correspondants .
Dans un premier temps, il faut créer un dataset  se basant sur la requête alimentant les valeurs par défaut du paramètre PSelectEntite (à l’image du dataset nommé DST_ParamEntite ci-dessous) :

blog ai3 image4 Abonnement piloté par les données avec Sharepoint 2013

A ceci près que nous y avons ajouté un select ‘’ surligné en jaune qui permettra de gérer le cas de figure où le rapport s’exécute en tache planifié (abonnement).
Ainsi la valeur de la table de paramétrage qui sera lié au paramètre PSelectEntite sera à vide ‘’.
Une fois ce dataset créé, il sera visible dans la liste des datasets (nommé Param_Abonnements dans le cas présent)

blog ai3 image5 Abonnement piloté par les données avec Sharepoint 2013

Une autre solution serait de modifier le dataset partagé DST_ParamEntite pour y adjoindre la partie surlignée en jaune dans l’exemple ci-desssus plutôt que d’en créer un nouveau.

Ainsi nous définissons le paramètre PSelectEntite comme suit :

Available Values  >

  • Dataset : Param_Abonnements
  • Value Field : VAL_CIBLE
  • Label Fields : VAL_CIBLE

Default Values >

  • Specify value : valeur « »

blog ai3 image9 Abonnement piloté par les données avec Sharepoint 2013

Le deuxième paramètre essentiel au bon déroulement de l’exécution de l’abonnement est le paramètre Pentite.

A noter qu’il ne doit pas être multi-valué et demeure caché :

blog ai3 image7 Abonnement piloté par les données avec Sharepoint 2013

Ce paramètre est un paramètre dit « en cascade » car il s’alimente du paramètre précédent PSelectEntite.
En effet, Afin de  contourner le problème de valeurs multiples, nous utilisons la fonction vba Join() :

blog ai3 image8 Abonnement piloté par les données avec Sharepoint 2013

 

Il est à noter que la catégorie valeurs disponibles (available values)  pour ce paramètre est  définie à « None » :

blog ai3 image9 Abonnement piloté par les données avec Sharepoint 2013

La dernière étape consiste en la modification de tous les datasets faisant appel au paramètre Pentite :

Dans notre exemple les datasets concernés sont les suivants DST_Details et DST_Graph_Synthese.
Nous faisons appel à une fonction fn_ParseText2Table qui permettra de décomposer le paramètre Pentite.

blog ai3 image10 Abonnement piloté par les données avec Sharepoint 2013

Objectifs

Une fois les pré-requis validés et implémentés, nous allons nous attaquer à la création de l’abonnement.
Ceci en plusieurs étapes :

  • Gérer l’aspect pilotage par les données dans une table de paramétrage
  • Créer un abonnement sur un rapport
  • Planifier l’envoi du rapport
  • Intégration et utilisation du portail Sharepoint avec reporting Services pour exécuter et planifier à intervalle régulier l’envoi du document dans une Bibliothèque Sharepoint

 

Gestion des sources de données

Dans le panneau de gauche du portail sharepoint, Cliquer sur le menu Connexions afin de définir la manière dont les rapports accèdent aux sources de données :

blog ai3 image111 Abonnement piloté par les données avec Sharepoint 2013

Il est important de préciser que Microsoft préconise l’utilisation d’informations stockées comme défini ci-après :

blog ai3 image12-1024x738 Abonnement piloté par les données avec Sharepoint 2013

  • Paramétrage des données

Créer une table de paramétrage avec les champs suivants, le nom de la planification, le nom du rapport, le libellé et la valeur du paramètre, le format de sortie et l’id de l’utilisateur connecté.

Pour un rapport X, il faut  insérer autant de lignes qu’il y a de paramètres visibles demandant une saisie de l’utilisateur dans  la table de paramétrage nommé pour l’exexmple dbo.T_PLANIFICATION dans l’exemple ci-dessous :

blog ai3 image131 Abonnement piloté par les données avec Sharepoint 2013

Par exemple le rapport Dette Nette – Details possède trois paramètres :

  • Périmètre
  • Entités
  • Date des données

Ces informations seront pivotés dans la requête qui sera exécutée lors de l’abonnement au rapport afin d’obtenir une ligne unique pour un abonnement ( Sans quoi l’outil de création d’abonnement Sharepoint créera autant de document pdf en sortie qu’il y a de ligne dans la table – Attention donc à bien restreindre les données lors de la définition de l’abonnement) :

select

NOM_PLANIF ,NOM_RAPPORT,CIBLE,FORMAT_SORTIE,USERID,[DATEDONNEES] AS  DATEDONNEES,[ENTITES] AS ENTITES,

 »  as IDSEL,

[PERIMETRE] AS PERIMETRE

into #PLANIF

from

(

select

NOM_PLANIF ,

NOM_RAPPORT,

CIBLE,

FORMAT_SORTIE,

USERID,

LIB_PARAM,

VALEUR_PARAM

from dbo.T_PLANIFICATION
)ps

pivot

(

MAX(VALEUR_PARAM)

FOR LIB_PARAM IN

(

[DATEDONNEES],[ENTITES],[PERIMETRE]

)

)as pvt

select *,   NOM_RAPPORT+’ ‘+Cast((SELECT convert(DATE,

CASE DATEDONNEES

WHEN ‘VEILLE’ THEN convert(date,convert(varchar,getdate()-1,103),103)

WHEN ‘JOUR’ THEN convert(date,convert(varchar,getdate(),103),103)

WHEN ’31/M’ THEN DATEADD(d,-1,DATEADD(m, DATEDIFF(m,0, GETDATE() )+1,0) )

WHEN ’31/M-1′ THEN convert(date,convert(varchar,dateadd(dd,  -day(getdate()), getdate()),103),103)

WHEN ’31/M-1 Ouvré’ THEN (CASE WHEN datename(weekday, (convert(DATETIME, convert(VARCHAR, dateadd(dd, – day(getdate()), getdate()), 103), 103))) = ‘Sunday’ THEN convert(DATETIME, convert(VARCHAR, (convert(DATETIME, convert(VARCHAR, dateadd(dd, – day(getdate()), getdate()), 103), 103)) – 2, 103), 103) ELSE CASE WHEN datename(weekday, (convert(DATETIME, convert(VARCHAR, dateadd(dd, – day(getdate()), getdate()), 103), 103))) = ‘Saturday’ THEN convert(DATETIME, convert(VARCHAR, (convert(DATETIME, convert(VARCHAR, dateadd(dd, – day(getdate()), getdate()), 103), 103)) – 1, 103), 103) ELSE (convert(DATETIME, convert(VARCHAR, dateadd(dd, – day(getdate()), getdate()), 103), 103)) END END)

ELSE convert(date,DATEDONNEES,103)

END

,102) ) as nvarchar(50)) as  NomFichierGénéré

 

from #PLANIF

where NOM_RAPPORT=’Dette Nette – Details’
drop table #PLANIF

 

 

Ci-dessous un aperçu des valeurs obtenues dans la table de paramétrage après application du pivot :

blog ai3 image141 Abonnement piloté par les données avec Sharepoint 2013

NB : Le champ cible fait référence au lieu de dépôt des rapports générés (Bibliothèque sharepoint).
Il est à noter que les dossiers présents dans la bibliothèque doivent éviter de contenir des caractères spéciaux tels que les accents graves ou aigus.

blog ai3 image15 Abonnement piloté par les données avec Sharepoint 2013

Cette fonction sera utilisée dans les datasets faisant appel au paramètre Pentite.

  • Définition de l’abonnement

Un abonnement se construit en plusieurs étapes.
Tout d’abord en cliquant sur le rapport pour lequel l’abonnement est souhaité.
Dans la partie Gérer > Gérer les abonnements, cliquer sur Créer un nouvel abonnement piloté par les données.
Une nouvelle page apparait nous permettant d’établir les premiers éléments de connexions :

blog ai3 image16 Abonnement piloté par les données avec Sharepoint 2013

La deuxième étape nous permet de créer la requête SQL d’abonnement (voir script) :

blog ai3 image17 Abonnement piloté par les données avec Sharepoint 2013

Cliquer sur le bouton valider, un message apparait pour  vous avertir de sa bonne exécution

blog ai3 image18 Abonnement piloté par les données avec Sharepoint 2013

L’une des étapes les plus importantes est la suivante concernant le mapping des paramètres associés aux colonnes de la requête qui vient d’être généré :

blog ai3 image19 Abonnement piloté par les données avec Sharepoint 2013

En résumé le Mapping des paramètres devra prendre la forme suivante :

Nom du paramètre Colonne associée dans la table de paramétrage
UserId USERID
PEntiteSecu Valeur par défaut du paramètre
Périmètre PERIMETRE
Entités IDSEL
Entités Validées ENTITES
Date de Données DATEDONNEES

 

 

Une fois la première partie effectuée nous accédons à une deuxième page qui permettra de spécifier le Chemin de dépôt du fichier généré, le format de sortie ainsi que son nom: (Tous les trois mappés consécutivement aux valeurs de la table de paramétrage : NomFichierGénéré, CIBLE et FORMAT de sortie. (Laisser par défaut les autres options )

blog ai3 image20 Abonnement piloté par les données avec Sharepoint 2013

Il est possible de créer plusieurs planifications et les associer aux abonnements créés pour chacun des rapports.
Dans notre exemple la planification partagé porte le nom de PlanifPartagéHebdoTest :

blog ai3 image21 Abonnement piloté par les données avec Sharepoint 2013

 

La partie planification se définit dans la partie paramètre du site >  Gérer les planifications partagées

blog ai3 image22 Abonnement piloté par les données avec Sharepoint 2013

Plusieurs options s’offrent à nous, dont la fréquence d’émission, les jours, la répétition, la date de début et de fin d’exécution :

blog ai3 image23-1024x650 Abonnement piloté par les données avec Sharepoint 2013

Une fois la planification validée, elle apparait sous la forme suivante :

blog ai3 image24 Abonnement piloté par les données avec Sharepoint 2013

En conclusion de cet article, nous pouvons affirmer que la mise en place de l’abonnement piloté par les données comporte pas mal d’avantages pour le client mais pourrait à l’avenir  intégrer un véritable suivi précis des documents envoyés. Ce qui permettrait en cas d’échec d’avoir un monitoring et feedback précis des rapports en erreur.
D’autant plus que le déclenchement d’un abonnement ne peut se faire que sur un planning horaire .
Quid d’un déclenchement via une ligne de commande ou un évènement (par exemple la fin d’une autre tâche)?
Nous pouvons ajouter comme contrainte le fait que les versions Enterprise de Reporting Services set Sharepoint soient nécessaires à son implémentation.

 

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.