Visual studio 创建具有计算行的SSRS报告

Visual studio 创建具有计算行的SSRS报告,visual-studio,reporting-services,Visual Studio,Reporting Services,我创建了一份报告,其中显示了以下信息: 但我需要在每次Turno更改时添加一个新行和一个计算字段,并在表的末尾添加另一行,如下所示: 这是我第一次编写这样的报告,希望您能提供帮助, 谢谢 编辑。 建议的答案是: 不适合我。 这个答案将所有的NOCHE,然后是所有的MAñANA,然后是所有的TARDE进行分组,但我需要在Turno在下一行发生变化时进行分组,而不是在同一Turno的所有记录中进行分组。请提前发送Thx,我的英语很抱歉。在SSRS中可以直接执行此操作,但如果可能,我会尝试在您的数据

我创建了一份报告,其中显示了以下信息:

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

这是我第一次编写这样的报告,希望您能提供帮助, 谢谢

编辑。 建议的答案是: 不适合我。
这个答案将所有的NOCHE,然后是所有的MAñANA,然后是所有的TARDE进行分组,但我需要在Turno在下一行发生变化时进行分组,而不是在同一Turno的所有记录中进行分组。请提前发送Thx,我的英语很抱歉。

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

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

查询的第一部分只是生成一些数据,您只需要主选择部分,就可以用@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分组,并添加所需的表达式,例如=AVGFields!TT.Value

报告设计将如下所示

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

最终输出如下所示


可能有一种方法可以直接在SSRS中实现这一点,但如果可能的话,我会尝试在您的数据集查询中实现这一点

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

查询的第一部分只是生成一些数据,您只需要主选择部分,就可以用@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分组,并添加所需的表达式,例如=AVGFields!TT.Value

报告设计将如下所示

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

最终输出如下所示


这回答了你的问题吗?Thx@Nick.McDermaid但它没有帮助,按照示例中的相同操作,报告首先显示所有的玛娜娜,然后显示所有的塔德,然后显示所有的诺什,但我需要显示示例中的记录,我的意思是,在更改之前,先显示所有的诺什,添加一行,然后从玛娜娜开始,。。。。对不起,我说的是英语。你需要一些东西来订购,我想那应该是id。有很多计算器,你可以在另一列中使用,以便在情况发生变化时识别。不幸的是,我面前没有SSR来尝试回答你的问题吗?Thx@Nick.McDermaid但它没有帮助,按照示例中的相同操作,报告首先显示所有的玛娜娜,然后显示所有的塔德,然后显示所有的诺什,但我需要显示示例中的记录,我的意思是,在更改之前,先显示所有的诺什,添加一行,然后从玛娜娜开始,。。。。对不起,我说的是英语。你需要一些东西来订购,我想那应该是id。有很多计算器,你可以在另一列中使用,以便在情况发生变化时识别。不幸的是,我面前没有SSR,我会在明天的工作中检查它,无论如何谢谢你的时间和努力!我明天会在工作中检查,无论如何谢谢你的时间和努力!