Utiliser BIDS 2012 pour déployer vers Reporting Services 2008 (R1 ou R2)

5 septembre 2014

Contexte

Si on prend pour acquis que Reporting Services 2008 est la première version acceptable pour le développement d’applications BI, il y a quand même plusieurs options pour le développement de rapports:

BIDS Version

Visual Studio

Description

2008 R1 2008 Installé à partir du DVD de SQL Server 2008.
2008 R2 2008 Installé à partir du DVD de SQL Server 2008 R2.
2012 2010 ou 2012 Installé à partir du DVD de SQL Server 2012. S’enregistre dans VStudio 2010 et / ou 2013.

Au niveau de la du schéma XML des fichiers de rapports (RDL), il y a une différence entre R1 et R2. La version 2012 n’apporte aucun changement de ce côté. Lors du déploiement vers un serveur, il est possible de spécifier R1 ou R2:

image

Au niveau des Dlls de Reporting Services installés dans le répertoire PrivateAssemblies de Visual Studio, le nom de l’assembly change entre les versions 2008 et la version 2012:

Ex. Microsoft.ReportingServices.ProcessingObjectModel.dll

BIDS Version

Assembly Version

File Version

2008 R1 10.0.0.0 10.0.1600.22
2008 R2 10.0.0.0 10.50.2500.0
2012 11.0.0.0 11.0.0.3360.12

Pour ceux qui sont familier avec le développement .NET, c’est la version de l’assembly qui compte lorsque l’on crée une référence vers un Dll. La version du fichier permet au développeur de corriger des problèmes sans forcer la recompilation de tous les programmes utilisant la librairie.

Description de la problématique

Ce qui (finalement) nous amène au sujet de ce blogue. Qu’est-ce qui arrive si l’on est dans la situation suivante:

  1. On utilise BIDS 2012;
  2. On déploie vers Reporting Services 2008 R1 ou R2;
  3. On utilise un Dll en support à nos rapports;
  4. Ce Dll réfère un Dll de Microsoft (ex. ProcessingObjectModel.dll) dans sa version 10 afin de fonctionner avec le serveur lors du déploiement.

Dans cette situation, le rapport déployé fonctionnera car le Dll du serveur aura le bon Assembly Name. Par contre, ni le débogage, ni la prévisualisation dans BIDS ne fonctionneront. L’erreur sera que la version 10.0.0.0 ne peut être trouvée. Effectivement, la version chargée par BIDS est 11.0.0.0.

Si vous changez la référence de votre Dll pour utiliser la version 11, vous aurez le problème inverse! Tout fonctionne localemenet mais pas une fois déployé! Sad smile

Solution: Binding Redirect

Ceux qui ont fait du ASP.Net sont peut-être habitué d’ajouter des Binding Redirect à leur Web.Config afin de rediriger les références à de vielles versions automatiquement à la toute dernière version disponible. Dans ce cas, c’est facile de savoir où l’ajouter (Web.Config de l’application Web).

Mais quand on exécute le rapport dans BIDS, à quel endroit doit-on ajouter le Binding Redirect? Vous avez répondu DevEnv.config? Ce n’est pas la bonne réponse!

Lorsque l’on utilise le Preview:

image

L’exécutable qui charge nos Dlls et leurs dépendances pour exécuter le rapport est PreviewProcessingService.exe:

image

Tandis que lorsqu’on veut déboguer un rapport:

image

Il s’agit plutôt de l’exécutable RSReportHost.exe

image

La solution au problème est donc d’ajouter ceci:

<dependentAssembly>
<assemblyIdentity name="Microsoft.ReportingServices.ProcessingObjectModel" publicKeyToken="89845dcd8080cc91" culture="neutral" />
<bindingRedirect oldVersion="10.0.0.0" newVersion="11.0.0.0" />
</dependentAssembly>

Aux fichiers:

  1. PreviewProcessingService.exe.configimage
  2. RSReportDesigner.configimage

Du répertoire PrivateAssemblies du Visual Studio dans lequel on utilise Report Designer.

Références

<bindingRedirect> Element
http://msdn.microsoft.com/fr-fr/library/eftw1fys(v=vs.110).aspx


SVP, aidez-nous à convaincre Microsoft d’améliorer la plate-forme Reporting Services

30 mai 2014

Un blogue est souvent une relation à sens unique. Après plus de 20000 hits, le nombre de commentaires est sous la barre des 100. Il reste qu’en 2011, mon blogue obtenait à peine 115 visites par mois et que je dépasse maintenant la barre des 1000 visites / mois.

Aujourd’hui, je sollicite votre aide pour améliorer la plate-forme Reporting Services de Microsoft. Rien de compliqué, juste de voter pour trois éléments sur la plate-forme Microsoft Connect:

  1. Dégradation de performance
  2. Suggestion: limite de l’historique configurable
  3. Suggestion: HTTP POST pour les Go to url

image

En effet, nous avons découvert un problème de dégradation de performance très important avec cette plate-forme. Dès lors que l’on utilise des actions de type “Go to report”:

image

La performance se met à dégrader (rapidement) de click en click. En gros, la plate-forme garde les sessions de toutes les exécutions précédentes actives à chaque fois que l’on clique sur un lien Go to report. Si cela ajoute 0.3 secondes à chaque exécution, éventuellement le coût payé pour maintenir les exécutions précédentes dépasse celui payé pour faire le rendu du rapport courant

La réponse de Microsoft est que cela leur permet d’implanter la fonctionnalité du back, vous savez ce bouton caché dans la barre d’outils de SSRS:

image

C’est très décevant et nous avons utilisé notre statut de partenaire Microsoft afin de demander un correctif à ce sujet. Les gens de Microsoft sont très profesionnels mais il faut d’abord les convaincre que ce n’est pas dans la manière d’utiliser ou configurer le produit. Puis, il faut les aider à reproduire le problème dans leur environnement et suggérer des hypothèses quant à la cause du problème.

Éventuellement, si vous êtes persuasifs et déterminés, le tout sera soumis à l’équipe de développement. Malheureusement, même si le problème est bien réel, cela finira probablement par un célèbre “this behavior is by design”. Plutôt que le correctif (hotfix) souhaité, la meilleure chose qu’on puisse espérer est une suggestion d’amélioration (interne) pour la prochaine version (on parle ici de SQL Server 2016 …).

Microsoft utilise le site Web connect pour recueillir des rapports de bogues ou de suggestions. La priorité des demandes internes et externes est basée sur la popularité de ces demandes. D’où votre implication potentielle.

Deux suggestions d’amélioration ont été soumises à l’équipe interne de Microsoft. Dans la documentation, il y a un lien vers les deux nouvelles entrées de Microsoft Connect que j’ai créées. Plus le vote est élevé, plus les chances sont bonnes pour que notre plate-forme préférée soit améliorée.

Il vous suffit de vous identifier avec un compte Microsoft afin de voter:

image

Faites-le pour vous, faites-le pour nous, mais faites-le! Smile

Et si vous êtes partenaire Microsoft, ou avez accès à du support de leur part, vous pourriez appeler et dire que vous vivez le même problème que celui décrit dans “dégradation de performance”. Vous pouvez mentionner le # de dossier 114031211258040 et éviter de démarrer à partir du début.

Merci d’avance et si vous êtes de bonne humeur, laissez un commentaire pour que je sache que vous avez voté après avoir lu cette entrée de blogue,

Au plaisir,

Frédérick


Virtualisation, plate-forme BI de Microsoft et économie d’énergie

20 mai 2014

Introduction

Les utilisateurs n’aiment pas attendre. Les entreprises comme Amazon et Google prennent cela très au sérieux, tel qu’indiqué dans cet article:

Surprising as all this may be, the implications of this impatience are even more shocking. Amazon‘s calculated that a page load slowdown of just one second could cost it $1.6 billion in sales each year. Google has calculated that by slowing its search results by just four tenths of a second they could lose 8 million searches per day–meaning they’d serve up many millions fewer online adverts.

On est d’accord sur le fait qu’un rapport BI est plus complexe à générer qu’une page listant les produits électroniques en solde. Mais les utilisateurs vont quand même exiger des performances acceptables, autrement ils n’utiliseront pas l’application.

C’est pourquoi vous devez faire passer les performances avant les économies d’énergie sur vos serveurs desservant la solution BI.

Plusieurs CPU modernes supportent des fonctions d’économie d’énergie afin de diminuer la consommation d’énergie quand les serveurs ne sont pas trop occupés. Cependant, cette mécanique ne réagit pas assez vite et fait en sorte que la peformance de l’application BI sera médiocre … sauf lors de pointes d’utilisation (charge).

The theory is in “Balanced” mode the CPU will run at a lower clock speed when it is under low workload, and bring more resources online when there is more to do. As great as it sounds, this won’t always be your best option. If your workload is incredibly bursty (quick moments of intense work), your SQL query speeds will take a hit, as by the time Windows has decided it needs more resources the work may already be done.

Symptômes

Si vous ne contrôlez que les paramètres du système d’exploitation “Guest” (machine virtuelle), voici les symptômes qui peuvent indiquer que l’hôte utilise des fonctions de gestion d’énergie:

  1. Si vous utilisez un outil de Benchmark, comme NovaBench, les résultats varient beaucoup d’un test à l’autre.
  2. Si vous demandez un rapport, les temps sont mauvais. Si vous demandez X rapports où X est le nombre de vCPU, les temps individuels sont meilleurs …

Recommandation

Il peut y avoir trois niveaux de configuration:

  1. BIOS
  2. Hypervisor
  3. OS

La recommandation est de soit désactiver la gestion de l’énergie dans le BIOS, soit l’activer en laissant le contrôle à l’OS (OS Controlled). Dans ce dernier cas, il faut s’assurer que l’hypervisor et / ou l’OS guest utilise High Performance.

Par défaut, VMWare ESX/ESXi utilise High Performance par défaut.

Par défaut, Windows Server 2008 R2 est à Balanced Performance, ce qui n’est pas désirable dans un environnement BI de Microsoft.

Références

Does CPU power management affect server performance?
http://serverfault.com/questions/94212/does-cpu-power-management-affect-server-performance

Consider CPU Power Optimization Versus Performance When Virtualizing
http://workinghardinit.wordpress.com/2011/06/20/consider-cpu-power-optimization-versus-performance-when-virtualizing/

Follow Up on Power Options for Performance When Virtualizing
http://workinghardinit.wordpress.com/2011/07/01/follow-up-on-power-options-for-performance-when-virtualizing/

Best Practices in Power Management
http://en.community.dell.com/techcenter/power-cooling/w/wiki/best-practices-in-power-management.aspx

(VMWare) Using CPU Power Management Policies
http://pubs.vmware.com/vsphere-4-esx-vcenter/index.jsp#managing_cpu_resources/c_managing_cpu_power_efficiency.html

Degraded overall performance on Windows Server 2008 R2
http://support.microsoft.com/kb/2207548/en-us

SQL Server on Power-Saving CPUs? Not So Fast.
http://www.brentozar.com/archive/2010/10/sql-server-on-powersaving-cpus-not-so-fast/

Why Microsoft Windows Server 2012 produces slow and inconsistent SQL query speeds
http://www.masterofmalt.com/software-development/blog/why-microsoft-windows-server-2012-produces-slow-and-inconsistent-sql-query-speeds/


Comment obtenir un maximum d’information de la table ExecutionLogStorage avec SSRS 2012

14 mai 2014

Introduction à la journalisation dans SSRS

Lorsque la journalisation SSRS est activée, la table ExecutionLogStorage de la base de données de Reporting Services contient beaucoup d’information sur les différentes exécutions:

The report server execution log contains information about the reports that execute on the server or on multiple servers in a native mode scale-out deployment or a SharePoint farm. You can use the report execution log to find out how often a report is requested, what output formats are used the most, and how many milliseconds of processing time is spent on each processing phase. The log contains information on the length of time spent executing a report’s dataset query and the time spent processing the data. If you are a report server administrator, you can review the log information and identify long running tasks and make suggestions to the report authors on the areas of the report (dataset or processing) they may be able to improve.

La table en soi est difficile à utiliser mais il existe des vues qui changent des colonnes numériques en texte compréhensible. Par exemple, la colonne ItemAction contiendra “Render”, “DrillThrough” plutôt qu’uniquement un nombre.

image

image

ll y a un champ qui donne beaucoup de détail sur ce qui est fait (AdditionnalInfo) et son contenu (XML) dépend du mode de journalisation: Normal (par défaut) ou Verbose.

Comment changer le mode de journalisation

Dans mon test, j’ai dû être Farm Administrator:

image

image

Il faut se mettre Administrateur du service Reporting Service:

image

image

Puis on va pouvoir gérer les propriétés:

image

image

À la toute fin, il y a la propriété ExecutionLogLevel:

image

Les différences entre le mode Normal et Verbose sont en jaune. Vous pouvez lire plus sur le sujet dans mon lien en références.

<AdditionalInfo>
<ProcessingEngine>2</ProcessingEngine>
<ScalabilityTime>
<Pagination>0</Pagination>
<Processing>0</Processing>
</ScalabilityTime>
<EstimatedMemoryUsageKB>
<Pagination>0</Pagination>
<Processing>6</Processing>
</EstimatedMemoryUsageKB>
<DataExtension>
<SQL>1</SQL>
</DataExtension>
<Connections>
<Connection>
<ConnectionOpenTime>127</ConnectionOpenTime>
<DataSource>
<Name>DataSource1</Name>
<DataExtension>SQL</DataExtension>
</DataSource>
      <DataSets>
<DataSet>
<Name>DataSet1</Name>
<RowsRead>16</RowsRead>
<TotalTimeDataRetrieval>655</TotalTimeDataRetrieval>
<QueryPrepareAndExecutionTime>94</QueryPrepareAndExecutionTime>
          <ExecuteReaderTime>33</ExecuteReaderTime>
<DataReaderMappingTime>30</DataReaderMappingTime>
<DisposeDataReaderTime>1</DisposeDataReaderTime>
        </DataSet>
<DataSet>
<Name>DataSet2</Name>
<RowsRead>3</RowsRead>
<TotalTimeDataRetrieval>16</TotalTimeDataRetrieval>
<QueryPrepareAndExecutionTime>2</QueryPrepareAndExecutionTime>
          <ExecuteReaderTime>1</ExecuteReaderTime>
<DataReaderMappingTime>0</DataReaderMappingTime>
<DisposeDataReaderTime>0</DisposeDataReaderTime>
        </DataSet>
</DataSets>
</Connection>
</Connections>
</AdditionalInfo>

Références

Report Server Execution Log and the ExecutionLog3 View
http://technet.microsoft.com/en-us/library/ms159110.aspx


Reporting Services 2012 (intégré à SharePoint) sur un portable de démo: désolé vous devrez utiliser une identité stockée pour vos connexions aux sources de données

9 mai 2014

La meilleure manière de présenter une application BI à un client potentiel ou à un partenaire reste souvent le portable de démo. Il y a de bonne chances que la salle de réunion ou le kiosque ne vous permette pas d’accéder à votre serveur (qui est en ligne) de manière sécuritaire, fiable, performante etc …

Alors aussi bien tout installer (données, logiciels, progiciels etc.) sur le portable et pouvoir préparer vos présentations dans l’autobus, le train, à la maison etc. Une fois rendu vous êtes certain que tout va fonctionner et ça, comme dirait l’annonce, ça n’a pas de prix!

De plus, si vous avez fait vos devoir et avez acheté une machine décente (ex. Core i7 Quad avec 8 Go de RAM et +), la performance de l’applicatif sera au rendez-vous. Cela ne pourra rivaliser avec un serveur dédié, mais dans un mode un seul utilisateur (vous), les temps seront très bons pour afficher vos tableaux de bord.

Avec les versions 2008 et 2008 R2 de Reporting Services, il était possible d’installer SharePoint et SQL Server avec des comptes Windows locaux (vs de domaine) et d’impersonifier l’utilisateur entrant dans SharePoint pour se connecter aux sources de données. Ainsi, lors de la démonstration, il était possible d’utiliser des utilisateurs Windows (locaux) différents pour illustrer des cas de sécurité applicative ou une configuration par utilisateur (ex. SYNTELL MonTB).

Malheureusement, Reporting Services 2012 exige dorénavant un contrôleur de domaine (Domain Controller) pour utiliser ce mode d’authentification. Cela veut dire qu’un portable déconnecté du domaine ne pourra pas fonctionner contrairement aux versions 2008 / 2008R2 de Reporting Services.

Oh ce n’est pas écrit noir sur blanc mais c’est la conclusion à laquelle je suis arrivé en faisant … disons … quelques lectures et tests … Pas de nature à abandonner trop rapidement, j’ai fini par comprendre pourquoi je n’arrivais pas à le faire fonctionner:

  1. Reporting Services 2012, intégré à SharePoint, ne fonctionne qu’en authentification claims, peu importe si l’application Web est en mode classique ou Claims.
  2. Lorsque SSRS veut se connecter à une source de données (ex. SQL Server, SSAS), il doit convertir le claims en identité Windows.
  3. Le service Windows C2WTS (Claims to Windows Token Service) sert justement à cela. Il doit donc être configuré et démarré.
  4. Ce service finit par essentiellement faire ceci:WindowsIdentity s4u = new WindowsIdentity(upn);
    WindowsImpersonationContext wic = s4u.Impersonate();

    upn sera le nom de l’utilisateur local qui a accédé à SharePoint (ex. PortableDeDemo\SuperUtilisateur)

  5. Ce code .NET va éventuellement appeler la fonction d’API Windows LsaLogonUser.Et c’est là que le bât blesse: cette fonction a besoin de parler au contrôleur de domaine pour fonctionner. S’il n’est pas disponible, vous aurez une erreur ressemblant à ceci en testant la connexion SSRS ou en exécutant le rapport:

    Cannot convert claims identity to windows token.

    Ou si le journal Kerberos est activé, dans l’observateur d’événements, volet sécurité:

    An Error occured during Logon.

    Failure Reason:                An Error occured during Logon.Status:                  0xC000005E

    Et la description de 0xC000005E  est:

    There are currently no logon servers available to service the logon request.

Donc pour résumer:

  1. Oui il est possible d’utiliser C2WTS sur un serveur unique. Mais le serveur doit avoir accès en tout temps au contrôleur de domaine et des comptes de services doivent être utilisés pour SharePoint et SQL Server.
  2. Pour un portable de démo avec SSRS 2012 en mode SharePoint, vous devrez stocker une identité spécifique sur vos connexions SSRS:image

    Et utiliser des comptes locaux pour SharePoint et SQL Server.

Références

Verifying whether the broken piece is c2WTS or Active Directory
http://blogs.msdn.com/b/rodneyviana/archive/2014/03/21/verifying-whether-the-broken-piece-is-c2wts-or-active-directory.aspx

LsaLogonUser function
http://msdn.microsoft.com/en-us/windows/desktop/aa378292(v=vs.85).aspx

Use C2WTS to get a classic windows identity from a claims identity
http://blah.winsmarts.com/2013-11-Use_C2WTS_to_get_a_classic_windows_identity_from_a_claims_identity.aspx

Where can I find the full list of Failure Reasons for event 4625?
http://answers.microsoft.com/en-us/windows/forum/windows_vista-security/where-can-i-find-the-full-list-of-failure-reasons/d0269426-2183-4d99-8af0-cc009dee6658


Vous pouvez utiliser le Add-in 2012 SP1 avec SharePoint 2010 et SSRS 2008 R2

9 avril 2014

Si on regarde la matrice des combinaisons supportées pour le add-in SSRS / SharePoint, on pourrait conclure qu’il faut utiliser la version 2008 R2 lorsque SQL Server 2008 R2 est utilisé.

Supported Combinations of SharePoint and Reporting Services Components
image

http://msdn.microsoft.com/en-us/library/gg492257.aspx

Cependant, j’avais lu qu’il était possible d’utiliser la toute dernière version du add-in dès que SharePoint 2010 était utilisé et que cela pouvait améliorer les performances:

SSRS 2012 Add-In for SharePoint 2010 Performance Testing

http://www.andrewjbillings.com/ssrs-2012-add-in-performance-testing/

Improving performance of reports (for Reporting Services 2008 & 2008 R2) integrated with SharePoint 2010 by using the SQL Server 2012 Add-in

http://blogs.msdn.com/b/mariae/archive/2012/04/23/improving-performance-of-reports-for-reporting-services-2008-amp-2008-r2-integrated-with-sharepoint-2010-by-using-the-sql-server-2012-add-in.aspx

Nous avons réalisé des tests à l’interne, et pour l’utilisation que l’on en fait, les gains sont marginaux (2.5% – 16.5%) mais facile à obtenir.

C’est bon à savoir!


Authentification par formulaire, SharePoint, SSRS et sécurité des données dans SSAS

3 mars 2014

Introduction à l’authentification par formulaire

L’authentification par formulaire dans SharePoint est basée sur la mécanique ASP.Net Membership Provider. Celle-ci date du .NET Framework 2.0, donc elle bien comprise des développeurs. Il y a aussi plusieurs providers disponibles, dont ceux fournis par Microsoft (ex. SqlAspNetMemberShipProvider).

Les raisons d’utiliser une authentification par formulaire sont variées:

  1. Une authentification propriétaire doit être utilisée. Dans ce cas, il faut développer un Custom Membership Provider.
  2. L’application est déployée sur Internet et l’utilisation de comptes Windows (ex. via un serveur ISA) est exclue.
  3. Plusieurs personnes utilisent un poste Windows sous le même compte et l’application doit les distinguer.

Claims et authentification par formulaire

Dans la version 2010 de SharePoint, Microsoft a ajouté un mode d’authentification Claims pour les applications Web. Le mode classique est toujours disponible mais ne fonctionne qu’avec l’authentification Windows. Cela veut dire que dès que l’on utilise l’authentification par formulaire, il faut configurer l’application Web en Claims.

image

Et il faut cocher l’authentification par formulaire en spécifiant le Membership Provider et le Role Provider:

image

Si vous avez activé plusieurs modes d’authentifications simultanément, les utilisateurs devront choisir la méthode avec laquelle ils souhaitent s’authentifier:

image

Claims et SSRS 2008 R2

Reporting Services 2008 R2 n’est pas Claims-Aware mais peut fonctionner lorsque SharePoint 2010 est configuré pour utiliser les Claims. Vous pouvez consulter ceci et ceci dont voici un extrait:

Because this functionality is built into SharePoint 2010 products, Reporting Services can work with this authentication model. Reporting Services is not claims-aware; instead it communicates with SharePoint through a trusted account. The proxy service within the SQL Server 2008 R2 add-in uses the SharePoint object model to convert the claims token into a corresponding SharePoint user context in the form of a SharePoint user token that the Report Server can understand and use to validate against the SharePoint database.

Par exemple, si l’utilisateur s’authentifie via l’authentification Windows, la variable User!Name contiendra i:0#.w|domain\user.

Claims et SSRS 2012

Pour sa part, Reporting Services 2012 est bel et bien Claims-Aware. Il est intégré comme un SharePoint shared service. Quelques extraits de l’article What’s New (Reporting Services):

The new architecture is implemented as a SharePoint 2010 shared service. The shared service architecture allows Reporting Services to leverage many of the IT features of SharePoint products.

(…)

The new Reporting Services service applications support Claims based authentication.

Claims et SQL Server

Pour sa part, SQL Server (engin relationnel et SSAS) n’est pas Claims-Aware. La seule manière de communiquer avec celui-ci est d’utiliser un compte Windows. Dès lors que SSRS est intégré à un SharePoint configuré en Claims, il faut définir un utilisateur pour exécuter les requêtes:

image

Claims et sécurité des données dans SSAS

SSAS permet de définir des rôles ayant des droits différents sur une base de données. C’est très pratique car cette sécurité est effective peu importe l’outil client utilisé pour se connecter aux données (ex. Excel).

image

Mais si tous les rapports s’exécutent avec le même compte Windows, comment utiliser la sécurité de données?

La réponse passe par l’utilisation de la clé EffectiveUserName dans la chaîne de connexion, qui doit devenir dynamique (et non partagée).

Data Source=Serveur;Initial Catalog=Catalogue;EffectiveUserName=UtilisateurÀUtiliserPourLaSécuritéDeDonnées

image

image

Dans cet exemple, j’ai défini un Dataset pour aller extraire les paramètres de la chaîne de connexion:

image

image

La procédure stockée accepte le nom de l’utilisateur (User!Name) comme paramètre et doit retourner le nom du serveur SSAS, le nom du catalogue SSAS ainsi que le nom de l’utilisateur Windows à impersonifier avec EffectiveUserName.

image

Ce DataSet, sert à alimenter trois paramètres internes:

image

Voici un exemple de ces paramètres:

image

image

Lorsque le rapport SSRS s’exécutera, les 3 premiers paramètres seront résolus en se connectant à SQL Server pour appeler la procédure stockée. Puis la chaîne de connexion dynamique vers SSAS sera résolue et contiendra un EffectiveUserName.

Prérequis pour utiliser EffectiveUserName avec SSAS

Avec ce qu’on a fait dans l’étape précédente, nous aurons le bon compte Windows dans le paramètre EffectiveUserName pour la connexion SSAS. Cependant pour que cela fonctionne il faut que le compte qui exécute la requête SSAS soit administrateur du serveur SSAS:

image

Puis il faut assigner chaque utilisateur pouvant être placé dans EffectiveUserName à un rôle SSAS.

Mais comme on le disait plus haut, lorsque l’authentification par formulaire est utilsée, il faut stoker l’identié du compte de service qui exécutera réellement les requêtes. Dans le cas des connexions vers SSAS, il faudra utiliser un compte de service qui sera dans la liste des administrateurs.

Si vous n’avez qu’une poignée de rapports, ce n’est peut-être pas trop difficile d’aller manuellement entrer ces informations au moyen de l’interface graphique de SharePoint:

image

Mais si les rapports sont mis à jour régulièrement ou que vous en avez plusieurs, cela peut devenir fastidieux.

Automatiser l’affectation des informations  d’identification stockées

Les services Web de Reporting Services vous donnent la possibilité de de spécifier l’utilisateur Windows à utiliser pour vous connecter à SSAS. Vous pourriez facilement développer un programme qui:

  1. Liste tous les rapports d’une librairie de documents SharePoint.
  2. Pour chacun, énumère les sources de données personnalisées (non partagées).
  3. Pour celles-ci, changer leur mode pour stocker l’identité spécifique.
  4. Affecte la liste des connexions modifiées au rapport déployé.

Vous pouvez utiliser le service Web accessible via un hyperlien ressemblant à ceci:

http://WebApplicationUrl/_vti_bin/ReportServer/ReportService2006.asmx

La documentation est ici:

http://technet.microsoft.com/en-us/library/reportservice2006.reportingservice2006(v=sql.105).aspx

La méthode ListChildren, acceptant en paramètre l’Url vers la librairie de documents contenant les rapports, retournera un tableau de CatalogItem.

Il est facile d’itérer sur les CatalogItem de type rapport:

foreach (ReportService2006.CatalogItem pCurItem in apItems.Where(pCI => pCI.Type == ReportService2006.ItemTypeEnum.Report)

Puis la méthode GetItemDataSources permet d’obtenir le tableau de DataSource du rapport. Il peut d’agir d’un DataSourceDefinition ou DataSourceReference.

Il faut donc itérer sur les sources de données personnalisées:

foreach (ReportService2006.DataSource pCurDataSource in apCurDataSources.Where(pDS => pDS.Item is ReportService2006.DataSourceDefinition)

Puis il suffit de modifier la DataSourceDefinition:

ReportService2006.DataSourceDefinition pCurDefinition = (ReportService2006.DataSourceDefinition)pCurDataSource.Item;pCurDefinition.CredentialRetrieval = ReportService2006.CredentialRetrievalEnum.Store;
pCurDefinition.UserName = sUserName;
pCurDefinition.Password = sPassword;
pCurDefinition.WindowsCredentials = true;
pCurDefinition.ImpersonateUser = false;
pCurDefinition.ImpersonateUserSpecified = true;

Puis il faut affecter la liste des connexions modifiées au rapport via la méthode SetItemDataSources.

Références

Working Together: SQL Server 2008 R2 Reporting Services Integration in SharePoint 2010
http://technet.microsoft.com/en-us/magazine/ff686706.aspx

Claims Authentication and Reporting Services
http://technet.microsoft.com/en-us/library/ff487970(v=sql.105).aspx

What’s New (Reporting Services 2012)
http://msdn.microsoft.com/en-us/library/ms170438.aspx#bkmk_sharepoint

Using EffectiveUserName To Impersonate in SSAS
https://www.artisconsulting.com/blogs/greggalloway/Lists/Posts/Post.aspx?ID=18&fwLinkID=301385


Suivre

Recevez les nouvelles publications par mail.

Rejoignez 27 autres abonnés