11

私は何時間も検索して、SSRS servからの現在のすべてのサブスクリプションをパラメーターとその値とともに取得して、新しいサーバーで(プルーニング後に)再作成できるようにするためのクエリを取得しようとしています。

たとえば、単純なレポートは、次の3つのパラメータをとるHoursByDepartmentのようになります。

@From =Today - 7 days (Default)
@To   = Today (Default)
@Dept = 2 (part of subscription)

私が取得したいのは、これらの線に沿ったもの(またはレポートを作成できるもの)です。

Report            ParamName   ParamValue    Default
HoursByDepartment From        Today-7days    True
HoursByDepartment To          Today          True
HoursByDepartment Dept        2              False

また

Report             Param1Name   Param1Value   Param1Def   Param2Name   Param2Value    Param2Def     
HoursByDepartment  From         Today-7days   True        To           Today          True

私はXSlがかなり得意なので、次のようなものを入手できれば、それを使用できます。

<subid>
    <report>
        <ParameterValues>
            <ParameterValue>
                <Name>MinAvailable</Name>
                <Value>10000</Value>
            </ParameterValue>
            <ParameterValue>
                <Name>OwnerIDs</Name>
                <Value>0</Value>
            </ParameterValue>
            <ParameterValue>
                <Name>ShowCosts</Name>
                <Value>False</Value>
            </ParameterValue>
            <ParameterValue>
                <Name>MinValue</Name>
                <Value>0</Value>
            </ParameterValue>
        </ParameterValues>
    </report>
</subid>
4

3 に答える 3

10

このスクリプトを使用すると、良いスタートを切ることができます。このクエリは、各レポートサブスクリプションのパラメーターごとに1行を返すか、パラメーターを使用しないサブスクリプションの場合は1行だけを返します。代わりにスクリプトを変換する場合は、スクリプトを再作成してxml形式にする必要があります。

これは、パラメーターとその値を含むサブスクライブされたSSRSレポートのリストから派生しています(元のレポートをどれだけ変更したかはわかりません)。

WITH
[Sub_Parameters] AS
(
SELECT 
[SubscriptionID],
[Parameters] = CONVERT(XML,a.[Parameters])
FROM [Subscriptions] a
),
[MySubscriptions] AS
(
SELECT DISTINCT
[SubscriptionID],
[ParameterName] = QUOTENAME(p.value('(Name)[1]', 'nvarchar(max)')),
[ParameterValue] = p.value('(Value)[1]', 'nvarchar(max)')
FROM 
[Sub_Parameters] a
CROSS APPLY [Parameters].nodes('/ParameterValues/ParameterValue') t(p)
),
[SubscriptionsAnalysis] AS
(
SELECT
a.[SubscriptionID],
a.[ParameterName],
[ParameterValue] = 
(SELECT
STUFF(( 
SELECT [ParameterValue] + ', ' as [text()]
FROM [MySubscriptions]
WHERE 
[SubscriptionID] = a.[SubscriptionID]
AND [ParameterName] = a.[ParameterName]
FOR XML PATH('')
),1, 0, '')
+'')
FROM [MySubscriptions] a
GROUP BY a.[SubscriptionID],a.[ParameterName]
)
SELECT
a.[SubscriptionID],
c.[UserName] AS Owner, 
b.Name,
b.Path,
a.[Locale], 
a.[InactiveFlags], 
d.[UserName] AS Modified_by, 
a.[ModifiedDate], 
a.[Description], 
a.[LastStatus], 
a.[EventType], 
a.[LastRunTime], 
a.[DeliveryExtension],
a.[Version],
e.[ParameterName],
LEFT(e.[ParameterValue],LEN(e.[ParameterValue])-1) as [ParameterValue],
SUBSTRING(b.PATH,2,LEN(b.PATH)-(CHARINDEX('/',REVERSE(b.PATH))+1)) AS ProjectName
FROM 
[Subscriptions] a 
INNER JOIN [Catalog] AS b
ON a.[Report_OID] = b.[ItemID]
LEFT OUTER JOIN [Users] AS c
ON a.[OwnerID] = c.[UserID]
LEFT OUTER JOIN [Users] AS d
ON a.MODIFIEDBYID = d.Userid
LEFT OUTER JOIN [SubscriptionsAnalysis] AS e 
ON a.SubscriptionID = e.SubscriptionID;

ただし、これが2005年から2008年へのアップグレードである場合は、このツールの使用を検討することをお勧めします。このサーバーからSSRSを削除し、同じバージョンを使用して別のサーバーに移動する場合は、Microsoftがここで説明しているように、reportserverデータベースとreportservertempdbデータベース全体を移動する方がよい場合があります。

于 2012-09-13T15:12:19.673 に答える