Archive

Archives de l'auteur

Lancement d’Office 2010

2010-06-14 19.41.53 David et moi étions présents hier soir à la soirée de lancement d’Office 2010, disponible dans les bacs depuis aujourd’hui mardi 15 juin 2010.

Une courte démo d’une demi-heure nous a permis de (re)découvrir quelques-unes des nouveautés du produit.

Un petit résumé des nouveautés qui nous ont été présentées :

Word

· L’apparition des SmartArts permettant de rapidement intégrer des objets, qui étaient précédemment disponibles uniquement dans PowerPoint (effet sur les polices, objets hiérarchiques…)

· L’ajout de nouveaux effets pour la modification et l’intégration d’images. Notamment une fonction de détourage permettant d’intégrer automatiquement du texte autour d’une image (par exemple autour d’une fleur).

Excel

· Mise en forme conditionnelle améliorée, même si le résultat présenté en démo était, comment dire… coloré…

· L’arrivée des sparklines (des petits graphiques de tendance qui tiennent dans une cellule du tableur).

Outlook

· L’apparition du mode conversation qui regroupe automatiquement les mails ayant trait à la même discussion (fonctionnalité bien connue des utilisateurs de Zimbra et Gmail)

· Des fonctionnalités de nettoyage de mails permettant de supprimer des mails en doublons, d’ignorer certaines conversations afin de ne plus être spammé par des sujets pour lesquels nous ne serions pas concernés

· L’apparition du Outlook Social Connector qui permet d’accéder facilement à différentes informations rattachées à un contact : ses derniers mails, les dernières réunions en commun, ses flux rss mais également son profil LinkedIn et Viadeo et bientôt Facebook.

PowerPoint

· L’intégration de vidéos plus poussée, avec notamment la possibilité de sélectionner le passage de la vidéo à diffuser (seconde de début et de fin)

· Des nouveaux effets de transition

· La possibilité d’enregistrer le déroulé du ppt au format vidéo

· La possibilité de partager un lien permettant à plusieurs utilisateurs distants de suivre le déroulé en live de la présentation.

Nouveautés générales à toute la suite

· Modification du ruban contextuel avec notamment la disparition du rond Office et la réapparition des menus fichiers, mise en page, données…

· Un nouveau menu Fichier avec un accès rapide aux fonctions enregistrer, imprimer, envoyer…

· La possibilité d’effectuer des copies d’écran directement d’un menu Office (plus besoin de faire un ImprEcran et de redécouper l’image dans Paint)

· La possibilité d’enregistrer simplement le document sur le Sharepoint d’entreprise ou sur un répertoire web de stockage (avec la mise à disposition d’un espace de 5Go).

Les nouveautés web (Office Live)

· Accès en lecture aux différents documents Office et modification directement dans le navigateur (IE, Mozilla et Safari) sans nécessairement disposer des produits Office installés sur son poste (nécessite Sharepoint 2010)

· La modification à plusieurs d’un même document en live et en simultanée.

Mobile

· La disponibilité des applications Office en version mobile pour un meilleur confort d’utilisation

Licencing

· Nouveau mode de licencing : toutes les versions sont installées nativement (familiale, pro…) et l’activation de la version choisie se fait en fonction de la clé saisie

· Tarifs des produits : 99€ pour l’édition familiale, 199€ pour la version petite entreprise et 499€ pour la professionnelle

Conclusion:

La brièveté de la démo ne permettait pas de faire le tour de toutes les nouveautés, mais, utilisant le produit depuis quelques mois, je trouve qu’il s’est enrichi de nombreuse améliorations assez sympas (notamment sur l’utilisation d’Excel comme un outil BI, peut-être l’occasion d’un prochain post…) et qu’il permet de gagner du temps au quotidien.

La possibilité de modifier des documents à plusieurs en simultané est assez bluffante (même si elle est un cran en dessous de ce que propose Google).

La gestion des logs avec SSIS

Pouvoir être en mesure de suivre la bonne exécution des traitements batch SSIS est primordiale.

Plusieurs solutions permettent de répondre à ce besoin de suivi :

  1. La méthode manuelle : Management Studio propose un historique d’exécution des jobs
  2. L’utilisation de tâches SQL permettant de renseigner une table de log
  3. L’utilisation des logs standards SSIS

La solution 2. est très souvent rencontrée sur les projets par simple méconnaissance de la 3.

Cet article décrit donc comment mettre en place en quelques minutes un suivi des traitements SSIS performant.

L’activation des logs s’effectue pour chaque package dans le menu SSIS\Enregistrement (Logging en version anglaise)

Les étapes à réaliser sont les suivantes :

  1. Choisir dans la liste déroulante type de fournisseur, où seront stockés les logs (base de données, fichier XML,…) puis cliquer sur le bouton Ajouter. Personnellement, je préconise le stockage SQL Server qui permet une exploitation aisée de ces données
  2. Cocher la case à cocher devant le nom du package
  3. Activer la case à cocher devant le fournisseur SQL Server
  4. Sélectionner la base de données hébergeant la table de log

clip_image002

Remarque : Il n’est pas possible de choisir le nom de la table dans laquelle les logs seront stockés. SSIS 2005 les stocke dans la table sysdtslog90, SSIS 2008 dans sysssislog.

L’onglet Détails permet ensuite de spécifier le niveau de finesse dans le suivi des traitements :

Afin d’éviter des logs trop volumineux, je recommande de tracer uniquement les événements suivants :

  • OnPreExecute : Trace le début d’exécution des différentes tâches présentes dans le niveau Flux de Contrôle
  • OnPostExecute : Trace la fin d’exécution des différentes tâches présentes dans le niveau Flux de Contrôle
  • OnError : Trace toutes les erreurs survenues aux niveaux Flux de contrôle et Flux de données

clip_image002[5]

Les principaux champs de la table de logs sont les suivants :

  • Event : événement qui a généré le log (OnPreExecute, OnPostExecute ou OnError)
  • Computer : ordinateur qui l’a exécuté
  • Operator : utilisateur qui l’a exécuté (permet par exemple de différencier une exécution automatique effectuée par l’agent SQL Server d’une exécution manuelle de rattrapage)
  • Source : étape du flux qui a généré le log
  • SourceId : Identifiant de l’élément (package, tâche de contrôle…) ayant généré le log
  • executionId : identifiant unique de l’exécution
  • Starttime : début de l’événement qui a généré le log
  • Endtime : fin de l’événement qui a généré le log
  • Message : détails de l’événement (notamment les messages d’erreurs sur l’événement OnError)
    En quelques clics nous avons ainsi paramétré le stockage de l’information relative à l’exécution des flux SSIS. Ces données peuvent maintenant être requêtées en SQL ou utilisées via du reporting.

    A noter qu’une ligne est écrite dans la table de log pour chaque événement: début d’une tâche, fin d’une tâche ou erreur. Les données doivent donc être manipulées pour obtenir une ligne du type: nom de la tâche, date de début, date de fin et statut d’exécution.

    Homsys propose ainsi un ensemble de tableaux de suivi développés sous Reporting Services. Cet aspect sera présenté dans un prochain article…

Les modèles de package SSIS

Fonctionnalité souvent méconnue et sous utilisée : SSIS (SQL Server Integration Services) permet de créer des modèles de package qui intègrent les éléments récurrents d’un projet.

Pourquoi utiliser des modèles de package :

Un modèle de package pourra par exemple contenir les éléments suivants :

  • Cartouche d’en tête documentant le flux (description du flux, date de création, auteur…)
  • Activation des logs d’audit des traitements
  • Connexion vers les bases de données du projet
  • Variables communes (nom du serveur DWH, chemin de stockage des fichiers sources, chemin de l’archivage…)
  • Utilisation du fichier de configuration qui permet l’alimentation dynamique des variables communes
  • Propriété delayValidation valant True afin d’éviter les ralentissements à l’ouverture des packages

La mise en place de ces éléments permet ainsi un gain de temps intéressant, une homogénéisation des différents développements (les variables communes auront le même nom dans l’ensemble des packages) ainsi qu’un risque d’anomalie réduit (erreur de paramétrage des connexions, du fichier de configuration…).

Comment développer un package modèle ?

Un package modèle est un package SSIS standard dans lequel les éléments communs auront été implémentés. Ce package doit ensuite être copié dans le répertoire :

C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\PrivateAssemblies\ProjectItems\DataTransformationProject\DataTransformationItems

Comment utiliser un package modèle :

L’utilisation du modèle de package s’effectue via les étapes suivantes :

Cliquer droit sur le projet puis Ajouter\Nouvel Element :

clip_image002

Utiliser un modèle de package Etape 1

Ajouter l’élément Package_model_SSIS :

clip_image004

Utiliser un modèle de package Etape 2

Categories: Trucs & astuces Tags: , , ,

La gestion des doublons avec SSIS

Plusieurs techniques existent permettant de détecter et traiter des lignes en doublon avec Microsoft SQL Server Integration Services (SSIS).

La plupart des ressources sur le web proposent de gérer ce point uniquement avec du SQL dans la source de données, certaines proposent même de passer par des tables temporaires.

Je vous propose ici une solution rapide à mettre en œuvre tout en bénéficiant des avantages de SSIS en termes de maintenance, de performance et de lisibilité en phase de développement.

Cette solution répond au besoin suivant :

  • Ma table cible doit être alimentée avec des lignes uniques par rapport à une clé,
  • Dans le cas où des doublons sont rencontrés, l’une des lignes doit être conservée,
  • Les doublons peuvent être identifiés et éventuellement stockés dans une table de rejet.

Ce cas est notamment rencontré lorsque l’on charge un référentiel client. Souvent, la base client doit être la plus complète possible mais dans le cas où la donnée serait dupliquée, on ne souhaite ni dupliquer le client ni perdre la trace de son existence. On appliquera alors une règle fonctionnelle permettant de déterminer la version du client à conserver en cas de doublon (le numéro de création le plus élevé ou la date de mise à jour la plus récente par exemple).

clip_image002

1 : Contrôle de doublon avec conservation de l’une des lignes du doublon

1) DOUBLON : Source contenant potentiellement des doublons

2) Contrôle doublon : Recherche effectuée avec les paramétrages spécifiques suivants :

a. Onglet Général : « Rediriger les lignes en erreur vers la sortie sans correspondance »

b. Onglet Connexion : requête sur la même table que la source DOUBLON permettant de renvoyer l’ensemble des lignes qui ne sont pas en doublon et, pour les lignes en doublon, la ligne qui devra être conservée. La requête est construite comme suit :

select CLE, max(COND) COND from doublon group by CLE

Où CLE correspond à la ou les colonnes constituant la clé sur laquelle le test d’unicité est effectué, COND correspond au critère permettant de choisir la ligne à conserver en cas de doublon (numéro de création, date de mise à jour…). Selon les cas, le Max peut être remplacé par un Min.

c. Onglet Colonne : Faire la jointure sur la ou les colonnes CLE et COND

3) Le flux de sortie « Sortie de recherche avec correspondance » fournit les lignes non doublonnées ainsi que la ligne devant être conservée en cas de doublon.

4) Le flux de sortie « Sortie de recherche sans correspondance » fournit les lignes qui sont doublonnées, qui pourront ensuite être insérées dans une table de rejet.

Remarque : Dans le cas où la présence de doublons doit interrompre le chargement, on pourra implémenter un compteur de nombre de lignes sur la branche « sortie sans correspondance » qui, s’il est différent de 0 bloquera la suite de l’exécution.

Autres solutions permettant de traiter des doublons :

  • Utilisation du composant MSDN : http://msdn.microsoft.com/fr-fr/library/ms160916%28SQL.90%29.aspx (je ne l’ai personnellement pas testé).
  • Utilisation de la tâche de Tri et de l’option « Supprimer les lignes avec valeurs de tri en double » : L’avantage de cette solution est sa simplicité de mise en œuvre, son inconvénient est qu’elle ne permet pas de récupérer les lignes en doublon.
  • Utilisation des composants multidiffusion, agrégation, jointure pour reproduire un fonctionnement identique à la requête SQL présente dans le lookup de la solution présentée ci-dessus. L’avantage de cette solution est qu’elle est uniquement basée sur l’utilisation de composants SSIS, son inconvénient est qu’elle est un peu plus longue à développer et ses performances sont un peu moins bonnes.
Categories: Trucs & astuces Tags: ,

Rencontre avec Fausto Ibarra (Director of Product Management , SQL Server. Microsoft Corp)

Les membres du CUBIM (Club Utilisateurs BI Microsoft) rencontraient jeudi 15 octobre Fausto Ibarra pour un échange d’1 heure sur les nouveautés SQL Server 2008 R2 et sur les versions à venir.

Bien évidemment la majeure partie de la session fut consacrée à Gemini (qui s’appellera dorénavant PowerPivot) avec une démo assez bluffante sur de l’analyse instantanée sur 100 millions de lignes présentes dans un onglet Excel !

Autre sujet à suivre: Master Data Services. Grâce au rachat de Stratature (juin 2007), SQL Server 2008 R2 intégrera une solution de MDM (Master Data Management) permettant la gestion et la saisie de référentiel avec notamment :

  • Du versionning
  • Du workflow
  • Des hiérarchies
  • De la sécurité

Cette brique encore absente de la beta que nous testons actuellement arrivera dans la prochaine beta à la fin du mois d’octobre.

La session fut également l’occasion d’évoquer le sujet de la scalabilité avec le projet Madison et la distribution des données “on the cloud” avec le projet Azure.

La sortie de SQL Server 2008 R2 est annoncée pour le 1er semestre 2010.

Quelques axes d’évolutions des futures versions:

  • L’intègration d’une brique Data Quality Services (issue du rachat de Zoomix)
  • L’amélioration des performances d’Analysis Services.

Cette version est pour l’instant prévue pour 2011…

Utilisation de la tâche de chargement en bloc sous SSIS

La tâche SSIS (Microsoft SQL Server Integration Services) de chargement en bloc est utile pour charger un fichier plat dans une table d’une base de données dans les 2 cas suivants:

  • Le chargement d’un fichier volumineux
  • Le chargement d’un fichier à champs fixes contenant un nombre de colonnes important (ce qui permet un gain de temps non négligeable en phase de développement)

clip_image002

Tâche d’insertion en bloc

    Son utilisation n’étant pas toujours triviale, voici une description des différentes étapes à suivre :

  • 1) Création d’une connexion vers le fichier texte à charger
  • 2) Utilisation de la tâche d’insertion en bloc (présente dans le flux de contrôle)
  • 3) Paramétrage de l’onglet Connexion de la tâche d’insertion en bloc
  • 4) Paramétrage de l’onglet Options de la tâche d’insertion en bloc
Etape 3) Paramétrage de l’onglet Connexion de la tâche d’insertion en bloc:

image Tâche d’insertion en bloc – Onglet Connexion

  • Connexion : Choisir la connexion vers la base de données dans laquelle les données seront chargées.
  • DestinationTable : Choisir le nom de la table dans laquelle les données seront insérées. La table devra contenir l’ensemble des colonnes présentes dans le fichier.
  • File : Connexion vers le fichier plat source.
  • Format : Spécifier la valeur Utiliser un fichier pour charger un fichier dont le format est décrit dans un fichier de format .fmt. Pour les fichiers au format délimité sélectionner le format Spécifier.

Options pour les fichiers au format champs fixes :

  • FormatFile : Définir le chemin d’accès vers le fichier .fmt décrivant le format du fichier.

Options pour les fichiers au format délimité :

  • RowDelimiter : Définir les caractères séparateurs de lignes (en général {CR}{LF} en environnement windows).
  • ColumnDelimiter  : Définir les caractères séparateurs de colonnes

clip_image002[5]Le chemin utilisé vers le fichier de format dans la propriété FormatFile doit être au format UNC (Universal Naming Convention): \\NomServeur\Partage.

Etape 4) Paramétrage de l’onglet Option de la tâche d’insertion en bloc

clip_image006

Tâche d’insertion en bloc – Onglet Options

  • Options : Décocher les différents contrôles.
  • SortedDate : Laisser la valeur non renseignée par défaut.
  • MaxErrors : Laisser la valeur 0
  • CadePage : Spécifier la valeur RAW
  • DataFileType : Spécifier la valeur char
  • BatchSize : Laisser la valeur 0
  • LastRow : Laisser la valeur 0
  • FirstRow : Laisser la valeur 1 (sauf si le fichier contient un en-tête qui ne doit pas être chargé)

Exemple de fichier .fmt:

Le fichier .fmt permet de décrire le format du fichier à charger. Il liste les colonnes contenues dans le fichier ainsi que leurs caractéristiques. Sa construction est en général rapide à partir d’un document excel décrivant les colonnes du fichier (pour ceux qui le souhaitent, j’ai un exemple de fichier permettant la génération automatique de fichier fmt à partir de formules excel).

Voici un exemple de fichier .fmt  simple :

10.0

2

1 SQLCHAR 0 3 «  »       1 CH1 French_CI_AS

2 SQLCHAR 0 5 « \r\n » 2 CH2 French_CI_AS

  • La première ligne correspond à la version SQL Server utilisée (10.0 pour la version 2008, 9.0 pour la version 2005, 8.0 pour la version 2000 et 7.0 pour la version SQL 7…)
  • La deuxième ligne précise le nombre de colonnes présentes dans le fichier
  • Les lignes suivantes décrivent chaque colonne du fichier en précisant : la position de la colonne, SQLCHAR, 0, le nombre de caractères de la colonne, le numéro de la colonne, le nom de la colonne, la collation (FRENCH_CI_CI_AS).

clip_image002[6]La dernière ligne du fichier doit être un retour à la ligne.

Lclip_image001a génération du fichier fmt peut être également effectuée automatiquement à partir de la table cible en utilisant la commande bcp.

Générer un fichier .fmt à partir de la commande bcp:

Ouvrir une fenêtre d’Invite de commande et exécuter la commande suivante :

bcp NomBaseDeDonnées.Schéma.NomTable format nul -c -f

CHGT_BLOC.fmt -T -S NomServeur\NomInstance

image Exemple d’utilisation de la commande BCP

Conclusion:

Ce composant a l’avantage d’être performant. Il a par contre l’inconvénient d’être difficile à auditer en cas d’erreur. En effet, si le fichier source ne respecte pas strictement le format décrit, le fichier sera rejeté en bloc sans possibilité d’identifier la ligne ou la colonne ayant généré une erreur. Il n’est pas possible également de placer une visionneuse sur les données pour suivre le chargement.

Ce composant n’est donc à utiliser que sur des fichiers dont la structure est connue et bien maîtrisée. Pour des fichiers non volumineux et contenant un nombre de colonnes raisonnables, on préférera utiliser le chargement classique via des sources OLE DB.