Reporting Services 2017 permet aux utilisateurs d’ajouter des commentaires

Dans son CTP 2.1 (17 mai 2017), Microsoft a ajouté la capacité de commenter sur les rapports SSRS du portail natif :

Comments are now available for reports. Comments allow you to add perspective to what is in a report and collaborate with others in your organization. You can also include attachments with your comment.

Je n’avais pas trouvé de captures d’écran qui démontrait la nouvelle capacité. Nous avons donc installé le CTP pour pouvoir se faire une idée sur cette nouvelle capacité.

Voici de quoi cela a l’air :

Un nouveau bouton apparaît en haut à droite :

image

Lorsqu’on clique dessus, on peut saisir le commentaire et téléverser un fichier (j’ai choisi une image et ça n’a pas fonctionné) :

image

On voit le commentaire une fois ajouté (et l’attachement qui ne fonctionne pas) :

image

Un second commentaire :

image

On peut répondre à un commentaire en particulier :

image

On peut éditer ou supprimer un commentaire existant :

image

Est-ce que vous pensez que cette fonctionnalité est utile?

Power BI Report Server est annoncé!

En janvier 2017, Microsoft avait rendu disponible une version spéciale de Reporting Services permettant de tester une version limitée de Power BI on-premises. À ce moment, il n’était pas encore établi comment il serait possible d’acheter cette nouvelle capacité.

Avec l’annonce de Power BI Premium, Microsoft a finalement annoncé la forme et la manière d’obtenir cette nouvelle fonctionnalité.

La forme

Microsoft a créé un nouveau produit appelé Power BI Report Server. Il s’agit d’un super-ensemble de Reporting Services, c’est à dire qu’il a les mêmes capacités que ce dernier en plus de supporter Power BI on-premises :

Power BI Report Server is a superset of SQL Server Reporting Services. A Power BI Report Server supports Power BI reports, *plus* all the features of an SSRS report server. So if you have a Power BI Report Server, you don’t necessarily need a separate SSRS report server.

Bref, à partir de la même instance du Report Server, il sera possible de déservir du Power BI, des rapports Mobiles (Data Zen) et des rapports paginés (*.rdl).

La manière de l’obtenir

Il y a deux manières d’obtenir ce produit :

  • En s’abonnant à Power BI Premium (minimum 6100$ / mois) on obtient automatiquement le droit d’utiliser le même nombre de “cores” on-premises ;
  • En ayant une licence SQL Server Enterprise per-Core ET un abonnement à l’assurance logiciel (active Software Assurance).

Dans tous les cas, une licence Power BI Pro sera requise pour chaque utilisateur pouvant publier du contenu …

Schéma comparatif

Ce schéma, tiré de cet article, résume bien les capacités de chaque option. L’offre Power BI Premium utilise le Power BI Service. On voit que Power BI Report Server sera fréquemment mis à jour contrairement à SQL Server.

PowerBIReportServer

Questions et réponses

Licence Power BI Pro

clip_image001

Fréquence des mises à jour

clip_image001[5]

Disponibilité d’une version d’essai et capacités initiales

image

image

Assurance logicielle nécessaire – même pour la version SQL Server 2017 à venir

clip_image001[9]

Fonctionalités orientés vers les rapports seulements

image

image

Références

Introducing Power BI Report Server for on-premises Power BI report publishing
https://blogs.msdn.microsoft.com/sqlrsteamblog/2017/05/03/introducing-power-bi-report-server-for-on-premises-power-bi-report-publishing/

Introducing Power BI Report Server
https://powerbi.microsoft.com/fr-fr/report-server/

Microsoft accelerates modern BI adoption with Power BI Premium
https://powerbi.microsoft.com/fr-fr/blog/microsoft-accelerates-modern-bi-adoption-with-power-bi-premium/

What Does Power BI Premium Mean for You?
http://prologika.com/what-does-power-bi-premium-mean-for-you/

Power BI Premium, Report Server, Apps and API
http://www.jamesserra.com/archive/2017/05/power-bi-premium-report-server-apps-and-api/

Changement de comportement important dans Reporting Services intégré en mode SharePoint

Depuis toujours, SSRS en mode intégré à SharePoint affiche un message à l’utilisateur lorsque celui-ci change la valeur d’un paramètre. Par exemple, dans le rapport suivant, si je change la valeur du paramètre A de 1 à 2, ce qui a pour effet de changer la liste des valeurs possibles dans le paramètre B, la zone de gauche se rafraîchit avec le message “Report parameter values must be specified before the report can be displayed. Choose parameter values in the parameters area and click the Apply button.” ou “Des valeurs de paramètre de rapport doivent être spécifiées pour que le rapport puisse s’afficher. Choisissez des valeurs de paramètre dans la zone de ce nom, puis cliquez sur le bouton Appliquer.” en français :

image

image

image

Et bien, depuis ces mises à jour, un développeur a décidé que cela n’étais plus une fonctionnalité mais plutôt un bogue qu’il fallait au plus vite erradiquer :

Cumulative Update 1 for SQL Server 2014 SP1
Cumulative Update 6 for SQL Server 2014
Cumulative Update 4 for SQL Server 2012 SP2

Donc, dès l’application de ces mises à jour, voici ce que l’utilisateur va obtenir suite à un changement de paramètre :

image

Le peu de détail sur le sujet se trouve sur le KB3028226 :

image

Assume that you have a report that has two or more parameters in Microsoft SQL Server 2012 Reporting Service (SSRS 2012) or SQL Server 2014 Reporting Service (SSRS 2014) in SharePoint 2010 integration mode, and the parameters have default values that are defined by function expressions. For example, the default value of Parameter1 is set by the Today () function, and Parameter2 uses another function expression as its default value. When you open the report on a SharePoint site and then try to change the value of Parameter1 or Parameter2, you receive the following error message:

Report parameter values must be specified before the report can be displayed. Choose parameter values in the parameters area and click the Apply button.

Notez qu’à moins que vous n’installiez les Cumulative Update à mesure qu’ils sortent, vous ne remarquerez ce comportement qu’à la suite de l’installation du SP3 de SQL Server 2012 ou du SP2 de SQL Server 2014.

À notre point de vue ce message permettait de clarifier l’utilisation de la zone de paramètre. Nous pensons que Microsoft aurait dû ajouter une option permettant de l’utliser ou non et peut-être même de définir le texte à utiliser. On peut toujours rêver!

Et vous, aimez-vous mieux le nouveau comportement?

 

 

Bogue avec SSRS (2012-2014) en mode intégré à SharePoint 2013

Nous avons découvert un bogue avec Reporting Services intégré à SharePoint 2013. Le bogue est présent avec SSRS 2012 SP2 / Add-in SP2 et SSRS 2014 SP2 / Add-in 2014.

Symptôme

Le menu Actions de la barre d’outil ne respecte pas la langue du site SharePoint où le rapport a été déployé :

Bug

Dans cet exemple, le site est en anglais ainsi que toute l’interface de Reporting Services … sauf les entrées du menu Actions –> Export de la barre d’outils.

Le comportement

Ce menu est dynamiquement chargé lorsqu’un utilisateur l’ouvre :

clip_image002

La réponse HTTP est un gros bloc de texte, contenant une série de <ie:menuitem  pour chaque entrée du menu.

Le comportement erroné est le suivant : le premier accès à ce menu, par n’importe quel utilisateur de l’application Web, détermine la langue qui sera utilisée pour ces entrées de menu. Ainsi, si après un IIS Reset vous lancez un rapport SSRS sur un site français et que vous ouvrez le menu Actions, les entrées seront en français (ce qui est bon).  Mais par la suite, elles seront en français même pour des rapports hébergés dans un site en anglais …

L’explication

Le problème c’est que Microsoft a utilisé une cache mémoire (et statique) pour ces libellés …

La classe Microsoft.ReportingServices.SharePoint.UI.WebParts.ActionMenu du Dll Microsoft.ReportingServices.SharePoint.UI.WebParts.dll (GAC) utilise une cache statique :

namespace Microsoft.ReportingServices.SharePoint.UI.WebParts
{
internal sealed class ActionMenu : CompositeControl, IScriptControl
{
(…)
private static IDictionary<string, string> m_localizedRenderingExtensions;

   (…)

private static string GetLocalizedRenderingExtension(string extensionName)
{
  if (ActionMenu.m_localizedRenderingExtensions == null)
      {
ActionMenu.m_localizedRenderingExtensions = (IDictionary<string, string>) new Dictionary<string, string>();
ActionMenu.m_localizedRenderingExtensions.Add(« XML », ReportViewerStrings.XmlRenderingExt);
ActionMenu.m_localizedRenderingExtensions.Add(« CSV », ReportViewerStrings.CsvRenderingExt);
ActionMenu.m_localizedRenderingExtensions.Add(« PDF », ReportViewerStrings.PdfRenderingExt);
ActionMenu.m_localizedRenderingExtensions.Add(« EXCELOPENXML », ReportViewerStrings.ExcelRenderingExt);
ActionMenu.m_localizedRenderingExtensions.Add(« IMAGE », ReportViewerStrings.ImageRenderingExt);
ActionMenu.m_localizedRenderingExtensions.Add(« WORDOPENXML », ReportViewerStrings.WordRenderingExt);
ActionMenu.m_localizedRenderingExtensions.Add(« MHTML », ReportViewerStrings.MhtmlRenderingExt);
}
if (!string.IsNullOrEmpty(extensionName) && ActionMenu.m_localizedRenderingExtensions.ContainsKey(extensionName))
return ActionMenu.m_localizedRenderingExtensions[extensionName];
return (string) null;
}

Ce qu’on peut faire

J’ai signalé ce bogue sur Microsoft Connect si vous souhaitez voter.

Au moins vous aurez une explication à donner à vos utilisateurs …

Nouvelles fonctionnalités de l’outil de QA SYNTELL pour Reporting Services (SSRS)

Il y a eu beaucoup de changements dans l’outil de QA SYNTELL depuis la parution des articles suivants (2011) sur ce blogue:

Pourquoi nous avons développé un outil de test automatisé pour Reporting Services

Présentation de notre outil de test automatisé pour Reporting Services

Voici maintenant la matrice des types de jeux d’essais / type de tests supportés:

Type de jeu d’essai Intégrité Performance Multi threading Non régression Sécurité Applicative
Rapports SSRS

X

X

X

X

X

Requêtes SQL et MDX

X

X

X

X

X

Applications Web

X

X

X

X

Plus de détails:

  1. Fiche technique du produit
  2. Liste détaillée des fonctionnalités

Cet outil est actuellement utilisé chez plusieurs de nos clients pour effectuer:

  1. De la surveillance: vérification constante du bon fonctionnement des serveurs de données et applicatifs (avec notification par courriel);
  2. De l’éveil : réchauffer des serveurs applicatifs pour s’assurer que les performances seront au rendez-vous.

Et à l’interne pour faire:

  1. Des tests d’intégrité: vérification qu’aucun élément ne retourne d’erreur lors de son exécution;
  2. Des tests de performance: plusieurs faciliants pour identifier les composantes les plus lentes d’une application et faire le suivi de la performance globale d’une livraison à l’autre;
  3. Des tests de charge: s’assurer que l’application n’a pas de défaillance en multithread et qu’il n’y a pas de dégradation anormale de la performance;
  4. Des tests de non régression pour les requêtes: confirmer que les requêtes existantes retournent les même résultats lors d’une modification aux bases de données qui ne devraient pas modifier ceux-ci;
  5. Des tests de non régression sur les rapports: comparaison de l’exécution d’un jeu d’essai de rapports SSRS avec une exécution précédente. Cela se fait visuellement sous forme d’image et aussi au niveau des données XML générées par les rapports.
  6. Des tests de sécurité applicative ou personnalisation: les différentes jeux d’essai peuvent être exécutés avec différentes identités. Cela permet de tester la sécurité applicative ou la personnalisation propre à un groupe d’utilisateurs.

Une des fonctionnalités les plus appréciée de nos utilisateurs est celle qui permet de faire des tests comparatifs (non régression) sur l’exécution de rapports SSRS. Le processus est le suivant:

  1. Un analyste fonctionnel navigue dans l’application Reporting Services afin de créer un jeu d’essai significatif;
  2. L’outil de QA importe ce jeu d’essai à partir des journaux SSRS (ExecutionLogStorage) avec la possibilité d’exclure certains paramètres qui pourraient compromettre la pérennité du jeu d’essai;
    image
  3. L’analyste lance l’exécution du jeu d’essai en stockant les résultats dans la base de données (MHTML, TIFF et XML de chaque rapport);
    image
  4. Une capture instantanée (snapshot) est créée à partir de cette exécution: c’est une image figée dans le temps;
    image
  5. Une nouvelle version de rapports est publiée;
  6. Le même jeu d’essai est réexécuté sur ces nouveaux rapports;
  7. La commande permettant de comparer une exécution avec une capture instantanée est utilisée:
    image
    Il est possible de comparer un sous-ensemble à la fois:
    image
    Si un noeud est en rouge c’est qu’il y a une différence. Le programme affiche le deux exécutions (MHTML, TIFF, XML) et la différence dans le bas (visuellement pour TIFF, et texte pour XML):
    image
    Comparaison XML:
    image
    Un rapport peut être exporté sur plusieurs pages TIFF, chacune étant comparée:
    image

Imaginez tout le temps qui peut être épargné en laissant l’outil travailler pour vous. Augmentez votre confiance lors de vos livraisons!

Pour obtenir plus d’information ou pour planifier une démonstration, n’hésitez pas à entrer en contact avec nous: contact@syntell.com.

Plusieurs lecteurs de ce blogue viennent d’en dehors du Canada, une séance WebEx est possible.

Beaucoup d’actions dans Reporting Services 2016

Je suis de retour d’un mandat à temps plein de juillet à décembre à la ville de Québec. En plus de faire de l’analyse organique j’étais aussi responsable du développement en Microsoft Windows Presentation Framework (WPF), Entity Framework avec de la communication réseau TCP et du multi-threading. C’était dans le cadre du projet du Gestionnaire Artériel de la ville de Québec.

Pendant mon absence, il s’est passé beaucoup de choses du côté de Reporting Services. D’ici à ce que j’aie plus de temps, voici quelques liens:

Microsoft Business Intelligence – our reporting roadmap
SQL Server 2016: Everything built-in
Position report parameters the way you want
A closer look to report parameters position
Report rendering for modern browsers
Integrate Reporting Services into SharePoint 2016
Introducing mobile reports and a brand-new web portal
How to create Mobile Reports and KPI’s in SQL Server Reporting Services 2016 An end-to-end walkthrough
Download Microsoft® SQL Server® 2016 CTP3.1 Report Builder
Download Microsoft SQL Server Mobile Report Publisher (Public Preview 1)

Je devrais retrouver du temps pour garder ce blogue en vie,

Générer un hyperlien (url) absolu à partir de Reporting Services (SSRS)

Il est parfois nécessaire de générer un lien vers un rapport SSRS en utilisant Go to URL plutôt que Go to report:

image

Afin de ne pas coder en dur le protocole (ex. http), le serveur, la collection de sites (ex. /sites/sitecol), le site (ex. /sites/sitecol/siteparent/sitechild) et la librairie de documents (ex. /sites/sitecol/siteparent/sitechild/doclib), nous avons accès aux variables Globals!ReportFolder et Globals!ReportServerUrl.

La variable ReportServerUrl change si on est en design-time (BIDS / SSDT-BI) et une fois dans SharePoint, selon la version de Reporting Services.

Environnement

Valeur

BIDS / SSDT-BI (vide)
SSRS 2008 dans SharePoint Url vers le serveur de rapport.
Ex. http://server/ReportServer
SSRS 2012 http://server/sites/sitecol/siteparent/sitechild/_vti_bin/ReportServer

Le lien vers un rapport SSRS, intégré en mode SharePoint, doit ressembler à ceci:

http://server/sites/sitecol/siteparent/sitechild/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl=/sites/sitecol/siteparent/sitechild/Reports/RPT-1.rdl

Puisque la valeur de la variable change ReportServerUrl, cela complique la vie du développeur de rapports.

Cette fonction VB.Net, qui peut directement être placée dans la section code d’un rapport, peut vous aider:

Public Function GetReportUrl(Optional ByVal sReportName As String = Nothing) As String
  Dim sUseReportFolder    As String
  Dim sUseReportServerUrl  As String
  Dim sSiteUrl            As String
  Dim sRelReportUrl       As String
  Dim sUseReportName      As String

  sUseReportFolder = Iif(String.IsNullOrEmpty(Report.Globals.ReportFolder), "http://server/sites/sitecol/site/doclib", Report.Globals.ReportFolder)
  sUseReportServerUrl = Iif(String.IsNullOrEmpty(Report.Globals.ReportServerUrl), "http://server/sites/sitecol/site/_vti_bin/ReportServer", Report.Globals.ReportServerUrl)
  sUseReportServerUrl = sUseReportServerUrl.Replace("_vti_bin/ReportServer", "")
  
  sSiteUrl = sUseReportFolder.Substring(0, sUseReportFolder.LastIndexOf("/"))
  sRelReportUrl = sUseReportFolder.Substring(sUseReportServerUrl.IndexOf("/", sUseReportServerUrl.IndexOf("//") + 2))
  sUseReportName = Iif(String.IsNullOrEmpty(sReportName), Report.Globals.ReportName, sReportName)
  
  Return String.Format("{0}/_layouts/ReportServer/RSViewerPage.aspx?rv:RelativeReportUrl={1}/{2}", sSiteUrl, sRelReportUrl, sUseReportName) 
End Function

Vous pouvez l’appeler sans paramètre pour créer un lien vers le rapport courant:

=Code.GetReportUrl()

Ou en passant le nom d’un autre rapport:

=Code.GetReportUrl(« Rpt-01.rdl »)

Le code teste si les variables sont vides et si c’est le cas, des valeurs par défaut sont utilisées. Cela permet de tester directement dans BIDS / SSDT-BI.

C’est un problème qui revient souvent.