财务模型核心模块之一的多维计算引擎,具有一个重要的功能,即在从财务模型中读取数据的同时,实时地进行数据的多维汇总计算。 关于MDX的详细内容,清参考 多维表达式MDX。
1.1 先胜云MDX计算语法
MDX计算语句的实例如下:
以上计算语句,会用2022年每个月份的所有产品的销售量,乘以各产品设定在Begbalance期间成员上的单价,得到各个产品的销售额。
1.2 模型元素确定
我们使用use表示其后的计算语句会使用哪个财务模型元素进行计算。
在先胜云平台中,由于不同文件夹下的元素可以重名,因此如果不能确定应用中没有重名的财务模型,需要在调用MDX查询时,同步传入元素的路径信息,如:“cube_test=root_folder/test_folder/mdx_test/cube1.cub”。
确定了使用的财务模型后,在遇到下一个Use语句之前,所有的计算语句都会使用当前的财务模型作为计算的目标模型。
1.3 计算范围定义语句和计算公式
1.3.1 Scope成员限定
MDX计算语句通过 Scope……End Scope的组合对需要被计算的目标值进行限定,随后在限定的范围内,对指定的维度成员进行计算。
Scope中通过维度成员的组合对计算范围进行限定,由于在计算公式中,等号的左边最多只允许放一个维度成员,因此,Scope中维度的数量必须大于等于所使用的财务模型的维度数量-1。
例如,当前财务模型有7个维度,分别是Entity、Account、Scenario、Version、Year、Period和Product。
那计算脚本可以这样写:
从上面的例子可以看到,在Scope的参数中一共放了Entity、Scenario、Version、Year、Period和Product这六个维度,而缺失了Account维度,因此Account维度成员可以出现在下面的计算公式的等号左侧([Account].[Total_Sales])。
在计算语句中,要求公式的等号左侧的维度必须在等号右侧的每一个项目中都出现,因此等号右侧也出现了科目成员([Account].[Volume]和[Account].[Price])。
以上的例子也可以写成下面的形式:
同第一个例子不同的是,原本等号左侧的[Account].[Total_Sales] 被移动到了Scope参数内,因此,该财务模型所有的7个维度就在Scope参数中齐全了。这样,下面的计算公式中,等号左侧就不允许再放任何维度的成员了,而需要用This来表示当前范围内的每一个成员。
注意,在计算脚本中,Scope中的维度和计算公式中等号左侧的维度,必须囊括财务模型的所有维度,也就是不允许少提供任何维度,否则,财务模型计算接口需要返回错误信息,提示缺少维度,并不执行计算操作。
1.3.2 Scope嵌套
Scope语句可以做嵌套,如下例所示:
在该例中,先用一个Scope限制了Scenairo、Version、Year、Period和Entity成员的范围,随后在内部的第一个Scope中计算食品的销售额,然后在第二个Scope中计算饮料的销售额,两类产品的计算公式不完全一样。
MDX语句嵌套后,外层的Scope成员范围和内层的Scope成员范围,最终在计算的时候会取并集,如下:
如上例中,外层的Scope中已经有Version成员[V1],内层的Scope又分别设置了[V2]和[V3],因此在计算的时候,会对所有食品类的产品(第一个里层的Scope)使用[V1]和[V2],对所有饮料类的产品(第二个里内层的Scope)使用[V1]和[V3]。
一个Scope内的计算公式可以连续写多个,他们共用同样的Scope限定范围。
回到顶部
咨询热线