【问题标题】:Need to Aggregate on the Last Month for a Grouped Report需要汇总上个月的分组报告
【发布时间】:2017-06-06 22:41:43
【问题描述】:

我有一个如下所示的数据集:

| Location | Category |Item Name |   Month  | QTY |
| -------- | -------- | -------- | -------- | --- |
|    NY    | Hardware |   Screw  | Jan 2017 | 100 |
|    NY    | Hardware |   Screw  | Feb 2017 | 50  |
|    NY    | Hardware |   Screw  | Mar 2017 | 75  |
|    NY    | Hardware |    Bolt  | Jan 2017 | 30  |
|    NY    | Hardware |    Bolt  | Feb 2017 | 90  |
|    NY    | Hardware |    Bolt  | Mar 2017 | 50  |
|    CA    | Hardware |   Screw  | Jan 2017 | 100 |
|    CA    | Hardware |   Screw  | Feb 2017 | 50  |
|    CA    | Hardware |   Screw  | Mar 2017 | 75  |
|    CA    | Hardware |    Bolt  | Jan 2017 | 30  |
|    CA    | Hardware |    Bolt  | Feb 2017 | 90  |
|    CA    | Hardware |    Bolt  | Mar 2017 | 50  |


我的报告需要如下所示:

|      Hardware      | Screw |  Bolt |
|Current Month Total |  150  |  100  |
|Yearly Total        |  450  |  340  |

我需要一种方法将当前月份的总计限制为仅当月,但汇总年度总计的值。我已经尝试在聚合中使用 LAST,但你不能。对于当前月份的总聚合,我尝试了以下方法。我的日期值是一个月的第一天,我的参数是一个月的最后一天,所以我需要一种方法来匹配 2,这就是添加日期的原因。 jist 是尝试匹配当前月份,这是日期列的参数:

=iif( DateAdd(dateinterval.Day,-1,DateAdd(dateinterval.Month,1,Fields!Sale_DATE.Value)) = 参数!ReportingDate.Value, iif(isnothing(sum(Fields!Total.Value)) ,"",sum(Fields!Total.Value)),sum(0))

但它仅在返回数据集的查询仅返回当前月份时才有效。如果查询返回一年中的所有月份,则显示 0。我需要一种过滤单元格的方法,以便它们正确聚合值

如果我将报告限制为仅当月,则无法获得年度汇总,如果选择所有月份,则无法获得当月总计。

【问题讨论】:

    标签: reporting-services ssrs-2008-r2


    【解决方案1】:

    您可以使用内置的分组函数来做到这一点,而无需任何花哨的表达式。

    按月添加行组。将行组过滤到当前月份。按项目名称添加列组。在行组之外和下方添加一行以获得您的年度总计。这些表达式都只是数量的总和。该报告将负责对每个组范围内的值求和。

    【讨论】:

      【解决方案2】:

      实际上,单独使用建议的分组是行不通的。我已经在我的矩阵中使用了组。问题是我需要在同一列中使用不同形式的分组,并且我需要将分组限制在不同的日期范围内。我的问题是我的公式中的 SUM 位置错误。

      年度总数的表达式应该是:

      =Sum(IIF(Fields!ItemName.Value="Screw",Fields!QTY.Value,0))
      =Sum(IIF(Fields!ItemName.Value="Bolt",Fields!QTY.Value,0))
      

      然后,根据数据集,如果当前月份是“2017 年 3 月”,我可以将 Month Total 的表达式构建为

      =Sum(IIF(Fields!ItemName.Value="Screw" and Fields!Month.Value="Mar 2017",Fields!QTY.Value,0))``
      =Sum(IIF(Fields!ItemName.Value="Bolt" and Fields!Month.Value="Mar 2017",Fields!QTY.Value,0))
      

      这些示例在这个问题中使用了我的示例数据集。由于我无法对日期进行硬编码,想要使用参数并且需要进行计算,这就是我实际使用的:

      SUM(iif(DateAdd(dateinterval.Day,-1,DateAdd(dateinterval.Month,1,Fields!REL_DATE.Value))= Parameters!ReportingDate.Value,
      Fields!Total_OnTime.Value,0))/SUM(iif(DateAdd(dateinterval.Day,-1,DateAdd(dateinterval.Month,1,Fields!REL_DATE.Value))= Parameters!ReportingDate.Value,
      Fields!Total.Value,0))
      

      希望这对其他人有所帮助。

      【讨论】:

        猜你喜欢
        • 2016-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多