SSRS 2008数据集过滤 - 按月/按月分类

时间:2012-02-23 22:42:09

标签: reporting-services

我有一个数据集将传递给SSRS报告,如下所示:

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] 

这在SSRS 2008中是否可行?

3 个答案:

答案 0 :(得分:1)

这必须在SQL中完成,因此如果您发布了已经存在的内容而不是从该SQL产生的数据,那么调整SQL会更容易。

无论如何,我们必须找到一种方法来了解它是当前月份并显示它,我们可以使用SQL CASE语句。也许你有一个可以查询的日期字段,它可能比下面更清晰,但我只是运行你提供的数据(也就是说,我们只有一个月份名称,我们使用{{ 1}}和DATENAME SQL函数 - 显然,如果您有多年的数据,因为每个2月将聚合到当前月份,但是您可以了解该做什么):

GETDATE

现在,在你对Vlad的回答的评论中,你说如果你使用嵌套查询,你就不能做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] ,请使用YearToDate单元格的以下格式:

x

答案 1 :(得分:1)

这可以在SQL或SSRS中完成 - 在SQL中执行它(如Chris Latta所述)应该更简单,更高效,但如果该选项不可用,则以下是如何在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))

答案 2 :(得分:0)

我认为你应该从sql select / storage过程返回这个。您应该使用LEFT JOIN我认为这些0结果