2016-09-29 121 views
2

我想生成所有SSRS報告及其相應數據集(不是數據源)及其相關命令文本/存儲的列表過程名稱跨全部 SSRS服務器上的報告(包括嵌入式數據集)。查詢在ReportServer實例上查找所有* SSRS數據集列表*所有* SSRS數據集所有* SSRS報告

另一個不錯的功能是能夠按報表數據中使用的過濾器進行過濾(即:綁定到報表正文中的表格等,而不是用作參數中下拉列表的數據源)。

回答

2

下面的腳本被張貼在Technet腳本庫中Olaf Helper

-- List datasets with command text for all SSRS reports 
;WITH 
XMLNAMESPACES 
    (DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2008/01/reportdefinition' 
      ,'http://schemas.microsoft.com/sqlserver/reporting/reportdesigner' 
     AS rd) 
,DEF AS 
    (SELECT RPT.ReportPath 
      ,R.RptNode.value('(./Query/DataSourceName)[1]', 'nvarchar(425)') AS DataSourceName 
      ,R.RptNode.value('@Name[1]', 'nvarchar(425)') AS DataSetName 
      ,REPLACE(REPLACE(LTRIM((R.RptNode.value('(./Query/CommandText)[1]', 'nvarchar(4000)'))) 
        ,'>', '>') 
        ,'&lt;', '<') 
      AS CommandText 
    FROM (SELECT RPT.Path AS ReportPath 
       ,RPT.name AS ReportName 
       ,CONVERT(xml, CONVERT(varbinary(max), RPT.content)) AS contentXML 
      FROM ReportServer.dbo.[Catalog] AS RPT 
      WHERE RPT.Type = 2 -- 2 = Reports 
     ) AS RPT 
    CROSS APPLY RPT.contentXML.nodes('/Report/DataSets/DataSet') AS R(RptNode) 
    ) 
SELECT DEF.ReportPath 
     ,DEF.DataSourceName 
     ,DEF.DataSetName 
     ,DEF.CommandText 
FROM DEF 
-- Optional filter: 
-- WHERE DEF.CommandText LIKE '%/[Team System/]%' -- MDX query against TFS cube 
ORDER BY DEF.ReportPath 
     ,DEF.DataSourceName 
     ,DEF.DataSetName 

它在SSRS 2012SSRS 2008測試。

來源可以發現here

希望它能幫助。

3

這一個似乎在其處理共享和嵌入式數據源更好的...

http://www.bengribaudo.com/blog/2014/08/07/3278/ssrs-auditing-report-queries

-- Provided "as is" with no warranties of any kind. User assumes all risks of use. 
/* The XML XQuery statements used below ignore namespace so that information can be retrieved 
    from multiple RDL versions. */ 
use ReportServer 
;WITH CatalogWithXml AS (
    -- XMLifyies Catalog's Content column. 
    /* For report (Type = 2) and shared data source (Type = 5) objects, the image-typed column 
     Content stores the XML RDL defining the object. We convert this column to XML so that SQL's 
     XML type's functions can be used on it. */ 
    SELECT *, 
     ContentXml = (CONVERT(XML, CONVERT(VARBINARY(MAX), Content))) 
    FROM Catalog 
), 

SharedDataSources AS (
    -- Details on uses of shared data sources. 
    -- * Unused data sources are ignored. 
    -- * ItemID identifies the catalog entry (e.g. report) using the shared data source. It is not 
    -- the data source's ID! 
    /* Table DataSource contains a row for each data source (embedded or shared) used in each report. 
     Its column Name stores the data source name, as defined in the report. Shared data sources are 
     defined (RDL XML) in the catalog. Inner joining between these two tables limits this CTE's 
     resultset to details on shared data sources because embedded data sources don't have Link-ed 
     rows in the catalog. */ 
    SELECT ds.ItemID, 
     SharedDataSourceName = c.Name, 
     LocalDataSourceName = ds.Name, 
     DataProvider = ContentXML.value('(/*:DataSourceDefinition/*:Extension)[1]', 'NVARCHAR(260)'), 
     ConnectionString = ContentXML.value('(/*:DataSourceDefinition/*:ConnectString)[1]', 'NVARCHAR(MAX)') 
    -- Each DataSource row with a Link value represents a use of a shared data source. 
    FROM DataSource ds 
     -- Uses the Link value to look up the catalog entry defining the shared data source. 
     JOIN CatalogWithXml c ON ds.Link = c.ItemID 
), 

AllDataSources AS (
    -- Details on both embedded & shared data sources *used* by reports. 
    /* Embedded data sources are defined in the hosting report's RDL. Shared data sources are 
     referenced (but not defined) in this RDL. We extract the relevant details and then join 
     to the SharedDataSources CTE to assemble a resultset with details on each data source 
     (embedded and shared) used by each report (identified by ItemID). */ 
    SELECT r.ItemID, 
     r.LocalDataSourceName, -- embedded data source's name or local name given to shared data source 
     sds.SharedDataSourceName, 
     SharedDataSource = CAST ((CASE WHEN sds.SharedDataSourceName IS NOT NULL THEN 1 ELSE 0 END) AS BIT), 
     DataProvider = ISNULL(r.DataProvider, sds.DataProvider), 
     ConnectionString = ISNULL(r.ConnectionString, sds.ConnectionString) 
    FROM (
     SELECT c.*, 
       LocalDataSourceName = DataSourceXml.value('@Name', 'NVARCHAR(260)'), 
       DataProvider = DataSourceXml.value('(*:ConnectionProperties/*:DataProvider)[1]', 'NVARCHAR(260)'), 
       ConnectionString = DataSourceXml.value('(*:ConnectionProperties/*:ConnectString)[1]', 'NVARCHAR(MAX)') 
      FROM CatalogWithXml c 
       CROSS APPLY ContentXml.nodes('/*:Report/*:DataSources/*:DataSource') DataSource(DataSourceXml) 
      WHERE c.Type = 2 -- limit to reports only 
     ) r 
     LEFT JOIN SharedDataSources sds ON r.ItemID = sds.ItemID AND r.LocalDataSourceName = sds.LocalDataSourceName 
), 

DataSets AS (
    -- Details on data sets used in reports. 
    /* Outputs one row per data set used in each report. */ 
    SELECT ItemID, 
     DataSetName = QueryXml.value('@Name', 'NVARCHAR(256)'), 
     DataSourceName = QueryXml.value('(*:Query/*:DataSourceName)[1]', 'NVARCHAR(260)'), 
     CommandType = QueryXml.value('(*:Query/*:CommandType)[1]', 'NVARCHAR(15)'), 
     CommandText = QueryXml.value('(*:Query/*:CommandText)[1]', 'NVARCHAR(MAX)') 
    FROM CatalogWithXml 
     CROSS APPLY ContentXml.nodes('/*:Report/*:DataSets/*:DataSet') QueryData(QueryXml) 
), 

Data AS (
    -- Combines data set and data source details with additional information from Catalog. 
    SELECT ds.ItemID, 
     Name, 
     Path, 
     LocalDataSourceName, 
     SharedDataSource, 
     SharedDataSourceName, 
     DataProvider, 
     ConnectionString, 
     DataSetName, 
     CommandType = ISNULL(CommandType, 'Text'), -- "Text" = default command type 
     CommandText 
    FROM DataSets ds 
     JOIN AllDataSources src ON src.ItemID = ds.ItemID AND src.LocalDataSourceName = ds.DataSourceName 
     JOIN Catalog c ON ds.ItemID = c.ItemID 
) 
SELECT * FROM Data