Archive pour janvier 2009

Recherche dynamique multi-critères avec SQL Server

30 janvier 2009

Un billet rapide pour présenter mon dernier article. J’ai moins de mérite car je ne suis pas l’auteur original puisque c’est une traduction, le plus strict possible, d’un article d’un MVP suédois, Erland Sommarskog (http://www.sommarskog.se/). Vous pourrez y trouver néanmoins une introduction et surtout une conclusion personnelle où je vous livre mon avis sur le sujet.

Cet article parle d’un problème commun à toute application (de gestion), à savoir la recherche d’éléments dans une base de données avec plusieurs critères (non connus à l’avance – d’où l’aspect dynamique).

Le sujet est traité par les aspects techniques et permet de parler de SQL dynamique, SQL statique, optimisation de jointure, vues, fonctions de table, etc. L’article est touffu et assez pointu mais vous pouvez le lire comme un recueil de Tips. Attention, l’article parle de la version 2005 de SQL Server ! Il y a un update d’Erland sur son site pour les spécificités de la version 2008, mais cet article reste une bonne base pour enrichir sa culture DGD. Un must-have comme on dit ;-)

Si vous allez sur le site d’Erland, en Anglais, ne vous fiez pas à sa présentation tout droit ressortie des années 90, filez directement sur le contenu technique qui est une vrai mine d’or pour comprendre le fonctionnement du moteur SQL. J’espère un jour pouvoir tous les traduire pour en faire profiter un public francophone mais l’exercice est long et le temps est une denrée rare.

L’article se trouve comme d’habitude sur le site de Bewise, où vous pouvez retrouver de nombreuses ressources (articles, webcasts news) sur les technologies Microsoft :

http://www.bewise.fr/article/116/Recherche-multi-criteres-avec-SQL-Server.aspx

 

Report Builder 2.0 – Créer un membre calculé sans passer par SSAS

27 janvier 2009

Une demande souvent récurrente en reporting ad hoc, c’est le besoin de faire des calculs, plus ou moins simples, qui n’ont pas été prévus dans le cube. Dans ce cas, on est souvent obligé de passer par le service informatique qui n’a pas forcément le temps ou les ressources pour traiter la demande rapidement.

Dans Analysis Services, les calculs se font avec des membres caclulés (Calculated member) qui se codent en MDX et se déploient directement dans le cube. Il est possible d’écrire un membre calculé pour une requête, valable le temps de la session. Report Builder 2.0 s’appuie sur cette possibilité pour proposer à l’utilisateur d’écrire ses propres membres calculés dans le concepteur de requêtes.

Attention, la requête s’écrit en MDX, ce qui limite l’usage pour des utilisateurs non développeurs mais soulignons toutefois la présence de cette fonctionnalité facile d’accès.

Il y a une utilisation efficace de cette fonctionnalité. Dans beaucoup de requêtes multidimensionnelles, on a besoin de ramener des propriétés d’une dimension dans une optique d’affichage, mais sans croiser les dimensions et complexifier la requête dans le cube OLAP. Par défaut, on glisse la propriété dans le designer de requête. Ceci a pour effet de générer un croisement de dimension en MDX ( {PropA * PropB} ). Quand on veut remonter une propriété pour affichage, on préfère la mettre dans les mesures, ce qui est possible avec un membre calculé.

On crée donc un membre calculé et on le fait pointer sur la propriété courrante :

[Product].[Color].CurrentMember.Name

On utilisera .Name ou .Value en fonction de ce que l’on veut remonter.

 

Report Builder 2.0 – Le reporting ad hoc pour l’utilisateur final

8 janvier 2009

La nouvelle version de Report Builder qui accompagne SQL Server 2008 est l’outil parfait pour des utilisateurs non-informaticiens (Information Workers). Sans avoir besoin de Visual Studio, on peut créer des rapport riches, complexes et puissants en quelques minutes à partir d’un modèle de données existant (Report Model ou Cube OLAP) et les mettre à disposition de tous sur le serveur de rapports.

Voici un webcast qui présente cet outil puissant et intuitif dans la création d’un rapport vu et réalisé par l’utilisateur final (ie. moi dans un rôle de composition ;-) ).

Report builder 2.0 - Présentation
Report builder 2.0 – Présentation

SSIS – Processing d’un cube dynamique

8 janvier 2009

Dans un processus d’ETL qui alimente un Datawarehouse, on finit quasiment à chaque fois par un process du cube afin qu’il intègre les nouvelles données pour les utilisateurs.

La tâche Analysis Services Processing permet de faire cette action simplement ; en effet, juste un petit écran de configuration et tout fonctionne.

Cette tâche se connecte en fait à la base SSAS et envoie un batch de commande XMLA, le langage de « gestion » de Analysis Services.

Le problème est que l’assistant de configuration se base sur la base OLAP par défaut (Initial Catalog) de votre chaîne de connexion pour se configurer ; ce qui pose problème quand elle est différente entre la plate-forme de développement et celle de production, ou encore si on veut faire un package un peu générique.

Il faudra donc passer par une variable et une expression pour dynamiser cette étape :

  1. Configurer le composant pour faire le process de votre base sur votre plate-forme de développement 
  2. Ajouter une variable (avec le Package pour scope) de type String
  3. Aller dans les propriétés du composant et copier la valeur de ProcessingCommands
    <Batch><Process>
      <Object><DatabaseID>BIWise</DatabaseID></Object>
      <Type>ProcessFull</Type>
    </Process></Batch>
  4. Aller dans la propriété Expressions et en ajouter une. Elle doit ressembler à ceci (attention à l’échappement des « )
    <DatabaseID> » + @[User::OlapDatabaseID] +  « </DatabaseID>

N’oubliez pas de configurer la variable en post-déploiement ou en pré-exécution.

Meilleurs Voeux pour 2009

6 janvier 2009

Que cette nouvelle année soit prospère pour tous, que la crise ne nous tue pas dans d’atroces souffrances. Que 2009 se place sous le signe de … SQL Server 2008.

Que le Décisionnel et la Gestion des Données innondent vos systèmes d’information de ROI et autres joyeusetés.