MDX函数解析计算过程_Mondrian笔记

来源:互联网 发布:宋理宗头颅酒器知乎 编辑:程序博客网 时间:2024/05/17 04:11

1、组成部分

a)       mondrian.olap.fun定义了mdx内置的函数集,包括函数的name、signature、description和flags,其中flags一般有三个以上的字母,分别代表了函数的语法类型(在Syntax中定义)、返回类型(Category中定义)、参数类型(Category中定义)。这种函数继承至FunDefBase类。

b)       用户自定义的函数包括两种,实现了UserDefinedFunction接口,一种是根据已有的内置函数拼接MDX,这种函数在进行第一次Query生成后,调用Query的toString时,调用了Util的unparse时,通过MdxFuncWrapper拼接完成;另一种,在MDX解析时调用其execute时起作用。

2、加载过程

a)       RolapSchema在加载Schema XML时,会对全局GlobalFunTable初始化,其中包括内置方法BuiltinFunTable初始化和UserDefinedFuntion的初始化。

3、解析方式

a)       第一次解析Query时,在把ExpCompiler将Exp转换成Calc的过程中需要调用其compileCall进行解析生成对应的Calc

b)       然后使用Query的toString方法对生成的Query进行重新逆向解析,因为Query中包含用第一种方式用户自定义的方法,这种方法需要用Util的unparse进行解析。解析后返回MDX字符串。

c)       由于MDX字符串的变化就需要重新进行解析Query。

4、计算逻辑

a)       函数的计算真正发生在RolapConnection对Query的解析过程中,解析的结果是返回一个RolapResult。RolapResult创建使用了所谓的Evaluator算法:在第一步中,需要决定每个轴上的所有成员,被发现的成员都被加入到AxisMember,在此期间,调用方法的对象生成的Calc对象的方法。