Changer le propriétaire d'un abonnement SSRS

Changer le propriétaire d’un abonnement SSRS

En début de mois, j’ai changé de travail. J’ai quitté la société qui m’employait depuis 2 ans.Ce changement m’a rappelé une situation à laquelle j’ai été confronté lors du départ d’un ancien collègue.

Quelques jours après qu’il ait quitté la société, je me suis aperçu que tous ses abonnements SSRS étaient en erreur. En effet, son compte dans l’Active Directory n’existait plus. Heureusement que Kankuru sait aussi alerter les erreurs de fonctionnement des abonnements dans Reporting Services, sinon j’aurais appris ce problème lorsqu’un utilisateur se serait plaint de ne plus recevoir ses rapports SSRS.

Interface WEB

En allant voir de plus près un des abonnement, j’ai vu que le propriétaire de l’abonnement était le login Windows du créateur et qu’il n’y avait pas de solution pour changer ce propriétaire via l’interface graphique. (NB : le propriétaire ne s’affiche pas dans l’interface si votre login est le propriétaire de l’abonnement)

Le propriétaire n'est pas modifiable via l'interface de management

Le propriétaire n’est pas modifiable via l’interface de management

En T-SQL

Mais pas de panique, on peut changer le propriétaire d’un abonnement SSRS directement en SQL dans la base de données Reporting Services.

DECLARE @ANCIEN uniqueidentifier
DECLARE @NOUVEAU uniqueidentifier

SELECT @ANCIEN = UserID
FROM dbo.Users
WHERE UserName = 'KANKURU.FRbob'

SELECT @NOUVEAU = UserID
FROM dbo.Users
WHERE UserName = 'KANKURU.FRgreg'

IF @NOUVEAU IS NOT NULL AND @ANCIEN IS NOT NULL
BEGIN
    UPDATE dbo.Subscriptions
    SET OwnerID = @NOUVEAU
    WHERE OwnerID = @ANCIEN
END

Bonnes pratiques

Plutôt que de changer manuellement le propriétaire sur les abonnements de vos anciens collègues par votre login, utilisez plutôt un compte de service. Vous quitterez surement vous aussi votre société un jour ou l’autre.

Pour ne plus avoir à faire cette manipulation, créez un compte de service windows, puis modifiez le propriétaire de chaque abonnement avec ce compte dans un job planifié dans l’agent SQL tous les jours.
SSRS erreur export excel xml illégal

SSRS – Erreur Export Excel – Caractère XML illégal

J’aime bien SSRS ! Certains puristes de la BI pensent que SSRS est amené à disparaitre ou à être beaucoup moins utilisé mais personnellement, je trouve que SSRS est très pratique. Je m’en sers souvent pour générer des fichiers Excel automatiquement.

Je suis tombé régulièrement sur cette erreur lors d’un export d’un rapport en Excel :

ssrs_erreur_export_excel_1

SSRS erreur export excel xml illégal

En fait, cette erreur est lié à des caractères ASCII spécifiques. Peut-être qu’il existe un moyen de contournement plus propre que celui que je vous propose mais je m’en suis sorti en écrivant une méthode VB.net embarquée dans mon rapport SSRS. Voici comment le mettre en place.

Ouvrez la fenêtre Report Properties :

ssrs report propertiesPuis, dans l’onglet Code, collez le script qui supprime les caractères spécifiques :

ssrs_code

Dans le rapport, il convient ensuite d’afficher le texte contenant les caractères spéciaux en utilisant la méthode DelChrChiant.

ssrs_expression

Grâce à cette méthode, mes exports Excel fonctionnent même si les performances sont forcément un peu dégradées.

Voici le code complet :

Public Function DelChrChiant (ByVal s As String) As String
Dim strBuilder As New System.Text.StringBuilder(s)
   strBuilder.Replace(chr(1), "")
   strBuilder.Replace(chr(2), "")
   strBuilder.Replace(chr(3), "")
   strBuilder.Replace(chr(4), "")
   strBuilder.Replace(chr(5), "")
   strBuilder.Replace(chr(6), "")
   strBuilder.Replace(chr(7), "")
   strBuilder.Replace(chr(8), "")
   strBuilder.Replace(chr(9), "")
   strBuilder.Replace(chr(10), "")
   strBuilder.Replace(chr(11), "")
   strBuilder.Replace(chr(12), "")
   strBuilder.Replace(chr(13), " ")
   strBuilder.Replace(chr(14), "")
   strBuilder.Replace(chr(15), "")
   strBuilder.Replace(chr(16), "")
   strBuilder.Replace(chr(17), "")
   strBuilder.Replace(chr(18), "")
   strBuilder.Replace(chr(19), "")
   strBuilder.Replace(chr(20), "")
   strBuilder.Replace(chr(21), "")
   strBuilder.Replace(chr(22), "")
   strBuilder.Replace(chr(23), "")
   strBuilder.Replace(chr(24), "")
   strBuilder.Replace(chr(25), "")
   strBuilder.Replace(chr(26), "")
   strBuilder.Replace(chr(27), "")
   strBuilder.Replace(chr(28), "")
   strBuilder.Replace(chr(29), "")
   strBuilder.Replace(chr(30), "")
   strBuilder.Replace(chr(31), "")
   Return strBuilder.ToString()
End Function

Et vous, comment gérez vous cette problématique ?