我正在为 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
)
你仍然得到同样的错误吗?