Articles Tagués ‘SSRS’

Envoyer des mails depuis SSRS en mode NTLM

6 octobre 2011

imageDans mes sujets en brouillon, il y avait la configuration de l’envoi de mail depuis SSRS via un SMTP n’autorisant pas l’accès anonyme (ie. utilisant l’authentification NTLM ou Kerberos).

A chaque fois que j’ai eu à mettre en œuvre les abonnements Reporting Services, je demandais juste à l’admin :

Il me faut du relaying SMTP depuis tel serveur.

Dernièrement, j’ai eu à le faire en partie moi-même et, cerise sur le gâteau, le relaying anonyme (ie. identification implicite via la topologie réseau) n’était pas autorisé.

Pour la configuration SSRS, Fabrice Romelard a très bien expliqué la procédure la semaine dernière.

Le post est ici :

Fabrice Romelard : SQL Server Reporting Services – Activer l’envoi de message nécessitant l’authentification sur le serveur SMTP

Si vous n’avez que 2 mots-clés à retenir, ce sera :

  • rsreportserver.config
  • SMTPAuthenticate=2

Je vais quand même ajouter mon petit plus ;)

Si votre administrateur Exchange vous dit qu’il ne sait pas ajouter le relaying SMTP sur son Exchange (ou que vous souhaitez briller lors d’un diner geeko-mondain), voici la cmdlet Powershell à exécuter.

New-receiveConnector –Name RelayConnector –usage Custom –Bindings '<ip>:25' –fqdn <serveur>.domain.local –RemoteIPRanges '<ip-start>-<ip-end>;' –AuthMechanism 'None' 

La cmdlet ajoute une interface que vous pouvez configurer pour filtrer les IP, le mode d’authentification, etc.

Utilisation des onglets Excel dans un rapport SSRS

2 octobre 2011

Le tip du week-end, qui traine depuis quelques semaines déjà dans mes articles en brouillon.

Quand on génère de rapports sous le format Excel, on a souvent besoin de générer des classeurs, c’est à dire avoir des tableaux ou graphes sur différents onglets.

image

Pour arriver à ce résultat, il va falloir jouer avec 2 propriétés des éléments de votre rapport :

  • Page Break (ie. les sauts de page)
  • Page Name

A chaque “page” correspondra un onglet et la propriété PageName sera le nom de l’onglet.

image

Sur votre tableau / graphe / rectangle, mettez juste un saut de page à la fin (ou au début du suivant). Vous pouvez passer par la fenêtre de configuration.

La propriété PageName est à mettre sur l’élément de la page correspondante et évidemment, vous pouvez utiliser une expression pour rendre cela dynamique (avec le nom d’un groupe par exemple).
A noter qu’elle n’est accessible que par le panneau des propriétés, il n’y a pas d’assistant.

 

Note : n’hésitez pas à utiliser des Rectangle pour mieux maitriser votre mise en page.

Visualiser les histogrammes des statistiques des index

12 juin 2011

En auditant les statistiques d’une base de de données chez un client, j’ai eu l’idée de créer un rapport qui afficherait de façon plus lisible les STATISTICS des tables.

J’aurai aimé vous faire un cours complet sur les statistiques dans SQL Server mais on va raccourcir un peu.
Quand vous regardez le détail d’une statistique d’une table dans Management Studio, vous obtenez un joli tableau en ASCII-art (cf. ci-dessous).

image

Evidemment, vous savez tous que vous avez toutes les données avec l’instruction DBCC SHOW_STATISTICS(table, index).
Néanmoins, ce n’est pas forcément plus lisible pour autant.

J’ai donc fait un rapport Reporting Services qui appelle les différentes variante de DBCC SHOW_STATISTICS :

DBCC SHOW_STATISTICS(DimCustomer, IX_GeoKey) WITH HISTOGRAM
DBCC SHOW_STATISTICS(DimCustomer, IX_GeoKey) WITH STAT_HEADER
DBCC SHOW_STATISTICS(DimCustomer, IX_GeoKey) WITH DENSITY_VECTOR

Le plus utile est la représentation des histogrammes qui nous renseigne sur la répartition des enregistrements sur les valeurs de la clé.

image

Evidemment, j’en ai profité pour rendre plus lisible les densités (la notation scientifique avec des 10-6 ne me parle pas nativement) et les informations diverses.

Enfin, j’ai créé le rapport avec comme paramètre le nom de la base de données. Le rapport génère les infos pour tous les index.

Dès que j’ai un peu de temps, je traduis tout en anglais et je le pousse sur CodePlex (il n’y a que 2 fichiers RDL mais bon, c’est déjà ça).

 

Tip bonus du jour : si votre base de données utilise des Schemas, pensez à encadrer le nom de la table par des QUOTED_IDENTIFIER (“” ou []) dans l’instruction DBCC SHOW_STATISTICS.

Lister les rapports et leurs sources de données

3 juin 2011

Oui, la photo n'a rien à voirPour les besoins d’une étude d’impact avant une migration, j’ai besoin de récupérer la liste des rapports et la base dans laquelle ils vont piocher leurs données.

Evidemment, quand on a plusieurs centaines de rapports et des dizaines de DataSources accumulés depuis des années, on oublie vite l’idée de faire le référencement à la main.
Surtout quand on sait qu’on a tout dans la base de données de Reporting Services (ReportServer).

J’ai donc écrit une requête qui pioche les informations dans la table dbo.Catalog.
Attention, il y a:

  • du type XML à la toque pour creuser dans la définition RDL
  • des CTE pour simplifier (ou presque)

Je ne vais pas m’étendre sur une explication de texte. Sachez juste que la table stocke le RDL (format XML de définition du rapport) dans le champ Content (de type binaire).
Avec quelques requêtes XQuery, on récupère le nom de la source de données partagées ou de la chaîne de connexion (pour de l’embedded).
Evidemment, j’exclue les rapports liés.

 

WITH 
datasources	AS
(
	SELECT 
		[Path], [Name], ItemId,
		CAST(CAST(content as varbinary(max)) as xml).value('/*:DataSourceDefinition[1]/*:Extension[1]', 'varchar(100)') as Provider,
		CAST(CAST(content as varbinary(max)) as xml).value('/*:DataSourceDefinition[1]/*:ConnectString[1]', 'varchar(100)') as ConnectionString
	FROM dbo.Catalog 
	WHERE [Type] = 5
)
,reports AS
(
	SELECT 
		ItemID, 
		Path, Name
		,CAST(CAST(content as varbinary(max)) as xml) as XmlDefinition
	FROM dbo.Catalog
	WHERE [Type] = 2
)
SELECT
	reports.ItemId, reports.[Path], reports.Name, 
	T2.ds.value('(.//*:DataSourceReference)[1]', 'varchar(200)') as DataSourceReference,
	COALESCE(T2.ds.value('(.//*:ConnectString)[1]', 'varchar(200)'),datasources.ConnectionString) as ConnectionString,
	COALESCE(T2.ds.value('(.//*:DataProvider)[1]', 'varchar(200)'),datasources.Provider) as DataProvider
FROM reports
	CROSS APPLY XmlDefinition.nodes('/*:Report/*:DataSources/*:DataSource') as T2(ds)
LEFT JOIN datasources
	ON datasources.Name = T2.ds.value('(.//*:DataSourceReference)[1]', 'varchar(200)') 

 

PS : après avoir galéré avec les namespaces qui changent entre les version de Reporting Services et de Report Builder, j’ai opté pour la syntaxe wildcard (ex : .//*:DataSourceReference)

Faire un diagramme de Pareto avec Reporting Services

22 mai 2011

Un des outils d’analyse est le classique diagramme de Pareto qui fait ressortir rapidement une répartition.
On y associe généralement la fameuse règle des 80-20 qui permet de statuer rapidement sur une décision.

image

Pas de révolution, on trie les catégories de façon décroissante et on ajoute une seconde série qui est le % cumulé que l’on place sur le second axe (de type pourcentage).

Sachez qu’il existe un moyen très rapide de créer ce type de rapport en configurant juste une propriété.
La série a des propriétés dans CustomAttributes pour gérer des paramétrages particuliers.

image

Vous avez juste à fixer la propriété ShowColumnAs à la valeur Pareto.

 

Merci à Hennie

Démarrage plus rapide de Reporting Services

23 mars 2011

Le matin, vos utilisateurs se plaignent de la lenteur de leurs rapports. On a souvent le mauvais réflexe de dire que c’est dû au premier lancement et que ça ira mieux par la suite.

Evidemment, nos utilisateurs sont en droit d’attendre une réponse plus adaptée comme une résolution de cette problématique par exemple.

En SSRS 2005, le problème venait de IIS (qui faisait tourner les rapports) qui “éteint” le processus au bout d’un certain temps. La valeur par défaut étant de 20 minutes, on comprend la latence au démarrage du premier appel. Pour palier le problème, il suffit juste de configurer l’Application Pool.

En SSRS 2008, il n’y a plus IIS donc inutile de l’incrimer. En revanche, Reporting Services implémente la même logique. Il suffit donc de configurer le délai de recyclage. Cela se passe dans le fichier rsreportserver.config (c:\program files\microsoft sql server\<instance>\Reporting Services\ReportServer\).

Au paramètre RecycleTime, il suffit de mettre 0 pour indiquer à SSRS que l’instance ne doit pas s’éteindre.

<service>
  <recycletime>0</recycletime>
</service>

Prochain sujet : le pre-load des rapports pour démarrer encore plus vite Smile.

Format d’impression par défaut de Reporting Services : A4 au lieu de Letter

15 mars 2011

Imprimer un rapport est facile car c’est une fonction native de Reporting Services ; c’est finalement juste un bouton dans la toolbar.

Le problème rencontré est le suivant :

A l’impression, le format se met par défaut sur Letter (format US)

image

Pour changer ce comportement, il faut déjà vérifier les paramètres du rapport :

  • language = fr-FR
  • PageSize = 21 * 29,7cm

image

Malgré ce paramétrage, il est possible que vos utilisateurs se plaignent que la configuration par défaut se positionne encore sur Letter et non sur A4 à l’impression depuis le Report Manager.

 

Cela vient de la configuration même du serveur de rapport qui a ce setting by-design. Pour le changer, il faut aller changer la configuration de l’extension de rendu.

Il faut donc aller dans le fichier de configuration de Report Server (C:\Program Files\Microsoft SQL Server\<instanceSSRS>\Reporting Services\ReportServer\rsreportserver.config) et modifier la section Render.

On ajoute juste les settings dans l’extension de rendu RPL (celle utilisée par le serveur pour l’impression) en forçant les hauteurs et largeurs afin de coller à du A4.

Ca donne ça :

 <extension name="RPL" type="Microsoft.ReportingServices.Rendering.RPLRendering.RPLRenderer,Microsoft.ReportingServices.RPLRendering" visible="False" logallexecutionrequests="False">   <configuration>     <deviceinfo>       <outputformat>RPL</outputformat>       <pageheight>297mm</<pageheight>       <pagewidth>210mm</pagewidth>     </deviceinfo>    </configuration> </extension>

 

Et les rapports liés

Cependant, vous aurez toujours le problème avec un rapport lié.

Cela est dû au fait que, dans la base de données ReportServer, quand l’object LinkedReport est créé, les propriétés du rapport ne sont pas recopiées.

 Select ItemID, Content, LinkSourceID, Property From Catalog

image

Il existe quelques bugs sur Connect qui expose le problème. Je vous invite à voter pour que la prochaine version corrige le problème Smile.

Fix pour Reporting Services en mode Sharepoint intégré

1 mars 2011

Si vous avez de nombreux liens basés sur des expressions dans un rapport et que vous le déployez sur une instance en mode Sharepoint intégré, vous constaterez une dégradation significative de vos performances.

Ceci est dû au fait que SSRS appelle les WebServices de Sharepoint pour construire le lien final et donc perd du temps au passage.

C’est ce qui est arrivé chez l’un de nos clients et après de nombreux allers-retours avec le support Microsoft, un fix est sorti. Ca fait donc chaud au coeur de savoir que Bewise (et notamment Olivier) a apporté sa pierre à l’édifice avec ce correctif.

Trève de bavardage, les infos sur ce fix. Il est présent dans le CU6 de SQL Server.

- http://support.microsoft.com/kb/2492329/en-usFIX: Decrease in rendering performance for SQL Server 2008 R2 Reporting Services in SharePoint Integrated mode when a report contains expressions in "Go to URL" actions

Tout cela milite pour l’importance et l’efficacité du support Microsoft et du programme Connect.

Liste des rapports SSRS

3 août 2010

J’ai souvent besoin lors d’une mission de conseil de faire un petit état des lieux des rapports qui se trouvent sur une instance SSRS.

Pour dresser cette liste rapidement, il suffit de jouer la requête suivante sur votre base de données ReportServer :

SELECT [Path]

      ,[Description]FROM [ReportServer].[dbo].[Catalog]WHERE Type = 2

Et pourquoi ne pas en faire un rapport ;-)

Compatibilités et versions de Report Builder

19 juin 2010

En ces temps de nouvelles versions (je vous rappelle que SQL Server 2008 R2 est sorti il y a quelques semaines), un petit point sur Report Builder.

Ci-dessous, la matrice de compatibilité. Pour un rapport réalisé avec tel version d’outil, sur quelle version le déployer…

SSRS 2008

SSRS 2008 R2

Report Builder 2.0

OK

OK

Report Builder 3.0

KO

OK

BIDS* 2008

OK

OK

BIDS* 2008 R2

OK
(avec la bonne configuration)

OK

BIDS : Business Intelligence Development Studio (en fait, juste les template de projet BI pour Visual Studio :) )

Pour configurer BIDS, il suffit d’aller dans les propriétés du projet :

propriete report project 

Et dans la série des liens utiles, les versions Stand Alone de Report Builder sont disponibles à ces adresses :


Suivre

Get every new post delivered to your Inbox.

Joignez-vous à 203 followers