質問

SSRSインスタンスのすべてのレポートを更新するプロジェクトがあり、すべてのレポートのリストをExcelに取得して、各レポートを更新するときにそれらをチェックできるようにします。簡単だと思った。私はそれを頻繁に使用することはありませんが、XMLはこれに適しているようです。次のようなものがあります:

<Server>
  <ReportFolder>
    <ReportFolder>
      <Report>
      </Report>
      <Report>
      </Report>
    </ReportFolder>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>
  </ReportFolder>
  <ReportFolder>
  </ReportFolder>
</Server>

カタログテーブルはデータのソースであり、ItemIDとParentIDがあるため、オブジェクトとその階層を識別できますが、XML形式で完全なサーバーを取得することはできません。フォルダーを指定すると、1つのフォルダーのコンテンツを取得できます(名前またはItemID)がサーバー全体ではありません。 WHERE ItemID = 1234行を取り出すと、次のようになります。

<Server>
  <ReportFolder>
  </ReportFolder>
  <ReportFolder>
  </ReportFolder>
  <ReportFolder>
  </ReportFolder>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>
    <Report>
    </Report>  
</Server>

CTEのXML AUTO、XML EXPLICITを試してみましたが、これまでのXMLとの関連付けがこれまでのところ正当であると感じています!

XML形式で完全な(最大4レベル)階層を取得する方法はありますか?

これはXMLに関連するものではなく、行き止まりになってしまった間違ったものですか?

役に立ちましたか?

解決

それで、良いニュースと悪いニュース。良いニュースがあります。

CREATE FUNCTION [dbo].[GetReportTree](@ItemId uniqueidentifier)
RETURNS XML
BEGIN RETURN 
  (SELECT   ca.ItemId AS '@ItemId',
            ca.Name AS '@Name',
            ca.Type AS '@Type',
            dbo.GetReportTree(ca.ItemId)
   FROM dbo.Catalog ca
   WHERE (@ItemId IS NULL AND ParentId IS NULL) OR ParentID=@ItemId
   FOR XML PATH('CatalogItem'), TYPE)
END

SELECT dbo.[GetReportTree](NULL)   

次のような階層を作成します。

<CatalogItem Name="" Type="1">
  <CatalogItem Name="ScrumTest" Type="1">
    <CatalogItem Name="(Hidden) Delta Report Small" Type="2" />
    <CatalogItem Name="(Hidden) Product Burndown Chart Small" Type="2" />
    <CatalogItem Name="(Hidden) Product Cumulative Flow Small" Type="2" />
    <CatalogItem Name="(Hidden) Sprint Burndown Chart Small" Type="2" />
    <CatalogItem Name="All Product Backlog Items" Type="2" />
    <CatalogItem Name="All Sprint Backlog Items" Type="2" />
    <CatalogItem Name="All Sprints" Type="2" />
    <CatalogItem Name="Current Sprint Status" Type="2" />
    <CatalogItem Name="Delta Report" Type="2" />
    <CatalogItem Name="Engineering Reports" Type="1">
      <CatalogItem Name="(Hidden) Bug History Chart Small" Type="2" />
      <CatalogItem Name="Bug Count" Type="2" />
      <CatalogItem Name="Bug History Chart" Type="2" />
      <CatalogItem Name="Bug Priority Chart" Type="2" />
    </CatalogItem>
    <CatalogItem Name="Impediment Report" Type="2" />
    <CatalogItem Name="Product Backlog Composition" Type="2" />
    <CatalogItem Name="Product Burndown Chart" Type="2" />
    <CatalogItem Name="Product Cumulative Flow" Type="2" />
    <CatalogItem Name="Retrospective Report" Type="2" />

悪いニュースは、&quot; ReportTree&quot;を追加せずにそれができるかどうかわからないということです。 ReportServerに機能します。そのため、そのサーバーへのアクセスに依存します。この機能をデータベース間で機能させることができるかもしれませんが、私はそれを試しませんでした。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top