web-dev-qa-db-ja.com

レポートを取得して共有データソースを表示する方法

私は2008R2を実行しています

RSにロードする必要のあるレポートのセット全体があります。これらは第三者によって開発され、当社に送られました。それらは共有データソースに接続します。レポートを機能ごとに分けたフォルダーにアップロードしました。問題は、レポートが使用するために作成されたデータソースが表示されないことです。共有データソースを作成し、レポートをポイントしました。接続は正常にテストされましたが、レポートを実行すると、次のエラーが引き続き表示されました。

「レポートサーバーはレポートまたは共有データセットを処理できません。レポートサーバーまたはSharePointの共有データソース 'dsMyObject'は無効です。サーバーまたはサイトを参照して共有データソースを選択してください。(rsInvalidDataReference)」

埋め込みデータソースでまったく同じ資格情報を使用すると、レポートが実行され、実行した後、作成した共有データソースに戻すことができ、正常に実行されます。

私の問題は、このプロセスが非効率的であり、多くのレポートが必要であり、これをロールするためにさらに多くのサーバーが必要であり、データソースを機能させるために手動でデータソースを前後に切り替える必要があることです。

データソースのリストを見ると、最初の行にDS、次の行に場所(http:// [)]という名前で作成したものが表示されていることに気付きました。サーバー]/reports/[データソースフォルダ])一方、ベンダーによって作成されたDSは、両方の行にDS)という名前が付いています。これにより、 DSをベンダーが使用したのと同じ名前のSSRSにロードして、レポートが自動的に使用できるようにする方法があると信じています。私に教えてくれるものが見つかりません。これを行う方法については、ここで質問しています。レポートを展開するサーバー上の共有データソースを表示するために、事前に作成されたレポートを取得するにはどうすればよいですか。

前もって感謝します、

17

これはSSRSの大きな欠点です。レポートとデータソースがSSRSで作成されると、ReportServerデータベースで一意の識別子が割り当てられます。レポートがアップロードされるとき、レポートが作成されたのと同じ名前の既存のデータソースを認識しません。

これを回避する1つの方法は、SSRSに付属のrs.exeユーティリティを使用することです。レポートへのデータソースメタデータの設定など、一括タスクに使用できます。詳細な技術情報については、以下のリンクを参照してください。

RSユーティリティ

13
Brian Knight

これは本当に古い質問だと思いますが、過去2日間に同様の問題に直面していたので、これに遭遇しました。ただし、私の経験では、ソリューションはより単純でした。したがって、将来誰かがこれを検索する場合に備えて、ソリューションを追加します。

レポートをRSに展開する前にデータソースを作成する必要があります。これが私に起こったことです:

1)データソースを追加する前に最初に展開しましたが、機能しませんでした。作業中のアプリケーションからも、RSからも機能しませんでした。

2)次にデータソースを作成しましたが、既存のレポートには何の影響もありませんでした。それらのいくつかを構成し、それらを新しいデータソースにポイントすることができましたが、それは機能しました。これをまとめて実行したい場合は、上記のRSユーティリティを使用するか、おそらく このようなもの を使用できますが、私はこれらを試していません。

3)レポートをRSに再デプロイしようとしましたが、再デプロイされたレポートがまだデータソースを取得しなかったため、RSは変更されていないアイテムを上書きしないようです。

4)次に、既存のレポートを削除して再デプロイしました。これで修正され、データソースがすぐに取得されました。

16
Boris

共有データソースを使用して1つのレポートを手動で更新します。の中に [ReportServer].[dbo].[DataSource]テーブル、そのレポートの「リンク」値をメモしてから、Name列にデータソースがあるリセットを更新するだけです。

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

これを解決する最も簡単な方法は、共有データソースを使用する新しいレポートを作成することでした。 SSRS2012/VS2010では、ウィザードの最初のページで、「共有データソース」を使用するか、「新しいデータソース」を作成するかを尋ねられます。最初のオプションを選択すると(そしてダミーレポートを作成して保存し続けると)、次のようなセクションとセクションの間にセクションを含むRDLが生成されます。

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

このセクションを同じ場所の目的のレポートRDLにコピーして貼り付けました。プレビュー中および再デプロイ時に、そのデータソースを適切に使用します。

4
IronRod

古いスレッドに感謝しますが、SSRSが使用している共有データソースを報告できるかどうかを調べようとしていたので、展開時に間違ったデータソースを指している場合に備えてSSRSレポートに警告を追加できました。私が思いついた解決策は、確かに、Dev/UAT/Prodに異なるサーバーを使用している場合にのみ機能しますが、@@SERVERNAMEtsqlスクリプト内。

私は自分のレポートにぶつかることができるというケースステートメントにしました

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

私には十分に機能します!

2
Jim

私の場合、SSRSのレポートの右側にあるドロップダウン矢印をクリックし、[管理]、[データソース]の順に選択して、レポートで使用する必要のある共有データソースの場所を参照する必要がありました。

2
B. Clay Shannon

間違いなくSSRSの大きな欠点です。さまざまなシナリオ、スキルセット、ツールに適した多くの良い回答がここに投稿されています。 PowershellでクラスSys.Net.WebServiceProxyを使用して別のものを追加しています:

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

説明:

主なアイデアは、クラスSys.Net.WebServiceProxyのメソッドSetItemDataSources(x、y)を利用して、レポートxのデータソースy.nameがデータソース参照y.itemを指すように設定することです。この場合、レポートはTestReportと呼ばれ、「DStest」という名前でデータソース「/ DataSources/DSTest」を参照するフォルダ「/ Reports」にあります。リポイントを実行するには、WebServiceProxyオブジェクト($ proxy)の名前空間から派生させて、データ型DataSourceおよびDataSourceReferenceを最初に定義する必要があるデータソース($ ds)への参照を作成する必要があります。

2
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
1
William Tait