如何基于非透视数据源创建带KPI计算的SSRS表格?
我之前在SSRS里处理过一模一样的非透视数据源场景,给你几个实用的解决方案,应该能帮你搞定:
解决方案:在SSRS中处理非透视数据源并展示计算结果
方法1:通过SQL查询预处理数据(最省心的方式)
如果你的数据源是SQL数据库,优先推荐在查询层面把数据处理好,这样SSRS里直接用现成的计算值就行。比如假设你要计算每个Agent的(LeadsRaised + Registrations)/CallsTaken这类综合指标,SQL可以这么写:
SELECT Date, AgentName, Manager, -- 这里替换成你实际需要的计算逻辑 (MAX(CASE WHEN KPIName = 'LeadsRaised' THEN KPIValue END) + MAX(CASE WHEN KPIName = 'Registrations' THEN KPIValue END)) / MAX(CASE WHEN KPIName = 'CallsTaken' THEN KPIValue END) AS CalculatedKPI FROM YourTableName GROUP BY Date, AgentName, Manager
这个查询会自动把同一Agent、同一日期的不同KPI行合并,直接算出你要的汇总值,之后在SSRS里拖个普通表格就能轻松展示。
方法2:在SSRS表格中用表达式直接计算
如果没法修改数据源,也可以直接在SSRS的表格里用表达式实现。步骤很简单:
- 先给表格设置分组:按
Date、AgentName、Manager分组(确保同一Agent的所有KPI行都在同一个组内) - 添加一个新列,在列的表达式里写入你的计算逻辑,比如:
-- 基础计算表达式(替换成你需要的公式) =(Sum(IIF(Fields!KPIName.Value = "LeadsRaised", Fields!KPIValue.Value, 0)) + Sum(IIF(Fields!KPIName.Value = "Registrations", Fields!KPIValue.Value, 0))) / Sum(IIF(Fields!KPIName.Value = "CallsTaken", Fields!KPIValue.Value, 0))
注意:记得处理除数为0的异常情况,避免报表报错,比如加个判断:
=IIF(Sum(IIF(Fields!KPIName.Value = "CallsTaken", Fields!KPIValue.Value, 0)) = 0, 0, (Sum(IIF(Fields!KPIName.Value = "LeadsRaised", Fields!KPIValue.Value, 0)) + Sum(IIF(Fields!KPIName.Value = "Registrations", Fields!KPIValue.Value, 0))) / Sum(IIF(Fields!KPIName.Value = "CallsTaken", Fields!KPIValue.Value, 0)))
方法3:使用SSRS矩阵控件(适配未来扩展)
如果之后可能需要添加更多KPI计算,矩阵控件会更灵活:
- 插入一个矩阵控件到报表中
- 把
Date、AgentName、Manager拖到行组区域 - 在数据单元格里输入你需要的计算表达式(和方法2里的表达式一致)
- 要是只需要单列结果,就不用额外设置列组,直接展示即可
另外,如果你只是想把同一Agent的所有KPI数值合并到一列展示(比如“LeadsRaised:5, CallsTaken:20...”),可以用这个表达式:
=Join(LookupSet(Fields!AgentName.Value & Fields!Date.Value, Fields!AgentName.Value & Fields!Date.Value, Fields!KPIName.Value & ": " & Fields!KPIValue.Value, "YourDataSetName"), ", ")
不过看你的需求是计算后的值,前面的三种方法应该更贴合你的场景。
内容的提问来源于stack exchange,提问作者Ray
相关产品推荐
相关产品推荐

