2012-02-23 43 views
0

我有是会得到传递给SSRS报告看起来像这样的数据集:SSRS 2008年数据集过滤 - SUM /细分按月

CODE TEXT COUNT MONTH 
100 ABC 20  January 
100 ABC 10  February 
200 DEF 15  January 
200 DEF 15  February 
300 GHI 0  x 
400 JKL 10  January 

这个“X”表示不存在用于数据该代码/文本为本年,但是,我仍然需要它来显示。在SSRS我想有一列来显示当前月(2月)和一列以显示今年迄今:

CODE TEXT MONTH_TO_DATE YEAR_TO_DATE 
    100 ABC 10   30 [20 + 10] 
    200 DEF 15   30 [15 + 15] 
    300 GHI 0    0 [0] 
    400 JKL 0    10 [0 + 10] 

在2008年SSRS这可能吗?

回答

1

这将需要在SQL中完成,因此,如果您发布了已有的数据,而不是通过该数据生成的数据,则可以更容易地调整SQL SQL。

无论如何,我们必须找到一个办法知道它是当前月份并显示它,我们可以用SQL语句CASE做。也许你有一个日期字段,你可以查询哪一个可能比下面更干净,但是我只是按照你提供的数据运行(也就是说,我们只有一个月份名称,我们使用DATENAME与当前月份进行比较, GETDATE SQL函数 - 显然,如果你有多年的数据为每年二月都会被汇总到当月这不工作,但你适合做什么的想法):现在

SELECT [CODE], [TEXT], 
    SUM(CASE WHEN [MONTH] = DateName(month, GetDate()) THEN [COUNT] END) AS CurrentMonth, 
    SUM([COUNT]) AS YearToDate 
FROM MyTable 
GROUP BY [CODE], [TEXT] 
ORDER BY [CODE], [TEXT] 

,在评论弗拉德的答案你说你不能做一个SUM(COUNT(fieldname)),如果你使用嵌套查询,你可以这样做:

SELECT [CODE], [TEXT], SUM([COUNT]) AS Total 
FROM (-- This is a nested query 
    SELECT [CODE], [TEXT], COUNT(somefield) AS [COUNT] 
    FROM MyTable 
) 
GROUP BY [CODE], [TEXT] 
ORDER BY [CODE], [TEXT] 

如果你想显示x的零个值,则使用了YearToDate单元的格式如下:

#,##0;-#,##0;x 
+0

嗨,克里斯,我能够使用上面发布的一些内容,并结合我的一些调整来获得我想要的结果。这应该很适合SSRS。谢谢你,也感谢你回答我的问题。 – user961714 2012-02-24 20:22:07

0

我想你应该从SQL SELECT /存储过程返回此。您应该使用左连接我认为这些0结果

+0

嗨弗拉德,我不认为我可以用SQL做到这一点。目前我的查询使用LEFT JOIN组合5个表来获得我已有的0。 COUNT列已由COUNT(ColumnName)创建。我尝试在SELECT子句中添加另一列,以将COUNT列中的值[SUM(COUNT(ColumnName))中的值加总为'YearlyCount'],但是SQL不喜欢那种语法。如果有办法做到这一点,请让我知道。 – user961714 2012-02-23 23:45:33

+0

如果你发布你的代码,它可能会帮助更多。从结果中很难看出。我的一般策略是为所有可能的代码创建一个表格,然后将结果与该结果相结合,对于任何缺失的月份结果,将0或null留空。 – Vlad 2012-02-24 13:04:49

1

这可以在SQL或SSRS做 - 做它的SQL(由克里斯·拉塔描述)应该更简单,更高效,但如果该选项不可用,在这里是如何做到这一点在SSRS:

  1. 添加一个4列的表格报告,用适当的数据集。
  2. 在您的CODETEXT列中添加一个组(包括组页脚)到表中。
  3. 添加您CODETEXT值组页脚。
  4. 删除(或隐藏)报表上的详细信息部分行。
  5. 输入下列表达式进组尾行本年度至今列在相应的单元格:

    =Sum(Fields!COUNT.Value)

  6. 输入下列表达式成组尾行中的相应单元格本月至今柱:

    =Sum(iif(MonthName(DatePart("m",Now()))=Fields!MONTH.Value,Fields!COUNT.Value,0))