我们只有一个表格,其中包含所有客户的订单数据。由此,我们想创建一个简单的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个“月”行进行硬编码,并使用像逻辑这样的表达式动态填充单元格吗?
如果它影响了我们上面的视图,我们还希望用户能够深入查看每个值的基础详细记录。
答案 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