【问题标题】:SSRS compare week to the same week number from previous yearSSRS 将周数与上一年的同一周数进行比较
【发布时间】:2015-04-21 22:44:27
【问题描述】:

我正在处理从 OLAP 多维数据集获取数据的 SSRS 报告。在 OLAP 多维数据集中,我有一个名为 WeekOfYear 的字段,它根据日期为我提供一年中的周数。例如,1 月 1 日的第 1 周(如果 1 月 1 日是星期一)和 1 月 8 日的第 2 周。我的数据按此字段分组,但现在我希望能够将一年中这一周的数据与一年中前一周的数据进行比较。就像比较 2015 年的第 1 周和 2014 年的第 1 周一样。无论如何我可以做到这一点吗?我很感激任何帮助。谢谢。

【问题讨论】:

  • 您的 OLAP 多维数据集是使用 SSAS 构建的吗?您有什么理由尝试在报告中完成此操作,而不是在多维数据集中定义计算度量?
  • 你能向我解释一下如何做 GShenanigan 吗?

标签: reporting-services


【解决方案1】:

有一个 LookUp 功能应该能够满足您的需求。

您提到您有一个 WeekOfYear 字段。这也假设您有一个 Year 字段(或者可以使用 **YEAR(Fields!YouDateField.Value) 计算它)

=LookUp(Fields!YourYearField.Value - 1 & "|" & Fields!WeekOfYear.Value, Fields!YourYearField.Value & "|" & Fields!WeekOfYear.Value, Fields!YourValueField.Value, "YourDataSet")

如果您实际上是对多维数据集中的多行数据求和,则需要使用 LookUpSet 来获取所有值并使用自定义函数对它们求和(因为 Microsoft 无法设想用户想要对多条记录求和)。幸运的是,用户已经创建了一个函数 - SumLookup。如果需要,请参阅How to combine aggregates within a group with aggregates across groups within SSRS

【讨论】:

  • 嗨,汉诺威,我还不明白。我的报告按商店按行分组,我有一个按年份和每周分组的列组。我正试图在它旁边获得另一周的年度组,但按上一年的相同周数进行分组。知道如何做到这一点吗?
【解决方案2】:

如果您有权访问 OLAP 多维数据集并且可以对其进行编辑,则可以在多维数据集上定义一个新的计算度量。这将如何工作取决于您的日期层次结构的设置。在 Report Builder/Visual Studio 中构建数据集时,您还可以通过查询设计器访问它并定义计算的度量。

在多维数据集浏览器中右键单击并选择“新建计算成员”。

由于数字 7 与 365 或 366 不完全吻合,因此报告年份中的周数可能会很困难,因此您的最终结果总是略多于 52 周。由于 1 月 1 日可能是一年的星期日,而下一年的星期二(2012/2013),直接比较这些并不总是一个好主意。因此,人们可以通过根据日期维度定义一年中的 7 天周来解决此问题。一年你可能有 52 周,另一年你可能有 53 周。这有点离题,所以我将链接到 explanation of this here,但重要的是要意识到这一点,以便在下面实施我的建议。

假设您在日期维度上有一个很好的层次结构,可以聚合周到年级别,您可以使用 ParallelPeriod 函数在多维数据集中创建一个新度量。

[Measures].[SalesSPLY] AS  
   (
        ParallelPeriod
        (
            [Dim Date].[ReportingCalendar].[ReportingYear],
            1,
            [Dim Date].[ReportingCalendar].CurrentMember
        ),
        [Measures].[Sales]
    )

我的示例 MDX 假设您已经在日期维度上创建了一个名为 ReportingCalendar 的层次结构。你的名字可能不同。

现在,如果您浏览您的多维数据集并选择 WeekOfYear、Sales 和 SalesSPLY,您将看到今年第 1 周的值以及去年的值。

OLAP 多维数据集非常擅长这种基于时间的智能,因为它们可以非常快速地提供聚合和偏移数据,而这种方式在 RDBMS 或 SSRS 本身中运行会更慢。

【讨论】:

  • 我试过了,但我得到的只是空值。知道可能是什么吗?
  • 这可能是由于您在日期维度中设置了层次结构。如果您的周和年属性之间没有自然联系,那么它将无法跳回一年。我的答案中的链接解释了如何设置层次结构以使用新的“ReportingYear”类型属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 2017-06-20
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多