通过在锚定日期设置每个系列的开始日期来对齐时间序列(icCube)

时间:2017-03-29 15:15:40

标签: mdx iccube

(我希望我的头衔清楚)

我有一个MDX声明导致:

  • 行中的时间(月)
  • 列中的几个项目

显示的数据是金额(例如成本)。

现在我想比较每个项目的项目支出,看看是否存在时间差异。因此,我希望获得一个虚构的时间轴(开始月份,月份+ 1,月份+ 2,......月份+60)以及每个相对月份的每个项目的支出。

我将给出一个数据示例来说明(附图)。 (将绿色部分视为项目的生命周期 - 您可以假设生命周期内的成本为0,生命周期外的成本为零): enter image description here

我想我可以为此编写一个相当复杂的MDX(例如使用当前期间作为开始月份并添加12个月),然后为每个项目查找“当前预计期间” - “开始日期”中的金额该项目“。但它会有点乱。

有没有更简单的方法来做到这一点。例如,使用一个或多个icCube的自定义Matrix / Vector函数?我想在窗口小部件中使用最终结果以图形方式显示数据。

1 个答案:

答案 0 :(得分:0)

我们正在寻找像这样的表:

+----------+-----------------+----------------+
|          |   Proj1         | Proj2          |
+----------+-----------------+----------------+
| Month 1  | (Month1,Proj1)  | (Month1,Proj2) |
| Month 2  | (Month2,Proj1)  | (Month2,Proj2) |
| Month 3  | (Month2,Proj1)  | (Month3,Proj2) |
+----------+-----------------+----------------+

哪里

 MonthN is the Nth month from the start of the project

本月N在每个单元格上动态变化,并取决于项目的开始日期。在MDX中,这是一个计算成员,应该如下所示:

MyCalcM AS IIF( [Project].current.isAll, null, ProjectStartDate([Project].current).lag(n) )

其中ProjectStartDate是一个返回项目开始日期的函数。我们不会输入此函数的方式,但我们可以创建一个带有静态上下文的缓存模式级declared function,因此它只会被计算一次。

现在我们需要将此计算的度量与[项目日期]维度相关联。 在MDX中,这可以通过我们称之为实用程序维度(link)来完成。实用程序维度是定义转换的维度,即calc。成员,他的每个成员,而不是clasical切片和骰子行为。

构建此维度有不同的解决方案。

一个人正在做类似于定义的历史记录here,这可能有点麻烦,因为你需要手动创建每个成员。

另一个是直接从事实表中创建新维度[项目时间],该维度未在模式中链接到任何类似这样的事实:

 Name ,  addMonths
 First Month, 0
 Month 2, 1
 Month 3, 2
 ..
 Month N, n-1

我们必须创建一个计算成员,将此维度绑定到calc。使用成员密钥计算滞后的成员(滞后(n) - >滞后([项目时间] .current.key))。此解决方案的缺点是我们需要激活此计算的度量。

希望有所帮助