Utiliser la fonction Lookup pour traduire les parties statiques des rapports

Analysis Services offre des possibilités de traduction intéressantes, qui permettent évidemment de traduire les rapports qui s’appuient dessus. Grâce à la communication du LCID de l’interface cliente, la structure et le contenu du cube sont alors exposées dans la langue adéquate.

Mais quiconque à déjà réalisé des rapports sait que ceux-ci sont aussi composés de parties « statiques », non dépendantes du cube, qui par conséquent ne tirent aucun bénéfice des traductions OLAP. Les titres des rapports, entêtes de tableaux, descriptions, sont alors autant de libellés qu’il va falloir gérer dans un contexte internationalisé.

Une solution intéressante à ce problème est apportée par la fonction Lookup de SQL Server 2008 R2, celle ci permettant de récupérer dans un DataSet l’enregistrement correspondant à une valeur de clé. En effet, stocker les libellés dans une base est une chose, les récupérer en utilisant les (limitatives) fonctions d’agrégations de SSRS en est une autre.

1) 1ère étape, on stocke dans une table au format Clé/Valeur/Langue les différents libellés du rapport. Prenons comme exemple Produit:

Rapport;Libelle;Traduction;Langue;
Ventes;Product;Produit;FR-FR;
Ventes;Product;Product;EN-EN;
...

2) 2ème étape on crée un DataSet, par exemple nommé « Dictionnaire », qui récupère uniquement et dynamiquement les libellés correspondant au rapport et à la langue en cours:

SELECT Libelle, Traduction
FROM dbo.Traductions
WHERE Rapport=@Rapport AND Langue=@Langue

@Rapport est mappé à la valeur globale Globals!ReportName, @Langue à User!Language, deux valeurs exposées par défaut par Reporting Services qui donnent respectivement le nom du rapport en cours et la culture de l’utilisateur connecté.

3) 3ème étape dans chaque cellule ayant besoin d’être traduite, on va chercher le libellé correspondant, avec une expression Lookup:

=Lookup("Dictionnaire";Fields!Libelle.Value; "Product";Fields!Traduction.Value)

Magie de la technique, les libellés sont traduits automatiquement, et surtout on peut rajouter des langues à volonté sans retoucher aux rapports!
En espérant vous avoir donné des idées.

PS1: pour ceux que cela intéresse on aurait pu effectivement imaginer stocker dans la table le nom du contrôle SSRS plutôt qu’une clé gérée par le développeur. Le problème est qu’il est difficile de manière propre de connaître le nom d’un contrôle dans une expression SSRS. Essayez vous verrez c’est très sale et pas assuré d’être stable. Cela oblige donc à documenter.
PS2: On peut aussi vouloir gérer la traduction par un paramètre, auquel cas on n’utilisera pas User!Language mais un paramètre à soi.
PS3: Attention à l’interaction avec SSAS: Reporting Services travaille avec des libellés de culture (fr-fr, en-us…), SSAS avec des LCID par défaut.

5 réflexions sur “Utiliser la fonction Lookup pour traduire les parties statiques des rapports

  1. Bonjour François,
    je veux bien connaître l’expression sale qui permet de trouver le nom du contrôle.
    je fais référence à ton PS1 : « Le problème est qu’il est difficile de manière propre de connaître le nom d’un contrôle dans une expression SSRS. Essayez vous verrez c’est très sale et pas assuré d’être stable »
    Merci pour ton aide

    • Alors il faut que je retrouve mais dans l’idée ça se basait sur un retrouvage de nom de contrôle via son ToString parsé dans le code .NET du rapport et un soupçon de Reflection. Un truc assez à vomir. Je regarde sur mon poste voir si je trouve ça!

      • Je viens juste d’avoir une réponse sur le forum MSDN sur l’exploitation de la l’expression Me.ToString() dans du code custom qui voici :

        Public Function TextBoxName(ByVal meString As String) As String
        Dim s As Integer = 19
        Dim e As Integer = meString.IndexOf(« _TextBoxExprHost ») – 19
        TextBoxName = meString.Substring(s,e)
        End Function

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s