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

Align time series by setting the start date of each serie on an anchor date (icCube)

(希望我的标题清楚)

我有一个 MDX 语句导致:

显示的数据是金额(例如费用)。

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

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

我想我可以为此编写一个相当复杂的 MDX(例如,使用当前期间作为开始月份并向其添加 12 个月),然后针对每个项目查找 "current projected period" 中的金额 - "start date of the project"。不过会有点乱。

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

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

+----------+-----------------+----------------+
|          |   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

这个 MonthN 在每个单元格上动态变化,并将取决于项目的开始日期。在 MDX 中,这是一个计算成员,应该类似于:

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

其中 ProjectStartDate 是 returns 项目开始日期的函数。我们不会输入这个函数是如何工作的,但我们可以创建一个带有静态上下文的缓存模式级别 declared function,这样它只会被计算一次。

现在我们需要 link 使用 [项目日期] 维度计算的度量。 在 MDX 中,这可以通过我们所说的效用维度 ( link ) 来完成。实用维度是定义转换的维度,又名计算。成员,对于他的每个成员,而不是经典的切片和骰子行为。

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

一个人正在做类似于直方图定义的事情here,这可能有点麻烦,因为您需要手动创建每个成员。

另一个是直接从一个事实 table 创建新的维度,[项目时间],它没有在模式中 link 编辑到像这样的任何事实:

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

我们必须创建一个将此维度绑定到计算的计算成员。成员使用成员键来计算滞后 ( lag(n) -> lag( [Project Time].current.key ) ) 。这个解决方案的缺点是我们需要激活这个计算出来的度量。

希望对您有所帮助