[英]Saving the SSRS report Parameter
我有 SSRS 報告,每次運行需要多個參數。 當用戶想要運行報告時,他總是需要填寫這些參數。 我們是否在 SSRS 服務中有解決方案將這些參數保存為模板並將它們用於將來的運行或實現此目的的最佳方法是將報告參數保存為模板。
目前我有 SSRS 報告,可在 Sharepoint 中查看
您無法保存單個用戶在 SSRS 中所做的先前選擇,以便該選擇在該用戶下次登錄時出現。您可以通過設置默認值來獲得默認選擇。 每次運行報告時,都會為報告的每個用戶顯示此默認值。 您可以將默認值設為選擇的結果,但無論您構建到默認值中的任何邏輯都將在每次運行報告時應用該邏輯。
這是我尚未測試過的理論,因此不確定它的效率如何。 但是這個想法是這樣的
盡管您沒有保存上次使用的參數,但您可能會在ExecutionLog
表中查看用戶上次運行報告的時間,提取提供給該報告的參數並將其用作下次運行的默認值。
執行日志的簡單查詢將為您提供詳細信息:
SELECT
R.Name
,L.[Parameters]
,L.username
,L.TimeStart
FROM dbo.ExecutionLog L WITH (NOLOCK)
INNER JOIN dbo.Catalog R WITH (NOLOCK)
ON L.ReportID = R.ItemID
WHERE R.Name = 'your report name'
and L.username = @user_name
這將為您提供報告的歷史記錄(取決於您的 RS 設置)。
只需使用日志的最新實例(可能是最大 L.TimeStart)。 然后提取參數,然后設置報表的默認值..
再一次..不確定這有多有效,但它可能會起作用!
如果您的參數是級聯參數,那么您可能會遇到麻煩,因為之前的參數值可能不再有效.. 但您明白了。
你可以這樣做....
假設我們有兩個參數,@Country 和 @Category 在報告中使用。
通常可用的值來自一個看起來像這樣的數據集,
SELECT DISTINCT CountryID, CountryName FROM myTable ORDER BY CountryName
...和類別類似
因此,假設用戶使用以下參數運行報告
CountryID = 89、94、245(法國、德國和英國)和 CategoryID = 11、15(汽車、自行車)
我們需要創建一個表來與用戶一起存儲這些值。 就像是
CREATE TABLE userParams(userName nvarchar(128), reportName nvarchar(128), paramName nvarchar(128), paramValue int)
它們在主報告的數據集查詢開始時,您可以保存參數值...
DELETE FROM userParams WHERE userName = SYSTEM_USER AND reportName = 'myReportName'
INSERT INTO userParams
SELECT DISTINCT SYSTEM_USER, 'myReportname', 'Country', CountryID FROM myTable WHERE CountryID IN (@Country)
INSERT INTO userParams
SELECT DISTINCT SYSTEM_USER, 'myReportname', 'Category', CategoryID FROM myTable WHERE CategoryID IN (@Category)
好的,現在我們為每個用戶保存了最后一個參數,我們只需要創建一個數據集來讀取它們並將它們用作默認值。
創建一個名為dsCountry_Defaults
的數據集,其數據集查詢類似於...
SELECT CountryID from userParams WHERE userName = SYSTEM_USER and reportName = 'myReportName'
在您的國家參數設置中,將默認參數設置為查詢並指向此數據集。
對其余參數重復此操作。
應該是這樣...
如果您使用 SP 作為您的數據集,那么您需要稍微修改它,但原理是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.