引言
今天一位朋友問到這樣一樣問題:SSRS報表如何統計報表的通路次數。愣過之後,細想一下,從開發的角度來審視這個問題。無非就是需要一個地方能夠存儲表示目前報表的變量和已訪次數。每次使用者通路的時候給這個變量的次數加1.從報表的生命周期來看,資料集是一個可以下手的地方。另外對SSRS自身資料庫熟悉的同學,肯定不難想到報表的執行日志。
值得注意的是,以下兩種方式,在重新整理報表的時候,将是兩次通路。對這個有要求的同學,那就需要另辟蹊徑喽。
存儲過程實作
step1、建立通路次數統計表create table rs_access_times
(
id int identity(1,1) primary key, --主鍵
rt_name nvarchar(200) not null, --報表名稱
access_times int default(0) --通路次數
)
go
step2、建立次數累加存儲過程create proc up_total_access_times
(
@rt_name nvarchar(200) --報表名稱
)
as
begin
--第一次通路,初始化一條記錄
if not exists(select * from rs_access_times where rt_name = @rt_name)
begin
insert into rs_access_times(rt_name,access_times) values(@rt_name,0)
end
--更新次數
update rs_access_times set access_times = access_times + 1 where rt_name = @rt_name
--傳回最新次數
select access_times from rs_access_times where rt_name = @rt_name
end
go
step3、建立通路次數資料集
step4、呈現通路次數
添加頁腳-右鍵“插入文本框”-添加“占位符”-表達式 =通路次數
每重新整理一次,次數+1。
資料庫的資訊大家也可以看下
執行日志實作
通過執行日志實作,其實就省去了我們的步驟1和2.但是有幾個問題大家要注意下:
1、我需要能夠通路報表服務的資料庫權限
2、需要在報表中添加報表資料庫的連結
3、我們需要先認識一下執行日志表結構
Catalog 目錄表 ItemID字段為主鍵GUID, Name字段為名稱,用來存儲報表檔案夾、資料源、資料集、報表等的名稱。
ExecutionLogStorage 執行日志表 ReportID字段為Catalog表ItemID表外鍵(邏輯),每重新整理一次,生成一條新資料。
4、注意,在設計階段預覽報表是不會在這個資料庫生成資料的,要釋出之後看效果
清楚以上資訊,我們就可以實作功能了,思路就是關聯兩個表,統計執行次數。(其他字段暫可不必了解)
step1、建立報表資料庫連結
相信大家都會,在此不複述。
step2、建立通路次數資料集select count(*)
from ExecutionLogStorage els
join Catalog c on els.ReportID = c.ItemID
where c.Name = @rt_name
其他配置,參見第一種方式即可。