SSRS将上周与上一年的同一周数进行比较

时间:2015-04-21 22:44:27

标签: reporting-services

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

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:0)

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

在多维数据集浏览器中单击鼠标右键,然后选择"新计算成员"。

Add a calculated measure through the cube browser

由于数字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本身内运行会更慢。