Mdx 通过在定位日期(icCube)上设置每个系列的开始日期来调整时间序列

Mdx 通过在定位日期(icCube)上设置每个系列的开始日期来调整时间序列,mdx,iccube,Mdx,Iccube,(我希望我的标题清楚) 我有一份MDX声明,其结果是: 行中的时间(月) 列中的几个项目 显示的数据是一个金额(例如成本) 现在我想比较一下每个项目的项目支出,看看是否存在时间差异。因此,我想得到一个虚拟的时间轴(起始月、月+1、月+2、…月+60)以及每个相对月每个项目的支出 我将给出一个数据示例来说明(附图)。(将绿色部分视为项目的生命周期-您可以假设生命周期内的成本为0,生命周期外的成本为零): 我认为我可以为此编写一个相当复杂的MDX(例如,使用当前期间作为开始月份,并在其中添加1

(我希望我的标题清楚)

我有一份MDX声明,其结果是:

  • 行中的时间(月)
  • 列中的几个项目
显示的数据是一个金额(例如成本)

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

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

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


有没有更简单的方法。例如,使用一个或多个icCube的自定义矩阵/向量函数?我想在小部件中使用最终结果以图形方式显示数据。

我们正在寻找这样一个表:

+----------+-----------------+----------------+
|          |   Proj1         | Proj2          |
+----------+-----------------+----------------+
| Month 1  | (Month1,Proj1)  | (Month1,Proj2) |
| Month 2  | (Month2,Proj1)  | (Month2,Proj2) |
| Month 3  | (Month2,Proj1)  | (Month3,Proj2) |
+----------+-----------------+----------------+
 Name ,  addMonths
 First Month, 0
 Month 2, 1
 Month 3, 2
 ..
 Month N, n-1
在哪里

 MonthN is the Nth month from the start of the project
这个月在每个单元格上动态变化,并将取决于项目的开始日期。在MDX中,这是一个计算成员,其外观应如下所示:

MyCalcM AS IIF( [Project].current.isAll, null, ProjectStartDate([Project].current).lag(n) )
其中ProjectStartDate是返回项目开始日期的函数。我们将不介绍这个函数是如何实现的,但我们可以创建一个带有静态上下文的缓存模式级别,以便只计算一次

现在我们需要将这个计算出的度量值与[project date]维度相链接。 在MDX中,这可以通过我们所称的实用工具维度()来完成。效用维度是为每个成员定义转换(也称为calc.member)的维度,而不是经典的切片和骰子行为

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

一个是做一些类似于historgram定义的事情,这可能有点麻烦,因为您需要手动创建每个成员

另一个是直接从事实表创建新维度[Project Time],该维度在模式中未链接到任何类似以下事实:

+----------+-----------------+----------------+
|          |   Proj1         | Proj2          |
+----------+-----------------+----------------+
| Month 1  | (Month1,Proj1)  | (Month1,Proj2) |
| Month 2  | (Month2,Proj1)  | (Month2,Proj2) |
| Month 3  | (Month2,Proj1)  | (Month3,Proj2) |
+----------+-----------------+----------------+
 Name ,  addMonths
 First Month, 0
 Month 2, 1
 Month 3, 2
 ..
 Month N, n-1
我们必须创建一个计算成员,该成员使用成员键将此维度绑定到calc.members以计算滞后(滞后(n)->滞后([Project Time].current.key])。此解决方案的缺点是我们需要激活此计算度量


希望有帮助

简短的答案是肯定的,明天的长答案是:-)是的,肯定有帮助。当我就此联系您时,您还提供了创建新维度的选项,称为[Project Time],并在数据加载期间将其链接到数据。我想这可以通过使用ETL函数的基本转换来完成。我想我会选择这个选项。我检查了你的解决方案作为一个好的解决方案-但是-我将遵循第二个选项,如上所述。