Mdx 通过在定位日期(icCube)上设置每个系列的开始日期来调整时间序列
(我希望我的标题清楚) 我有一份MDX声明,其结果是:Mdx 通过在定位日期(icCube)上设置每个系列的开始日期来调整时间序列,mdx,iccube,Mdx,Iccube,(我希望我的标题清楚) 我有一份MDX声明,其结果是: 行中的时间(月) 列中的几个项目 显示的数据是一个金额(例如成本) 现在我想比较一下每个项目的项目支出,看看是否存在时间差异。因此,我想得到一个虚拟的时间轴(起始月、月+1、月+2、…月+60)以及每个相对月每个项目的支出 我将给出一个数据示例来说明(附图)。(将绿色部分视为项目的生命周期-您可以假设生命周期内的成本为0,生命周期外的成本为零): 我认为我可以为此编写一个相当复杂的MDX(例如,使用当前期间作为开始月份,并在其中添加1
- 行中的时间(月)
- 列中的几个项目
有没有更简单的方法。例如,使用一个或多个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函数的基本转换来完成。我想我会选择这个选项。我检查了你的解决方案作为一个好的解决方案-但是-我将遵循第二个选项,如上所述。