web-dev-qa-db-fra.com

Comment obtenir des rapports pour voir les sources de données partagées

Je cours 2008 R2

J'ai toute une série de rapports que je dois charger dans RS. Ceux-ci ont été développés et envoyés à notre société par un tiers. Ils se connectent à une source de données partagée. J'ai téléchargé les rapports dans des dossiers qui les séparaient par fonction. Le problème est qu'ils ne voient pas la source de données pour laquelle les rapports sont écrits. J'ai créé une source de données partagée et pointé le rapport dessus. La connexion a été testée avec succès, mais lorsque j'ai exécuté le rapport, j'ai continué à recevoir l'erreur suivante:

"Le serveur de rapports ne peut pas traiter le rapport ou le dataset partagé. La source de données partagée 'dsMyObject' pour le serveur de rapports ou SharePoint n'est pas valide. Accédez au serveur ou au site et sélectionnez une source de données partagée. (RsInvalidDataReference)"

Lorsque j'utilise exactement les mêmes informations d'identification dans une source de données incorporée, le rapport est exécuté et, une fois que je l'ai exécuté, je peux le modifier pour qu'il corresponde à la source de données partagée que j'ai créée. 

Mon problème est que ce processus est trop inefficace. De nombreux rapports, ainsi que de nombreux serveurs supplémentaires, doivent également basculer manuellement pour que la source de données puisse basculer manuellement.

J'ai remarqué que lorsque je parcourais la liste des sources de données, je voyais celles que j'avais créées avec le nom du DS sur la première ligne et l'emplacement sur la suivante (http: // [Serveur]/reports/[Data Source Folder]) tandis que les DS créés par le fournisseur portent le nom du DS sur les deux lignes. Cela me porte à penser qu'il existe un moyen de charger le DS dans SSRS avec le même nom que celui utilisé par le fournisseur pour permettre aux rapports de les utiliser automatiquement. Je ne peux rien trouver qui me dise comment faire cela, alors je pose cette question ici. Comment obtenir des rapports pré-écrits pour voir une source de données partagée sur le serveur sur lequel je déploie les rapports?

Merci d'avance,

16
NomadicDeveloper

C'est un gros défaut du SSRS. Lorsque des rapports et des sources de données sont créés dans SSRS, des identificateurs uniques leur sont attribués dans la base de données ReportServer. Lorsque les rapports sont téléchargés, ils ne reconnaissent pas une source de données existante portant le même nom que celui avec lequel le rapport a été créé.

Une solution consiste à utiliser l'utilitaire rs.exe fourni avec SSRS. Il peut être utilisé pour des tâches en bloc, y compris la définition de métadonnées de source de données sur des rapports. Voir le lien ci-dessous pour plus d'informations techniques.

Utilitaire RS

12
Brian Knight

Je sais que la question est très ancienne, mais je l’ai trouvée car j’avais été confrontée à un problème similaire au cours des deux derniers jours. Cependant, selon mon expérience, la solution était plus simple - je vais donc l'ajouter au cas où quelqu'un d'autre le rechercherait à l'avenir.

Vous devez créer votre source de données before vous déployez vos rapports dans RS. Voici ce qui m'est arrivé:

1) Je les ai d'abord déployés avant d'ajouter une source de données, et ils ne fonctionnaient pas: ni depuis l'application sur laquelle je travaille, ni depuis RS

2) J'ai ensuite créé une source de données, mais cela ne modifiait en rien les rapports existants. J'ai pu configurer certaines d'entre elles et les diriger vers la nouvelle source de données, et cela a fonctionné. Si vous voulez le faire en bloc, vous pouvez probablement utiliser l'utilitaire RS comme suggéré ci-dessus ou probablement quelque chose comme cela , mais je ne les ai pas essayées.

3) J'ai essayé de redéployer les rapports dans RS, mais apparemment, RS n'écrase pas les éléments qui n'ont pas changé, car les rapports redéployés n'ont toujours pas détecté la source de données.

4) J'ai ensuite supprimé les rapports existants et les redéployé - cela a été corrigé et ils ont immédiatement récupéré la source de données.

15
Boris

Mettez à jour un rapport manuellement avec une source de données partagée. Dans la table [ReportServer].[dbo].[DataSource], notez la valeur "Lien" pour ce rapport, puis mettez simplement à jour la réinitialisation contenant la source de données dans la colonne Name

update [ReportServer].[dbo].[DataSource]
set Link = '01B758F2-B597-43BE-A90F-416DF3CDA396'
where Name = 'PNLDS'
and Link is NULL
4
Schmed

J'ai trouvé que le moyen le plus simple de résoudre ce problème consistait simplement à créer un nouveau rapport utilisant réellement la source de données partagée. Dans SSRS2012/VS2010, la première page de l'assistant demande s'il faut utiliser une "source de données partagée" ou créer une "nouvelle source de données". En prenant la première option (et en continuant de créer le rapport factice et de le sauvegarder), un RDL contenant une section entre la section et la section, ressemble à ceci:

  <DataSources>
    <DataSource Name="shared_datasource_name">
      <DataSourceReference>shared_datasource_name</DataSourceReference>
      <rd:SecurityType>None</rd:SecurityType>
      <rd:DataSourceID>f00b5045-1a8c-44be-952b-cca1ce9c57d6</rd:DataSourceID>
    </DataSource>
  </DataSources>

Je viens de copier-coller cette section dans mon rapport RDL prévu au même endroit. Il utilise volontiers cette source de données lors de la prévisualisation et lors de son redéploiement.

3
IronRod

Appréciez un ancien fil de discussion, mais j’essayais de savoir si SSRS pouvait indiquer la source de données partagée qu’il utilise afin de pouvoir ajouter un avertissement à un rapport SSRS au cas où il pointait toujours sur une mauvaise source de données lors du déploiement. La solution que j'ai proposée ne fonctionne que si vous utilisez des serveurs différents pour Dev/UAT/Prod, mais vous pouvez coller @@SERVERNAME dans votre script tsql. 

Je l'ai fait dans une déclaration de cas que je peux bonger sur mes rapports 

select case @@SERVERNAME when 'Prodserver' then '' 
else 'WARNING: This report is not looking at production data!' end as ServerWarning

Fonctionne assez bien pour moi!

1
Jim

Dans mon cas, j'ai dû cliquer sur la flèche déroulante située à droite du rapport dans SSRS, sélectionner "Gérer", puis "Sources de données", puis rechercher l'emplacement de la source de données partagée que le rapport doit utiliser.

1
B. Clay Shannon

C'est certainement un gros inconvénient de SSRS. Beaucoup de bonnes réponses postées ici qui conviennent à différents scénarios, compétences et outils. J'en ajoute un autre à l'aide de la classe Sys.Net.WebServiceProxy sur Powershell:

# Create WebServiceproxy object
[string] $WebServiceUri="http://localhost/ReportServer/ReportService2010.asmx?wsdl"
$proxy=New-WebServiceProxy -uri $WebServiceUri -UseDefaultCredentails

# Define required data types (DataSource and DataSourceReference) and instantiate
$typeds=($proxy.gettype().namespace) + '.DataSource'
$ds=new-object -TypeName $typeds

$typedsref=($proxy.gettype().namespace) + '.DataSourceReference'
$reference=new-object -TypeName $typedsref

# Set data source object with reference and name
$reference.Reference="/Data Sources/DStest" # path/name of the data source
$ds.Item=$reference
$ds.Name="DStest" # name of the data source on the report

# Repoint data source on report
$ReportPath="/Reports/TestReport" # path/name of the report
$proxy.SetItemDataSources($ReportPath, $ds)

Explication:

L'idée principale est d'utiliser la méthode SetItemDataSources (x, y) de la classe Sys.Net.WebServiceProxy pour définir la source de données y.name sur le rapport x afin qu'elle pointe vers la référence de la source de données y.item. Dans notre cas, le rapport s'appelle TestReport, situé dans le dossier "/ Reports" qui fait référence à la source de données "/ Data Sources/DSTest" sous le nom "DStest". Pour effectuer le repoint, nous devons créer une référence à la source de données ($ ds) pour laquelle nous devions définir les types de données DataSource et DataSourceReference en les dérivant de l’espace de noms de l’objet WebServiceProxy ($ Procuration)

1
Jayvee
I was able to bulk update and fix the problem by updating the data source link using the T-SQL below.
begin tran
update dbo.DataSource
set Link = c.ItemID 
from dbo.DataSource ds 
inner join dbo.Catalog c
on ds.Name = c.Name
and c.Type = 5
where ds.link is null

select ds.Link oldlink, c.ItemID 
from dbo.DataSource ds 
inner join dbo.Catalog c
on ds.Name = c.Name
and c.Type = 5
--where ds.link is null


select *
from dbo.DataSource ds 
where ds.link is null

rollback tran
-- commit tran 
http://tsqlblog.blogspot.co.uk/2011/05/rsinvaliddatasourcereference-on.html
0
William Tait