12 décembre 2007

Reporting Services: L'avenir du Report Builder

Brian Welcker, membre de l'équipe de développement SSRS, nous permet enfin de voir clair dans la forêt des outils qui seront proposés par Reporting Services 2008.

En résumé, le Report Builder a vocation à disparaître pour être remplacé par le nouveau Report Designer à la sauce Office 12. Ce dernier intègrera l'ensemble des fonctionnalités disponibles dans le concepteur de rapport Visual Studio 2008.

Néanmoins le Report Builder actuel sera toujours disponible dans SQL Server 2008 pour laisser le temps aux refractaires de se mettre à la page!

Plus de détails dans cet article: http://blogs.msdn.com/bwelcker/archive/2007/12/11/transmissions-from-the-satellite-heart-what-s-up-with-report-builder.aspx

11 décembre 2007

Reporting Services: Interrogation de listes Sharepoint

Intégrer des rapports SSRS dans MOSS ou WSS, c'est facile... Interroger du contenu Sharepoint depuis un rapport SSRS, c'est une autre histoire. Etrange d'ailleurs que MS ne propose pas de connecteur permettant de le faire nativement.
Le truc consiste donc à interroger les webservices mis à disposition par Sharepoint pour arriver au résultat escompté.

Voici donc la marche à suivre:

    Dans la source de données, utiliser le connecteur XML en précisant l'URL d'accès au Webservice Lists.asmx de votre serveur Sharepoint.

Dans les informations d'identifications, seules les options utiliser l'authentification Windows et Ne pas demander les informations d'identification sont utilisables. Il convient donc de s'assurer que l'utilisateur qui exécute le rapport dispose des droits nécessaires pour interroger le contenu Sharepoint.

Voyons en premier lieu comment créer un dataset basé sur cette source de données qui interroge la méthode GetListCollection. Cette dernière permet de lister les bibliothèques de documents disponibles.
<Query>
<Method Namespace="http://schemas.microsoft.com/sharepoint/soap" Name="GetListCollection" />
</Query>

Pour obtenir le détail du contenu d'une de ces listes, c'est la méthode GetListItems qu'il faut interroger. Celle-ci prend en entrée les paramètres listName (guid ou nom d'une liste) et viewName (guid d'une vue, vue par défaut si null).

<Query>
<Method Namespace="http://schemas.microsoft.com/sharepoint/soap/" Name="GetListItems"/>
<SoapAction>http://schemas.microsoft.com/sharepoint/soap/GetListItems</SoapAction>
<Parameters>
<Parameter Name="listName">
<DefaultValue>/</DefaultValue>
</Parameter>
<Parameter Name="viewName">
<DefaultValue>/</DefaultValue>
</Parameter>
</Parameters>
</Query>

Ne pas oublier de créer les deux paramètres correspondant dans le dataset. Si ceux-ci n'existent pas, la requête ne fonctionnera pas.

On peut maintenant tester l'exécution de la requête. On commence par renseigner les valeurs des paramètres.

Et voilà le résultat!


07 décembre 2007

Reporting Services: Astuce pour gérer les totaux d'une matrice

Une question qui revient souvent sur SSRS: comment utiliser des formules différentes dans les lignes de détail et le total d'une matrice ? La réponse se trouve dans l'utilisation de la fonction InScope().

Prenons une matrice qui nous affiche un total des ventes par clients (en ligne). Celle-ci se présente par défaut comme suit:

L'affichage qui en résulte est le suivant:


Le total utilise donc la même formule que les lignes de détail, à savoir une somme sur les montants.

Nous pourrions imaginer vouloir afficher une moyenne plutôt qu'un somme dans cette zone.
Notre regroupement sur les comptes clients se nommant grpAccountNumber, il faut modifier l'expression de la zone de texte affichant les données comme suit:
=Iif(InScope("grpAccountNumber"),Sum(Fields!TotalDue.Value),Avg(Fields!TotalDue.Value))

Voilà le résultat obtenu:


Cette exemple peut se décliner à volonté pour permettre de différencier les différents niveaux de regroupement par exemple.

A noter que tout ceci sera obsolète avec l'apparition de l'objet Tablix dans le Report Deisgner de SQL Server 2008 qui permettra une plus grande souplesse dans la gestion des matrices.