首页 > 解决方案 > 使用计算行创建 SSRS 报告

问题描述

我创建了一个显示以下信息的报告: 在此处输入图像描述

但我需要在每次“Turno”更改时添加一个带有计算字段的新行,并在表格末尾添加另一行,如下所示:

在此处输入图像描述

这是我第一次创建这样的报告,所以任何帮助将不胜感激,谢谢。

编辑。建议的答案:将小计添加到 SSRS 报告 tablix 对我不起作用。此答案将所有“NOCHE”分组,然后将所有“MAÑANA”分组,然后将所有“TARDE”分组,但当“Turno”在下一行发生变化时,我需要分组,而不是所有具有相同 Turno 的记录。提前谢谢,对不起我的英语。

标签: visual-studioreporting-services

解决方案


可能有一种方法可以直接在 SSRS 中执行此操作,但如果可能,我会尝试在您的数据集查询中执行此操作。

以下查询重新创建您的数据集,然后添加一个额外的列GroupByID,然后您可以在报表中使用它来轻松地对数据进行分组。

查询的第一部分只是产生一些数据,你只需要主要的 SELECT 部分,你可以用 @t 交换你的表名。

DECLARE @t TABLE(Relevo char(1), ID int IDENTITY(1,1), Turno varchar(10), TT float)

INSERT INTO @t(Relevo, Turno, TT) VALUES
('A', 'NOCHE', 0.085),('A', 'NOCHE', 0.1),('A', 'NOCHE', 0.099),('A', 'NOCHE', 0.055),('A', 'NOCHE', 0.07),
('A', 'NOCHE', 0.076),('A', 'NOCHE', 0.102),('A', 'MANANA', 0.06),('A', 'MANANA', 0.065),('A', 'MANANA', 0.064),
('A', 'MANANA', 0.126),('A', 'MANANA', 0.136),('A', 'MANANA', 0.107),('A', 'NOCHE', 0.059),('A', 'NOCHE', 0.121),
('A', 'NOCHE', 0.063),('A', 'NOCHE', 0.055),('A', 'NOCHE', 0.056),('A', 'NOCHE', 0.085)

-- Change @t below for the name of your table
SELECT z.Relevo, z.ID, z.Turno, z.TT, MIN(z.GroupByID) AS GroupByID
    FROM(
        SELECT
            a.*, b.id  AS GroupByID
        FROM @t a 
            LEFT JOIN 
            (SELECT * FROM (
                SELECT 
                    * 
                    ,LastEntry = IIF(LEAD(Turno,1,'') OVER(ORDER BY ID) = Turno, 0,1)
                FROM @t
                ) x WHERE x.LastEntry = 1
                ) b
            ON a.Relevo = b.Relevo and a.Turno = b.Turno and a.id <=b.ID
    ) z
    GROUP BY z.Relevo, z.ID, z.Turno, z.TT
    ORDER BY ID

这给出了以下输出

在此处输入图像描述

现在您在SSRS 中所要做的就是添加一个父行组,按分组GroupByID并添加您需要的表达式(例如=AVG(Fields!TT.Value))。

报告设计将如下所示...

在此处输入图像描述

注意:为了清楚起见,我显示了第一列,但您可以删除它。

最终输出如下所示。

在此处输入图像描述


推荐阅读