0

我有一个表,看起来像这样:SSRS报告:如何创建像这样的月度/年度至今报告?

------------------------------------------------------------------- 
CUSTNUM (INT), ITEMNUM (INT), MONTH (INT), YEAR (INT), AMOUNT (INT) 
------------------------------------------------------------------- 
100000, 489, 1, 2011, 4000 
100000, 489, 2, 2011, 3000 
100000, 489, 3, 2011, 5000 
100000, 587, 1, 2011, 7500 
100000, 587, 2, 2011, 6800 
100000, 587, 3, 2011, 9000 

我试图创建是显示我的一个客户在给定年份和月份已经购买了每个项目的报告。 在同一页上,我想要一个表格(要么是相同的矩阵的一部分,要么是任何需要的),它具有按每条线上的itemnum分组的年度至今销售额。

最终的结果应该为每个客户在顶部的单月销量,并在底部购买的每个项目的年最新总结做个总结般的页面(可能多页)。

下面是所需的输出将是什么时,对2011年3月查询,如:

----------------------- 
Customer: 100000 
----------------------- 
Item Month Quantity 
----------------------- 
489  5000 
587  9000 
----------------------- 
Total 14000 

------------------------ 
Item Year-to-Date Qty 
------------------------ 
489  12000 
587  23300 
------------------------ 
Total 35300 

下一个分页符将是一个新的客户有类似的布局。

具体来说,我正在努力寻找事物的查询面。我有一个针对特定月份的工作查询 - 如果我从where子句中省略MONTH参数,我会得到所有年前至今所需的行 - 但是,如何仅显示单月份顶端?

在此先感谢!

+0

可能会将问题分为较小的问题,包括测试数据并包含所有字段,例如您引用的日期。并预期结果 –

+0

感谢您的答复。我添加了请求的样本数据和期望的输出。 –

回答

1

如果您使用的是SQL 2008 R2,使用查找功能。此功能在早期版本中不可用。

保留您已拥有的数据集。没必要担心YTD。 创建第二个数据集,逐个项目查找给定客户的YTD。查找功能可以根据第一个数据集中的物料编号在第二个数据集中找到YTD。

希望这会有所帮助。

附加应答

几乎忘了子报表。您可以创建第二个报告,其中包含1个参数:CustNum,并在表中显示YTD。将此作为子报告添加到您的主报告中。一个好的地方将在桌脚上。

+0

这听起来像我希望找到的,现在我需要检查我们正在使用的SQL版本。 。会回发。谢谢! –

+0

嗯,我希望你的建议能够帮助我解决它,但是我们会在SQL 2008上停留一段时间(没有R2)。有没有另一种方法来实现同样的事情?或者你能想出一种方法来使用同一矩阵中多个位置(非相邻行)的数据集中的一行? –

0

Sql并非设计用于生成报表,它旨在提取数据,以便Excel,报表生成器或其他工具可以设置该设计。我希望你能用这个。

declare @t TABLE (custnum int, itemnum int, month int, year int, amount int) 

DECLARE @m INT 
DECLARE @y INT 

set @m = 3 
set @y = 2011 

insert @t values(100000, 489, 1, 2011, 4000) 
insert @t values(100000, 489, 2, 2011, 3000) 
insert @t values(100000, 489, 3, 2011, 5000) 
insert @t values(100000, 587, 1, 2011, 7500) 
insert @t values(100000, 587, 2, 2011, 6800) 
insert @t values(100000, 587, 3, 2011, 9000) 

SELECT custnum customer, itemnum item, sum(amount) [Month Quantity] 
FROM @t 
WHERE MONTH = @m 
AND year = @y 
GROUP BY custnum, itemnum with rollup 

结果:

customer item  month quantity 
100000 498  5000 
100000 587  9000 
100000    14000 <---(total for this customer) 
        14000 <---(grand total for all customers) 


SELECT itemnum item, sum(amount) [Year-to-Date Qty] 
FROM @t 
WHERE year = @y 
GROUP BY itemnum with rollup 

结果:

item  Year-to-Date Qty 
489  12000 
587  23300 
      35300 
+0

我正在使用Visual Studio 2008为SSRS报告生成.rdl文件。对不起,我在帖子中没有具体说明,因为我用VS2008和SSRS标记了它。我认为我正在努力解决的问题的关键是如何总结年初至今的月份,但仍然保留我查询的单个月份的值 - 所有这些都在相同的报告定义中?我正在使用矩阵,但也许这是错误的方法? –

+0

完全是我的不好,我刚看到sql。我希望你可以使用它或其中的一些,因为它非常接近于你请求的相同 –