如何使用一元运算符对父子层​​次结构中排列的数据执行YTD聚合?

时间:2015-01-04 10:06:15

标签: parent-child mdx cumulative-sum iccube

我在OLAP数据库icCube中为帐户使用父子关系。为了包括财务逻辑,我使用了一元运算符。此外,我已经建立了几个使用多2个关系的帐户,并且所有工作都很顺利,除了....

当我想对结果应用时间逻辑时,例如通过以下方式显示2014年4月30日的年初至今的价值:

Aggregate(crossjoin ({[View].[View].[Periodiek]},PeriodsToDate([Tijd].[Kalender].[jaar],[Tijd].[Kalender].currentmember)))

我收到消息:

  

Aggregate():聚合'一元运算符'不支持(度量或计算度量/成员:[度量]。[bedrag])

显然,这不是这样做的方法。

如何在此设置中实现累积数字(最新时期)?

2 个答案:

答案 0 :(得分:2)

当前版本的icCube - 4.8.2 - 不支持聚合类型'一元运算符'的度量的聚合函数。请参阅聚合函数文档here

如果您使用多对多关系以及特殊度量聚合类型,则聚合函数有点狡猾。例如:

     Aggregate( { [Account1], [Account2] }, [Measures].[Special] )

如果[特殊]是一项带有' Sum'聚合类型和[Account1]和[Account2]有很多2的关系,我们将计算两次相同的'共享'金额(又称同一行计算两次)。

不支持使用聚合类型的其他措施以避免意外结果。这适用于聚合类型a Open / Close / Distinct Count。

您的案例中的解决方案是使用Sum函数:

  • SumCompactSetPeriodsToDate([Tijd]。[Kalender]。[jaar],[Tijd]。[Kalender] .currentmember)),[查看]。[查看]。[Periodiek])

紧凑型设置允许紧凑设置,以防您使用数天或数小时缩小设置。它是一种性能助推器。

如果您想要正确处理m2m关系和特殊度量聚合类型,可以使用icCube中的类别,请参阅此处doc。很快,它们允许动态地将成员定义为一组元组。

为了正确支持Aggregate,我们应该添加一个新方法,例如icAggregate,用作使用类别。聚合函数有点奇怪,暂时我们模仿SSAS ......

答案 1 :(得分:1)

要证明Sourav的评论,请尝试将您的措施更改为以下内容:

Aggregate(
  {[View].[View].[Periodiek]}
  * PeriodsToDate([Tijd].[Kalender].[jaar],[Tijd].[Kalender].currentmember)
  , [Measures].[MEASURE_NOT_bedrag]    //<<replace with actual
  )

你还得到同样的错误吗?