it-swarm.com.de

So erhalten Sie Berichte zum Anzeigen freigegebener Datenquellen

Ich lasse 2008 R2 laufen

Ich habe eine ganze Reihe von Berichten, die ich in RS laden muss. Diese wurden von Dritten entwickelt und an unser Unternehmen gesendet. Sie stellen eine Verbindung zu einer freigegebenen Datenquelle her. Ich habe die Berichte in Ordner hochgeladen, die sie nach Funktionen getrennt haben. Das Problem ist, dass die Datenquelle, für die die Berichte geschrieben wurden, nicht angezeigt wird. Ich habe eine freigegebene Datenquelle erstellt und den Bericht darauf verwiesen. Die Verbindung wurde erfolgreich getestet, aber als ich den Bericht ausführte, wurde weiterhin die folgende Fehlermeldung angezeigt:

"Der Berichtsserver kann den Bericht oder das freigegebene Dataset nicht verarbeiten. Die freigegebene Datenquelle 'dsMyObject' für den Berichtsserver oder SharePoint ist ungültig. Navigieren Sie zum Server oder zur Site und wählen Sie eine freigegebene Datenquelle aus. (RsInvalidDataReference)"

Wenn ich in einer eingebetteten Datenquelle genau dieselben Anmeldeinformationen verwendet habe, wird der Bericht ausgeführt. Nachdem ich ihn zur Ausführung gebracht habe, kann ich ihn wieder in die von mir erstellte freigegebene Datenquelle ändern und er wird problemlos ausgeführt.

Mein Problem ist, dass dieser Prozess zu ineffizient ist. Ich habe zu viele Berichte und zu viele weitere Server, um diese zu rollen, und ich muss die Datenquelle manuell hin und her schalten, damit sie funktioniert.

Ich habe festgestellt, dass ich beim Durchsehen der Liste der Datenquellen diejenigen sehe, die ich mit dem Namen des DS in der ersten Zeile und dem Speicherort auf der nächsten (http: // [Server]/erstellt habe. reports/[Data Source Folder]), während die vom Anbieter erstellten DS in beiden Zeilen den Namen DS haben. Dies lässt mich glauben, dass es eine Möglichkeit gibt, das DS in SSRS mit demselben Namen wie der vom Anbieter verwendete zu laden, damit die Berichte diese automatisch verwenden können. Ich kann nichts finden, was mir sagt, wie ich das machen soll. Deshalb stelle ich diese Frage hier. Wie erhalte ich vorab geschriebene Berichte, um eine freigegebene Datenquelle auf dem Server anzuzeigen, auf dem ich die Berichte bereitstelle?

Danke im Voraus,

16

Dies ist ein großes Manko von SSRS. Wenn Berichte und Datenquellen in SSRS erstellt werden, werden ihnen eindeutige Bezeichner in der ReportServer-Datenbank zugewiesen. Beim Hochladen von Berichten wird keine vorhandene Datenquelle mit demselben Namen erkannt, mit dem der Bericht erstellt wurde.

Eine Möglichkeit, dies zu umgehen, besteht darin, das mit SSRS gelieferte Dienstprogramm rs.exe zu verwenden. Es kann für Massenaufgaben verwendet werden, einschließlich des Festlegens von Datenquellenmetadaten in Berichten. Weitere technische Informationen finden Sie unter dem folgenden Link.

RS Utility

12
Brian Knight

Ich weiß, dass dies eine sehr alte Frage ist, aber ich bin darauf gestoßen, als ich in den letzten zwei Tagen vor einem ähnlichen Problem stand. Meiner Erfahrung nach war die Lösung jedoch einfacher - ich füge sie daher hinzu, falls in Zukunft jemand anderes danach sucht.

Sie müssen Ihre Datenquelle erstellen, bevor Sie Ihre Berichte in RS bereitstellen. Folgendes ist für mich passiert:

1) Ich habe sie zuerst bereitgestellt, bevor ich eine Datenquelle hinzugefügt habe, und sie haben nicht funktioniert: weder von der Anwendung, an der ich arbeite, noch von RS

2) Ich habe dann eine Datenquelle erstellt, die jedoch keine Auswirkungen auf vorhandene Berichte hatte. Ich konnte einige von ihnen konfigurieren und auf die neue Datenquelle verweisen, und das hat funktioniert. Wenn Sie dies in großen Mengen tun möchten, können Sie wahrscheinlich das oben vorgeschlagene RS-Hilfsprogramm verwenden oder wahrscheinlich so etwas , aber ich habe diese nicht ausprobiert.

3) Ich habe versucht, die Berichte erneut in RS bereitzustellen. Offensichtlich überschreibt RS jedoch keine Elemente, die sich nicht geändert haben, da die erneut bereitgestellten Berichte die Datenquelle immer noch nicht abgerufen haben

4) Ich habe dann vorhandene Berichte gelöscht und erneut bereitgestellt - dies hat den Fehler behoben und die Datenquelle wurde sofort abgerufen.

15
Boris

Aktualisieren Sie einen Bericht manuell mit der freigegebenen Datenquelle. Notieren Sie in der Tabelle [ReportServer].[dbo].[DataSource] den Wert "Link" für diesen Bericht und aktualisieren Sie dann einfach die Zurücksetzung, die die Datenquelle in der Spalte Name enthält

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

Ich fand den einfachsten Weg, dies zu beheben, indem ich einfach einen neuen Bericht erstellte, der die gemeinsam genutzte Datenquelle verwendet. In SSRS2012/VS2010 werden Sie auf der ersten Seite des Assistenten gefragt, ob Sie eine "freigegebene Datenquelle" verwenden oder eine "neue Datenquelle" erstellen möchten. Wenn Sie die erste Option auswählen (und mit dem Erstellen und Speichern des Dummy-Berichts fortfahren), wird eine RDL erstellt, die einen Abschnitt zwischen dem Abschnitt und dem Abschnitt enthält.

  <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>

Ich habe diesen Abschnitt gerade in meinen geplanten RDL-Bericht an derselben Stelle kopiert. Diese Datenquelle wird während der Vorschau und bei der erneuten Bereitstellung verwendet.

3
IronRod

Schätzen Sie einen alten Thread, aber ich habe versucht herauszufinden, ob SSRS die verwendete freigegebene Datenquelle melden kann, damit ich einem SSRS-Bericht eine Warnung hinzufügen kann, falls er bei der Bereitstellung noch auf eine falsche Datenquelle verweist. Die Lösung, die ich mir ausgedacht habe, funktioniert zwar nur, wenn Sie verschiedene Server für Dev/UAT/Prod verwenden, aber Sie können @@SERVERNAME in Ihr tsql-Skript einfügen.

Ich habe es zu einer Argumentation für den Fall gemacht, dass ich auf meine Berichte verzichten kann

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

Funktioniert gut genug für mich!

1
Jim

In meinem Fall musste ich auf den Dropdown-Pfeil rechts neben dem Bericht in SSRS klicken, "Verwalten", dann "Datenquellen" auswählen und dann zum Speicherort der freigegebenen Datenquelle navigieren, die der Bericht verwenden muss.

1
B. Clay Shannon

Auf jeden Fall ein großes Manko von SSRS. Hier finden Sie viele gute Antworten, die für verschiedene Szenarien, Fähigkeiten und Tools geeignet sind. Ich füge eine weitere hinzu, die die Klasse Sys.Net.WebServiceProxy auf Powershell verwendet:

# 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)

Erläuterung:

Die Hauptidee besteht darin, die Methode SetItemDataSources (x, y) aus der Klasse Sys.Net.WebServiceProxy zu verwenden, um die Datenquelle y.name im Bericht x so festzulegen, dass sie auf die Datenquellenreferenz y.item verweist. In unserem Fall heißt der Bericht TestReport und befindet sich im Ordner "/ Reports", der auf die Datenquelle "/ Data Sources/DSTest" mit dem Namen "DStest" verweist. Um den Repoint durchzuführen, müssen wir einen Verweis auf die Datenquelle ($ ds) erstellen, für die wir zuerst die Datentypen DataSource und DataSourceReference definieren mussten, indem wir sie aus dem Namespace des WebServiceProxy-Objekts ($ proxy) ableiten.

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