SSRS每月分组

时间:2018-09-13 16:23:17

标签: reporting-services ssrs-2012

我们只有一个表格,其中包含所有客户的订单数据。由此,我们想创建一个简单的SSRS报告,该报告显示所选开始月份的12个月数据(受参数控制,下拉菜单中的12个月),并将每月数据分为两个部门列之一。

基本上,我们希望数据在报告中显示如下:

Month   Dept1   Dept2   MonthlyTotal
Sept    100     500     600
Oct     100     200     300
Nov     200     100     300
Dec     100     300     400
Jan     0       100     100
Feb     0       0       0
Mar     0       0       0
Apr     0       0       0
May     0       0       0
June    0       0       0
July    0       0       0
Aug     0       0       0
Total   500     1200    1700

实现此目标的最佳方法是什么?我们应该使用Table还是Matrix对象?我们应该对报告中的12个“月”行进行硬编码,并使用像逻辑这样的表达式动态填充单元格吗?

如果它影响了我们上面的视图,我们还希望用户能够深入查看每个值的基础详细记录。

1 个答案:

答案 0 :(得分:0)

您是否使用矩阵的选择应基于数据在数据集中的方式。如果每个部门有两个单独的列,那么我将使用带有两个字段的表。如果有一个DEPARMENT字段确定记录所属的部门,那么我将使用矩阵并将DEPARTMENT用作列组。

您在月份中遇到的问题是,您可能没有一个表,该表中正在等待将来的月份填充数据,因此您需要生成它们。

要填充日期,我将从动态创建的日期表开始。这是我通常用来创建月份表的内容。您可以将开始日期和结束日期绑定到您的参数。

DECLARE @START_DATE AS DATE = '2017-01-01' 
DECLARE @END_DATE AS DATE = '2018-08-31' 

;WITH DATE_RANGE AS (
                    SELECT CAST(@START_DATE AS DATE) AS MONTH_START
                    UNION ALL
                    SELECT CAST(DATEADD(MONTH, 1, MONTH_START) AS DATE)
                    FROM DATE_RANGE
                    WHERE YEAR(MONTH_START) < YEAR(@END_DATE)
                        OR
                        (
                            YEAR(MONTH_START) = YEAR(@END_DATE)
                            AND 
                            MONTH(MONTH_START) < MONTH(@END_DATE)
                        )
                    )


SELECT MONTH_START, MONTH_END 
INTO #DATE_RANGE
FROM DATE_RANGE