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



我正在为 OLAP 数据库 icCube 中的帐户使用父子关系。为了包含财务逻辑,我使用了一元运算符。此外,我还使用多 2-多关系设置了几个帐户层次结构,并且一切都非常顺利,除了......

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

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

我收到消息:

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

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

在这种情况下,

如何获得累计数字(迄今的期间数)?

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

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

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

如果 [Special] 是具有"总和"聚合类型的度量,并且 [Account1] 和 [Account2] 具有多-2-多关系,我们将计算相同"共享"金额的两倍(即同一行被计算两次)。

只是不支持具有聚合类型的其他度量值,以避免获得意外结果。这适用于聚合类型"开盘/收盘/非重复计数"。

在您的情况下,解决方案是使用 Sum 函数:

  • Sum( CompactSet( PeriodsToDate([Tijd].[卡兰德]。[贾尔],[蒂吉德]。[Kalender].currentmember) ) , [查看]。[查看]。[周期] )

紧凑套装允许压缩设置,以防您使用几天或小时来减少设置。这是一个性能助推器。

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

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

为了证明 Sourav 的评论,请尝试将您的度量更改为以下内容:

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

你仍然得到同样的错误吗?

相关内容

  • 没有找到相关文章

最新更新