【问题标题】:SSRS Reports: How do I create a monthly/YTD report like this?SSRS 报告:如何创建这样的月度/年初至今报告?
【发布时间】:2011-07-14 18:34:07
【问题描述】:

我有一个如下所示的表格:

-------------------------------------------------------------------
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 参数,我会得到年初至今所需的所有行——但是我如何只显示单个月份顶部?

提前致谢!

【问题讨论】:

  • 可能会将问题拆分为更小的问题,包括测试数据并包括所有字段,例如您所指的日期。和预期结果
  • 感谢您的回复。我添加了请求的示例数据和所需的输出。

标签: sql-server visual-studio-2008 tsql sql-server-2008 reporting-services


【解决方案1】:

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

保留您已有的数据集。无需担心年初至今。 创建第二个数据集,按项目分组查找给定客户的 YTD。查找功能可以根据第一个数据集中的项目编号找到第二个数据集中的 YTD。

希望这会有所帮助。

补充答案

差点忘了子报告。您可以创建带有 1 个参数的第二个报告:CustNum,并在表格中显示 YTD。将此作为子报告添加到您的主报告中。一个好地方应该是在表格页脚中。

【讨论】:

  • 这听起来像是我希望找到的,现在我需要检查我们正在使用的 SQL 版本...将回发。谢谢!
  • 好吧,我希望你的建议能帮助我解决这个问题,但我们将在 SQL 2008 上停留一段时间(没有 R2)。有没有另一种方法来实现同样的目标?或者你能想出一种方法来在同一个矩阵的多个位置(非相邻行)使用数据集中的一行吗?
【解决方案2】:

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

【讨论】:

  • 我正在使用 Visual Studio 2008 为 SSRS 报告生成一个 .rdl 文件。抱歉,我在帖子中没有具体说明,因为我用 VS2008 和 SSRS 对其进行了标记。我认为我正在努力解决的问题的症结在于我如何总结年初至今的月份,但仍然保留我查询的单个月份的值——所有这些都在同一个报告定义中?我正在使用矩阵,但也许这是错误的方法?
  • 完全是我的错,我只看到了 sql。我希望您可以使用它或其中的一些,因为它与您要求的非常接近
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多