Microsoft SSRS : Erreur division par zéro

Microsoft SSRS rencontre des difficultés  devant une expression pouvant entraîner une erreur de division par zéro.

Si vous avez déjà essayé d’utiliser une expression d’instruction IIF pour corriger une erreur reçue en divisant par zéro, vous avez probablement reçu le message d’erreur de division par zéro.

 

Une expression comme celle-ci : sum(Fields!Champ1.Value) / sum(Fields!Champ2.Value)   renvoie une erreur lorsque sum(Fields!Champ2.Value)=0

 

Pour résoudre cette erreur, vous essayez d’ajouter une condition sur sum(Fields!Champ2.Value) en utilisant cette expression:

= iif (sum(Fields!Champ2.Value)) = 0, 0, sum(Fields!Champ1.Value)/sum(Fields!Champ2.Value))

 

Hélas, cela ne fonctionnera pas. Vous avez toujours une erreur, comme le montre l’image ci-dessous :

blog ai3 erreur_division_par_0-300x136 Microsoft SSRS : Erreur division par zéro

 

Même si Microsoft SSRS peut évaluer votre expression comme étant vraie, il tentera toujours de résoudre la partie fausse de votre expression, ce qui vous donne l’erreur de division par zéro.

 

Pour contourner ce problème de Microsoft SSRS, essayez ceci :

 

1ère solution :

= iif (sum(Fields!Champ2.Value) = 0,0, (sum(Fields!Champ1.Value)) / iif (sum(Fields!Champ2.Value) = 0,1, sum(Fields!Champ2.Value))

 

Cette solution devrait résoudre les problèmes de division par zéro.

 

Si vous rencontrer toujours des problèmes, utiliser cette

 

2e solution :

  • Ajouter une fonction de code personnalisé pour la division dans le rapport SSRS :

Ouvrez votre rapport SSRS, faites un clic droit dans la zone en dehors du rapport.

 

blog ai3 SSRS_insertion_code_perso-300x190 Microsoft SSRS : Erreur division par zéro

(Vous devez avoir ceci)

blog ai3 SSRS_insertion_code_perso2 Microsoft SSRS : Erreur division par zéro

Cliquer sur Propriétés du rapport,

blog ai3 SSRS_insertion_code_perso3 Microsoft SSRS : Erreur division par zéro

Cliquer sur l’onglet « Code » :

blog ai3 SSRS_insertion_code_perso4 Microsoft SSRS : Erreur division par zéro

Dans la zone de texte « Code personnalisé », tapez ceci :

 

Public Function Divide(ByVal first As Double, ByVal second As Double) As Double

If second=0 Then

Return 0

Else

Return first/second

End If

End Function

 

Cliquer sur le bouton « OK »

Ensuite, allez sur votre rapport.

Dans votre expression de division, tapez :

=iif (IsNothing (sum (Fields! Champ2.Value)), 0, Code.Divide(sum (Fields! Champ1.Value), sum (Fields! Champ2.Value)))

blog ai3 SSRS_insertion_code_perso5-300x141 Microsoft SSRS : Erreur division par zéro

Et, cliquer sur OK. 

? Plus de souci avec les problèmes de

Créer une carte Power BI personnalisée

Comment créer et utiliser une carte personnalisée avec Power BI?

Autrement dit comment créer vos propres cartes, formes dans Power BI avec Synoptic Panel.

Synoptic Panel est un outil de visualisation qu’on peut intégrer dans Power BI et qui permet de connecter des zones dans une image personnalisée avec des attributs dans le modèle de données.

Vous pouvez remplir et colorer ces zones dynamiquement et afficher plusieurs informations dessus.

Les démarches à suivre pour réaliser ce type de carte,

Exemple sera pris sur la carte de France (suivre les mêmes étapes pour les cartes des autres pays).

Commencez par démarrer Microsoft Power BI.

Dans la liste des « visualisations » à droite, cliquez sur les trois petits points pour « importer à partir de la salle de marché » le visuel :

blog ai3 PBI_1-300x156 Créer une carte Power BI personnalisée

 

Dans la zone de recherche, tapez « Synoptic »  et valider avec la touche « Entréeé ».  Une fois la visualisation trouvée, cliquer sur « Ajouter ».

blog ai3 PBI_2-300x129 Créer une carte Power BI personnalisée  

 

blog ai3 PBI_3 Créer une carte Power BI personnalisée

 

  1. Transformer l’image en fichier.SVG

Vous avez besoin d’une image de carte sous format (jpg/png ou svg), (aller sur internet et télécharger une image de carte dans un de ces formats)

blog ai3 PBI_4-280x300 Créer une carte Power BI personnalisée

 

Ensuite, vous devez importer la carte dans l’outil gratuit Synoptic Designer (https://synoptic.design) afin de transformer l’image en fichier SVG.

 

blog ai3 PBI_5-300x139 Créer une carte Power BI personnalisée

 

Une fois que l’image apparait, vous pouvez cliquer sur chaque forme au sein du fichier pour définir de nouveaux points de zone avec un attribut ID, la forme prendra un numéro qui s’incrémentera au fur et à mesure que vous cliquerez sur les formes.

Si la carte n’est pas trop complexe, vous pouvez utiliser l’outil « baguette magique » (c’est rapide) , en cliquant sur n’importe quel point d’une zone fermée que vous souhaitez colorer et obtenir ainsi la définition complète de la zone elle-même.

 

blog ai3 PBI_6-300x169 Créer une carte Power BI personnalisée

 

Cliquez sur « Export to Power BI » puis téléchargez le fichier .svg :

 

blog ai3 PBI_7-300x172 Créer une carte Power BI personnalisée

 

  1. Importer votre carte dans Power BI

Maintenant que la carte est prête, dans Power BI vous insérez la visualisation « Synoptic Panel » dans votre tableau de bord.

 

blog ai3 PBI_8-300x168 Créer une carte Power BI personnalisée

 

Avant d’importer le fichier. svg, essayez de mapper une source de données avec le composant Synoptic.

Pour ce faire, cliquer sur « Local maps », sélectionnez la carte .svg générée par Synoptic Designer à partir de votre ordinateur local, comme indiqué dans les images suivantes :

 

blog ai3 PBI_9-300x238 Créer une carte Power BI personnalisée

blog ai3 PBI_10-300x221 Créer une carte Power BI personnalisée

blog ai3 PBI_11-300x297 Créer une carte Power BI personnalisée

 

Vous pourrez changer les différents paramètres pour changer les couleurs des zones, les valeurs et les libellés à afficher …

Synoptic Panel répond à la sélection de données comme n’importe quel autre composant Power BI. Vous pouvez glisser des mesures et commencer à voir comment la carte interagit avec les différents filtres.

 

Envoyer un rapport SSRS au format MHTML, en tant que corps de mail

On peut avoir besoin d’envoyer un rapport Sql Server Reporting Services (SSRS) dans un mail. En général pour cela, on génère un fichier au format choisi (PDF, Excel, Word…), qui est ajouté en pièce jointe au mail. Ceci dit on peut aussi avoir besoin d’envoyer ce rapport en tant que corps du mail, en utilisant un export au format html. A première vue ça a l’air assez basique, mais la solution technique ne l’est pas tant que ça, et on peut trouver des bouts de solutions, mais jamais la solution complète. Elle existe pourtant, et je vais la détailler.

Mais d’abord un petit rappel sur la manière dont on génère un rapport dans du code, cette génération se fait en utilisant le web service « ReportExecution2005.asmx » présent sur le serveur de rapports. Voici un exemple de code C# :

Le paramètre « format » correspond au format d’export (ici PDF), à choisir parmi les formats disponibles. Il ne reste plus qu’à écrire le contenu de la valeur de retour « results » dans un fichier avec la bonne extension, et c’est bon.

Maintenant pour générer un email avec un rapport en tant que corps de mail, le but va être de faire un rendu du rapport au format html, pour intégrer ce rendu en tant que corps d’un mail.

Reporting services supporte 2 types de format html, qui sont « HTML4.0 » et « MHTML ». Le premier format nous donne un code html compréhensible et utilisable, mais si le rapport contient des images, elles sont fournies comme des liens vers le serveur de rapport, ce qui n’est pas acceptable, les images doivent être intégrées dans l’email. On va donc se diriger vers le format « MHTML », qui contient toutes les données et est normalement adapté à ce genre d’usage.

Ceci dit en essayant de générer un rapport en MHTML, on se rend compte que le contenu est encodé en base64, et s’il peut être ouvert dans un navigateur, ce contenu n’est pas reconnu par les clients email et il ne peut donc pas être envoyé tel quel.

On peut essayer de décoder ce contenu (c’est assez complexe), mais il existe une solution beaucoup plus simple si on s’intéresse au paramètre « deviceInfo » de la fonction de rendu du web service SSRS. Ce paramètre, souvent passé à null pour avoir des valeurs par défaut, est en fait un descriptif au format XML, permettant de positionner certaines valeurs pour le rendu. Parmi ces valeurs, il y a l’attribut « MHTMLFragment » qui permet de déterminer si on doit générer le html avec les tags html et body, ou s’il est intégré dans un tag table, et surtout l’attribut « OutlookCompat » qui a l’air intéressant dans le cadre d’une utilisation pour un email.

On peut donc essayer de générer le rapport au format MHTML, en utilisant la valeur de deviceInfo :

<DeviceInfo><OutlookCompat>True</OutlookCompat><MHTMLFragment>True</MHTMLFragment></DeviceInfo>

En regardant le résultat, on voit enfin du html utilisable, mais les images ne sont pas présentes. Ceci dit les références à ces images dans le html sont sous la forme « cid:a64b27da3c7a464d9102053b5fa7e8d1 », qui ressemble bien à ce qu’on trouve dans un email html, on approche. Reste à trouver à quoi correspond cette valeur, et où trouver l’image en question. La piste se trouve en regardant le contenu de la variable de sortie streamIDs, récupérée dans la fonction de rendu du rapport. Cette variable contient en fait la liste des codes correspondant aux liens vers les images du rapport, bingo ! il reste ensuite à récupérer le contenu de ces images à partir de ces streamIDs, pour pouvoir les intégrer au mail. Ceci se fait grâce à une autre fonction du web service de SSRS : « RenderStream ».

On a donc le html, les images et la liaison entre les deux grâce à ces ID, il ne reste plus qu’à construire un mail avec toutes ces données ! Si on utilise la classe « MailMessage » du Framework .NET, il va nous falloir passer par un objet de type « AlternateView », qui permet de définir des ressources liées au mail telles les images insérées. Voici donc un exemple de code final en C# qui permet de générer un tel mail :

Il faut juste rajouter certaines données à l’email (expéditeur, destinataire, sujet…), et il est prêt à être envoyé !

La procédure n’est pas très compliquée, mais reste mal documentée, j’espère que ce petit article sera utile.

Analyse croisée des ETL SAS Data Integration Studio et Microsoft SSIS

Comme à mon habitude à la fin de chaque mission j’essaie de faire un état des lieux de mes connaissances et prendre un peu de recul sur les sujets traités.
Aujourd’hui ma réflexion prendra dans cet article la forme d’une étude comparative à l’usage pour un développeur ( il ne s’agit pas de faire un test de performance ici).

Ceci afin de vous permettre de faire le parallèle en mettant en évidence les avantages, les similitudes et les inconvénients de deux des références phares du marché de l’intégration des données SAS studio et Integration Services de Microsoft sur laquelle nous sommes spécialisés chez AI3.

Avant toute migration d’un outil à l’autre, et pour l’avoir expérimenté  dans une moindre mesure lors d’une mission précédente ( notamment dans le cadre d’une migration de rapports  de masse développés initialement avec DESKI de  Business Object vers Reporting Services) il est nécessaire de se poser des questions essentielles à la bonne marche du projet :

  • Faire l’inventaire des composants à disposition les plus utilisées.
  • Avoir des spécifications fonctionnelles à jour.
  • Réaliser un modèle conceptuel des données
  • Savoir si le procédé de développement est réutilisable et reproductible dans l’outil cible.
  • Bien comprendre fonctionnellement le sujet à traiter afin de ne pas se focaliser sur un procédé unique de développement.
  • Adopter une démarche globale en se gardant de vouloir reproduire à l’identique l’intégralité des développements ( parfois il est par exemple nécessaire de passer par du code SQL avec Microsoft pour développer certaines phases qui existent via un composant natif sous SAS) et ainsi éviter d’alourdir les traitements avec des composants bloquants ou semi bloquants connus tels que le SORT, UNION ALL ou le MERGE JOIN qui existent sous SAS ( Sort, Append et LOOKUP mais ne produise pas les mêmes effets).
  • Eviter autant que possible l’emploi des colonnes de type nvarchar(max) souvent proposées par SSIS lors de la création de la table de destination dans le cas où vous utilisez du XML PATH pour faire de la concaténation de valeur sur une clef
  • Connaitre la profondeur des données, la fréquence et les méthodes de chargement (Incrémental, Full)
  • Identifier  les traitements gourmands et chronophages dans l’optique de les assainir en proposant une solution plus rapide.
  • Se renseigner sur les sources de données à intégrer( Type de base de données : Oracle , SQL, MySQL, AS400 ou fichiers plats, excel, csv) afin de savoir au préalable si les connecteurs existent.
  • Séparer et distinguer, pour des questions de maintenabilité et de clarté, les phases d’extraction , de transformation et de chargement des données (1 projet pour chaque phase et par sujet fonctionnel).

(suite…)

MongoDB avec C#

A-propos de l’article

On constate un intérêt grandissant pour l’utilisation de couches de données noSQL. L’article ici présente l’utilisation d’un des systèmes les plus connus du marché MongoDB et notamment la version 3.

Présentation de MongoDB

Qu’est-ce que MongoDB?

MongoDB est une base de données orientée document sponsorisée par 10gen. Elle est utilisée notamment chez Foursquare, SourceForge et Bit.ly.
Mongo stocke les documents au format BSON (JSON binaire supportant un peu plus de types de valeur) et fournit un shell javascript pour accéder aux données et faire les opérations d’administration. De nombreux drivers sont implémentés notamment pour Java, .Net, PHP, Javascript
La notion de base orientée document signifie que les objets stockés sont représentés sous la forme d’un document BSON (pas seulement une map de style clef/valeur) permettant facilement de se mapper sur les objets que l’on manipule dans nos programmes. On pourrait le comparer à un stockage d’une représentation XML d’une grappe d’objets.

Schemaless : Comparaison entre NoSQL MongoDb et les bases relationnelles classiques

Lorsqu’on développe une couche d’accès aux données, nous allons souvent devoir soit utiliser un ORM, soit utiliser un mapper qu’on aura développé nous-même, mais les deux feront le même travail à savoir la transformation et le mapping d’objet en relation.
De plus comme les bases de données classiques relationnelle ne permettent pas le stockage des données complexes (entité avec des tableaux, imbrication, collection), nous devons effectuer différentes requêtes SQL pour obtenir nos données ou les mettre à jour.
En vue de ces 2 points, le développement d’une couche d’accès aux données beaucoup de travail. Ces jours que nous perdons à implémenter une réponse technique et non fonctionnelle, nous pourrions les affecter au développement métier et ainsi satisfaire d’avantage notre client. 
Pour cela une seule solution, stocker les objets .NET telle qu’ils sont et demander à notre moteur de persistance de gérer pour nous ce travail.
Un rêve que MongoDB et les bases de données NoSQL permettent de tenir. C’est ce qu’on appelle le schemaless.

Qu’apporte Le sharding avec MongoDB ?

MongoDB depuis sa version 1.2 intègre une gestion de sharding. L’application de cette gestion permet d’avoir une scalabilité plus importante. Nos données sont toutes cohérentes, car on accède toujours à tout. Le concept du sharding n’est pas d’avoir plusieurs bases de données en master/master, mais une seule base de donnée qui répartie ses propres données dans les différentes instances. On se retrouve ainsi à posséder certaines données sur une instance et les autres sur une autre. Cet aspect n’est pas détaillé dans cet article.

Qu’apporte le GridFS ?

MongoDB embarque avec lui un système de fichiers complet. Ce système est GridFS. MongoDB est limité par document à 4Mo, mais on a vite besoin de stocker des documents plus importants. GridFS permet ça. On stocke donc tout document supérieur à 4 Mo sur le système de fichier GridFS. GridFS permet ainsi d’avoir le sharding sur ses fichiers. On a donc besoin de rsync entre plusieurs machines. GridFS fait le boulot pour soi. On pourrait facilement rapprocher GridFS à Hbase.

Un système de requêtes évolué

Enfin le vrai intérêt de MongoDB selon moi, surtout par rapport à Riak ou CouchDB, c’est sa gestion de requêtage. On peut requêter de façon très fine grâce à une grande quantité de mots-clé. On peut donc faire des requêtes aussi riches qu’en SQL, mais tout ça sur une base de données orientée Documents.
On peut par exemple chercher tous les documents qui possèdent plusieurs éléments dans un tableau
db.things.find( { a: { $all: [ 2, 3 ] } } );
Alors qu’en SQL on aurait plus fait un
select * from things where a LIKE ‘%2%’ AND a LIKE ‘%3%’ 
Mais cette dernière est finalement incomplète car ça marchera pour un champ « A » contenant un array [32] en SQL mais ne fonctionnera pas dans le cas de la requête MongoDB.
On peut aussi faire de la recherche en donnant une fonction Javascript
db.myCollection.find( { $where: « this.a > 3 » } );
C’est très modulaire et le nombre de mot clé ne cesse d’augmenter.

Prise en main sous .NET 4.5

Il existe de nombreux utilitaire, librairie pour communiquer avec MongodB, je vous conseille de rester au standard et d’utiliser le driver fournit par le projet MongoDB même.

Nous utiliserons le mécanisme classique des autres DAL. A savoir 
La connectionstring dans le web.config pour définir le serveur

Installation de MongoDB sur votre machine (instance unique)

  1. Avant de pouvoir commencer l’installation, il faut télécharger la dernière version de MongoDB. Pour ce faire, aller à l’adresse suivante : http://www.mongodb.org/downloads et choisissez le type d’installation que vous désirez.
  2. Pour lancer l’installation, il vous suffit de double-cliquer sur le paquet msi et de suivre les instructions affichées à l’écran
  3. Créez le dossier qui contiendra vos bases de données c:\data\db et un dossier log c:\data\log
  4. Créez un fichier de paramétrage vous permettant de configurer mongodb : mongod.conf
  5. Vous pouvez démarrer mongod en utilisant le programme mongod.exe se trouvant dans le dossier bin : mongod –config mongod.conf
  6. Vous pouvez également configurer mongod pour l’utiliser comme un service : mongod –config mongod.conf –install
  7. Configurez le mode de démarrage de mongod en automatique ou en manuelle : sc config mongod start=auto

Hébergement d’une base MongoDB avec réplication sur Windows Azure

Windows Azure ne supporte plus nativement MongoDb, vous disposez des services SAAS exemple mongolab, mais cela est payant, pour vous permettre de prendre en charge un cluster MongoDB gratuitement, vous devez créer 2 VM de base

    1. Créez une VM nommez la <votresociete>mgdb1
    2. Créez une autre VM nommez la <votresociete>mgdb2
    3. Associez un disque à chacune de vos VM de 30 Gb et associez la lettre f:

Répetez l’opération suivante sur chaque VM

      1. Connectez-vous sur votre première machine
      2. Formatez votre disque data
      3. Désactivez le contrôle IE.
      4. Ajoutez le site http://*.mongodb.org à la liste des sites de confiance
      5. Téléchargez la version 64bits
      6. Installez le msi
      7. MongoDb par défaut est installé dans le dossier C:\Program Files\MongoDB\Server\3.2\bin, créez une variable d’environnement Path pointant vers ce dossier
      8. Téléchargez OpenSSL et installez le, cela vous permettra de créer un certificat pour votre replication : https://slproweb.com/download/Win64OpenSSL_Light-1_0_2f.exe
      9. Créez 2 dossiers sur votre lecteur f : data et log
      10. Créez 1 dossier conf
      11. Ajoutez un fichier mongod.conf
      12. Ajoutez les paramètres nécessaires :
        • Port : numéro du port sur le quel écouté par défaut 27017
        • Dbpath : chemin d’accès aux données
        • replSet=rs0 : indique qu’on va utiliser une réplication
        • logpath : indique le chemin d’accès au fichier de log
        • logaappend indique la rotation
      13. si le nœud n’est pas le premier, créez le dossier keys et copiez le fichier mongodb-keyfiles du premier nœud.
      14. Installez mongodb en service mongod –config f:\conf\mongod.conf –install
      15. Démarrez le service mongdb net start mongodb
      16. Si c’est le premier nœud, Connectez-vous au serveur mongo et démarrez la réplication rs.initiate()
      17. Ouvrez un port au niveau du firewall pour pouvoir vous connecter au service MongoDB
      18. Configurez un endpoint au niveau de Windows azure pour la machine virtuelle sur le port TCP 27017
      19. Si c’est le premier nœud, Créez les utilisateurs administratifs sur le master
      20. Arrêtez l’instance de mongodb
      21. Créez sur le premier nœud uniquement un fichier clé pour être utilisé par chaque membre d’une réplication
        • Je vous conseille d’utiliser openssl mais vous pouvez utiliser d’autre mécanisme.
        • Copiez le fichier key généré sur chaque membre
        • Modifiez le fichier de configuration pour spécifier le fichier de clé à utiliser. keyFile
        • Refaire l’opération sur le premier serveur

Ajoutez un nœud à une réplication

      1. Depuis la machine host du nouveau nœud,
      2. Connectez-vous au nœud premier mongo -u siteRootAdmin –p –authenticationDatabase admin
      3. Utilisez la méthode rs.add(« nomdelamachine :27017 ») pour ajouter le nœud

Vérifiez la configuration d’une réplication.

      1. Depuis n’importe quel host
      2. Connectez-vous au premier nœud mongo -u siteRootAdmin –p –authenticationDatabase admin
      3. Utilisez la méthode rs.conf()

Développement de la couche d’accès aux données sous Visual Studio 2015

    1. Reprenez les librairies créées précédemment dans nos article 1 et 2,
    2. Dans le projet STPVideoPlayer.DataLayer, ajoutez les classes suivantes
      • EpisodeModel: pour décrire un épisode
      • LocalVideoModel : Pour décrire un fichier vidéo local
      • YoutubeModel : Pour décrire une vidéo ou une playlist hébergée sur youtube
      • TimeLineModel : Pour décrire une planification
    3. Installez le driver MongoDB depuis nuget au projet STPVideoPlayer.Data.MongoProvider
    4. Créez une classe TvPlayerRepository
    5. Implémentez le code nécessaire à notre fournisseur en implémentant l’interface ITvPlayerRepository

Explications et cas d’usage du composant Cache Transform avec SSIS

Cet article a pour but de vous préconiser une solution de contournement dans le cadre de vos développements avec SSIS  où vous faites face à de contraintes de performances altérées par l’utilisation massive de lookups en full cache gourmands en ressource mémoire. Ainsi si vous êtes dans un des cas de figures suivants:

Initialement, lorsque vous avez affaire à ce genre de contraintes, la modification des propriétés suivantes du Data Flow Task,

  • Default Buffer Size
  •  DefaultBufferMaxRows

peut être une des pistes de résolution du problème.
Cependant, il est préférable d’imaginer une architecture différente pour votre package afin d’améliorer la performance.
En résumé, l’utilisation à outrance de lookups en full cache avec une connexion de type  OLE DB connections manager (choix par défaut) est à proscrire pour les raisons précitées :

blog ai3 Cache10 Explications et cas d'usage du composant Cache Transform avec SSIS
La solution palliative à ce problème est l’utilisation des lookups avec une connexion de type  Cache connection manager :

blog ai3 Cache9 Explications et cas d'usage du composant Cache Transform avec SSIS

Ce type de connexion induit l’utilisation en amont d’un nouveau composant appelé le Cache Transform:

blog ai3 Cache11 Explications et cas d'usage du composant Cache Transform avec SSIS

Avant de vous initier à l’utilisation du composant Cache Transform, il est à noter que les colonnes au format Binary Large Object (BLOB) data types DT_TEXT, DT_NTEXT, and DT_IMAGE ne sont pas supportées, ainsi si votre requête en possède, pensez bien à les convertir en un type supporté par le composant.

Ce composant  peut se définir comme un outil de stockage en mémoire tampon. Il s’avère utile pour dé-sérialiser l’enchaînement des composants lookups et permettre ainsi le chargement des données via une phase de pré chargement parallélisée (Step 1 dans l’exemple suivant)   :

blog ai3 Cache12 Explications et cas d'usage du composant Cache Transform avec SSIS

Double cliquer sur le data flow qui va vous permettre de charger les tables de référence.

  1. Faire un Drag and Drop du composant Cache Transform depuis la boite à outil SSIS
  2. Raccorder le à votre requête source (Type OLE DB Source)
  3. Double cliquer sur le composant Cache Transform
  4. Ajouter une nouveau gestionnaire de connexions (Connexion Managers) qui apparaîtra dans l’onglet éponyme ci-dessous (A noter qu’il faut autant de connexion qu’il y a de lookups à effectuer

blog ai3 Cache13-1024x365 Explications et cas d'usage du composant Cache Transform avec SSIS

 

  • Cliquer sur le bouton New afin de lancer l’assistant de création de la nouvelle connexion:

blog ai3 Cache14 Explications et cas d'usage du composant Cache Transform avec SSIS

 

  •  Dans l’onglet Général, donner un nom à votre connexion :

blog ai3 Cache2 Explications et cas d'usage du composant Cache Transform avec SSIS

 

Ensuite cliquer sur l’onglet Columns , vous obtenez dans la fenêtre suivante la liste des colonnes de référence disponibles :

blog ai3 Cache3-e1455116009694 Explications et cas d'usage du composant Cache Transform avec SSIS

Le point important à cet instant est de repérer l’ensemble des champs nécessaires à la jointure avec la table source.

Par exemple si vous avez , trois clefs de jointure nommées : « ID1 » , « ID2″,  » ID3″ et « ID4 », la propriété Index Position devra être incrémentée  de 1 à 4 pour les quatre colonnes concernées. Les autres éléments restant à zéro.

Une fois les modifications validées, aller dans le composant lookup et procéder comme suit :

  • Choisir le mode Cache Connection Manager dans l’onglet Général

blog ai3 Cache9-e1455105581998 Explications et cas d'usage du composant Cache Transform avec SSIS

 

  • Ensuite, dans l’onglet Connection, Sélectionner le gestionnaire de connexion précédemment créé :

 

blog ai3 Cache6 Explications et cas d'usage du composant Cache Transform avec SSIS

  • Assurer vous que les clefs de jointures soient correctes dans l’onglet Columns

blog ai3 Cache7 Explications et cas d'usage du composant Cache Transform avec SSIS

Et pour finir, valider la modification du Lookup.
L’implémentation du composant Cache Transform est maintenant terminée, vous pouvez lancer votre package sans encombre.
En espérant que cet article vous apporte un peu plus de clarté et de compréhension sur le sujet.
Thank you for reading, Feel free to answer and Comment if you have any questions on this topic.

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.

 

Comment créer un rapport avec Datazen

1- Introduction :

Cette article explique comment créer une source de données et un rapport avec Datazen.

1.1- Objectif

  • Créer une source  de données .
  • Créer une vue
  • Publier son premier tableau de bord.

2-Créer une source de données:

Nous allons d’abord accéder au Panneau de configuration Datazen avec l’URL de notre installation Datazen et login. Notez que Datazen prend en charge plusieurs types de comptes d’administrateur, «Hub» et «global». Vous aurez besoin d’un de ces types de comptes pour exécuter les tâches liées à la création de la source de données et visualisation des données.

Dans Datazen un «Hub» est juste une façon d’organiser logiquement les éléments au sein de l’instance globale de serveur Datazen. Il vous permet de séparer les tableaux de bord, indicateurs de performance, et les utilisateurs, pour un meilleur contrôle de sécurité et de facilité d’utilisation par les utilisateurs finaux.

  • Renseignez le « username » et « password » et cliquez sur le bouton « log in »

blog ai3 datazen-300x154 Comment créer un rapport avec Datazen

 

  • Une fois connecté, on nous présente les différentes options pour maintenir le serveur.
  • Notre premier ordre du jour est de sélectionner l’option « Sources de données » afin que nous puissions créer une source de données. Ceci est juste une connexion une base de données.

blog ai3 Datazen_2-300x136 Comment créer un rapport avec Datazen

 

  • En cliquant sur le bouton « New Data Connection», on se retrouve avec une  définition semble probable assez familier si vous êtes habitué à utiliser d’autres outils de base de données. Nous sélectionnons simplement le type de notre source de données, et entrez un nom pour l’identification de la source de données, puis saisissez la chaîne de connexion.

blog ai3 DataZen_3-300x137 Comment créer un rapport avec Datazen

 

  • En cliquant sur « Next » nous amène à l’écran où l’on peut définir la sécurité de la connexion définie.

Datazen soutient la définition de sécurité à plusieurs niveaux et pour plusieurs de ses objets. Je ne vais pas rentrer dans une discussion détaillée de la sécurité Datazen.

Cependant, comprendre que les tableaux de bord, KPI, connexions, etc. peuvent tous être sécurisées par des utilisateurs individuels ou des groupes.

Nous pouvons utiliser le bouton «Test  connexion» pour vérifier que la connexion est correctement configuré.

  • Cliquez sur « Finish » nous ramène à la page Connexions de données et notre connexion nouvellement créé est affiché.

blog ai3 DataZen_4-300x136 Comment créer un rapport avec Datazen

 

3-Créer une vue:

  • Cliquez sur l’onglet « Data Source ».
  • Cliquez sur la connexion « AdevntureWorksDW » .

blog ai3 DataZen_5-300x137 Comment créer un rapport avec Datazen

  • Cliquez sur le bouton « New Data View » pour démarrer les boîtes de dialogue pour définir notre point de vue.

blog ai3 DataZen_6-300x138 Comment créer un rapport avec Datazen

 

  • La première étape consiste à nommer la vue. Ce nom apparaîtra pour la sélection plus tard, lorsque nous créons notre tableau de bord dans le Datazen Editeur. Le point principal ici est l’entrée de la requête réelle. Notez que la requête est généralement adaptée pour renvoyer les données dans le format correct pour le Datazen.
  • Cliquez sur « Next ».

blog ai3 DataZen_7-300x157 Comment créer un rapport avec Datazen

 

  • Notre requête elle retourne un aperçu des données Après cliquez sur « Finish »

blog ai3 DataZen_8-300x152 Comment créer un rapport avec Datazen

4-Publier son premier tableau de bord:

Comme indiqué dans la section des conditions préalables ,nous avons besoin d’une machine Windows 8 avec le logiciel Publisher Datazen installé dans le but de créer notre tableau de bord.

blog ai3 DataZen_9-300x153 Comment créer un rapport avec Datazen

 

  • Renseignez les champs suivants « server Aderess »« username » et « password » après cliquez sur « Connect».

blog ai3 DataZen_10-300x276 Comment créer un rapport avec Datazen

 

  • Cliquez sur l’icône « Create » qui se trouve au bas de notre boite de dialogue.

blog ai3 DataZen_11-300x167 Comment créer un rapport avec Datazen

 

  • Cliquez sur le bouton «  start from an empty dashboard ».

blog ai3 DataZen_12-300x226 Comment créer un rapport avec Datazen

 

  • Un nouveau rapport s’affiche vide.

blog ai3 DataZen_13-300x123 Comment créer un rapport avec Datazen

 

  • Cliquez sur « Data View»
  • Après cliquez sur « Add Data »

blog ai3 DataZen_14-300x83 Comment créer un rapport avec Datazen

 

  • Cliquez sur « Datazen Sever »

blog ai3 DataZen_15-300x209 Comment créer un rapport avec Datazen

  • Cliquez sur « AdventureWorksDW»

blog ai3 DataZen_16-300x109 Comment créer un rapport avec Datazen

 

 

  • Cliquez sur « Import » et commencer la création de votre rapport.

blog ai3 DataZen_17-300x193 Comment créer un rapport avec Datazen

 

 

  • Créer des graphes et des listes dans le rapport.

blog ai3 DataZen_18-300x147 Comment créer un rapport avec Datazen

 

  • Après publier le rapport au niveau du serveur Datazen.

blog ai3 DataZen_19-300x210 Comment créer un rapport avec Datazen

 

  • Renseignez les champs suivant « Server »et « Dashboard Hub » et cliquez sur « Publish »

blog ai3 DataZen_20-300x274 Comment créer un rapport avec Datazen

 

  • Lancez un navigateur et ouvrir l’adresse http://nomserver:port/viewer. Préciser les éléments de connexion.
  • Renseignez les champs suivants « username » et « password ».

blog ai3 DataZen_21-300x226 Comment créer un rapport avec Datazen

 

  • Après avoir publié notre rapport on retrouve le rapport dans notre hub « Ai3 »

blog ai3 DataZen_22-300x224 Comment créer un rapport avec Datazen

 

  • Cliquez sur le rapport « mon premier tableau de bord »

blog ai3 DataZen_23-300x169 Comment créer un rapport avec Datazen

 

4-Conclusion:

Ce premier article nous a permis de faire un tour d’horizon des fonctionnalités DataZen.

Mokrane SAOUD

Les clients Ai3 témoignent en vidéo !

Bonjour à tous,

Deux clients d’Ai3 ont souhaité témoigner de la réussite de leur projet autour des technologies Microsoft avec le partenariat d’Ai3 dans la mise en œuvre de ces solutions.

Voici donc le témoignage d’Accessible Conseil (http://www.accessible-conseils.com) qui présente la réalisation de leur logiciel GlySt@t en mode SAAS sur la plateforme Microsoft Azure :


http://www.microsoft.com/france/references/fiche-temoignage.aspx?eid=dd66a555-0a3c-4949-afa0-a3a590e7ca47

Ainsi que celui de l’Hôpital Saint Joseph (http://www.hopital-saint-joseph.fr/) qui pilote désormais son activité grâce aux solutions Microsoft PowerBI :


http://www.microsoft.com/France/references/fiche-temoignage.aspx?eid=89b4df2b-5080-42f8-b397-e31acce06eeb

Un grand merci pour leur confiance témoignée envers notre société et les solutions Microsoft !

Xavier Raymond