(我希望我的头衔清楚)
我有一个MDX声明导致:
显示的数据是金额(例如成本)。
现在我想比较每个项目的项目支出,看看是否存在时间差异。因此,我希望获得一个虚构的时间轴(开始月份,月份+ 1,月份+ 2,......月份+60)以及每个相对月份的每个项目的支出。
我将给出一个数据示例来说明(附图)。 (将绿色部分视为项目的生命周期 - 您可以假设生命周期内的成本为0,生命周期外的成本为零):
我想我可以为此编写一个相当复杂的MDX(例如使用当前期间作为开始月份并添加12个月),然后为每个项目查找“当前预计期间” - “开始日期”中的金额该项目“。但它会有点乱。
有没有更简单的方法来做到这一点。例如,使用一个或多个icCube的自定义Matrix / Vector函数?我想在窗口小部件中使用最终结果以图形方式显示数据。
答案 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))。此解决方案的缺点是我们需要激活此计算的度量。
希望有所帮助