You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

统计SSRS报表执行次数(排除自动刷新计数)

区分SSRS手动执行与自动刷新执行的方法

当然可以区分啦!我之前处理过类似的需求,通过查询ReportServer数据库里的执行日志相关视图和表,就能轻松把手动执行和自动刷新的报表执行记录分开,甚至直接过滤掉自动刷新的记录。具体方法如下:

  • 核心判断依据:特殊参数__RefreshReport
    SSRS的自动刷新功能触发执行时,会自动传入一个名为__RefreshReport的隐藏参数,参数值为True;而用户手动触发的报表执行不会携带这个参数。这是最可靠的区分方式。

    你可以通过关联执行日志表和参数表来筛选,这里给你一个实用的SQL查询示例:

    SELECT 
        el.ReportPath,
        el.TimeStart,
        el.UserName,
        -- 标记执行类型
        CASE 
            WHEN EXISTS (
                SELECT 1 
                FROM ExecutionLogStorage els
                JOIN ReportParameterValues rpv ON els.ExecutionID = rpv.ExecutionID
                WHERE els.ExecutionID = el.ExecutionID
                  AND rpv.ParameterName = '__RefreshReport'
                  AND rpv.ParameterValue = 'True'
            ) THEN '自动刷新' 
            ELSE '手动执行' 
        END AS ExecutionType
    FROM ExecutionLog3 el
    ORDER BY el.TimeStart DESC;
    
  • 辅助判断:SessionID复用情况
    自动刷新的执行通常会复用同一个SessionID(因为是在同一会话内的定时刷新),而手动执行一般会生成新的SessionID或者对应用户主动发起的独立会话。不过这个方法不如参数判断可靠,建议和参数检查结合使用,提升准确性。

如果你只需要忽略自动刷新的执行记录,直接在查询中过滤掉携带__RefreshReport=True的记录即可,示例SQL如下:

SELECT *
FROM ExecutionLog3 el
WHERE NOT EXISTS (
    SELECT 1 
    FROM ExecutionLogStorage els
    JOIN ReportParameterValues rpv ON els.ExecutionID = rpv.ExecutionID
    WHERE els.ExecutionID = el.ExecutionID
      AND rpv.ParameterName = '__RefreshReport'
      AND rpv.ParameterValue = 'True'
);

注意:不同版本的SSRS可能在系统表/视图的命名上略有差异,但__RefreshReport这个隐藏参数的逻辑在多数版本中都是一致的,放心使用即可。

内容的提问来源于stack exchange,提问作者Jamie Stuart Robin Parsons

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:18:25