MDX重点函数
成员函数
1、.CurrentMember
- 获取运行时当前的成员,用法:<Dimension>.CurrentMember 。
2、.Parent
- 获取运行时当前的成员的父成员。用法:<Member>.Parent。
3、.PrevMember/.NextMember
- 返回当前成员的前一个/后一个成员。<Member>.FirstChild/LastChild
4、.FirstChild/.LastChild
- 返回当前成员的第一个/最后一个子成员。语法:<Member>.FirstChild/LastChild
5、.FirstSibling/LastSibling
- 返回当前同级的第一个/最后一个成员。语法:<Member>.FirstSibling/LastSibling。
- 相当于 <Member>.Parent.FirstChild/.lastChild
6、Ancestor
- 返回特定级别的祖先成员。语法如下:
- Ancestor(<Member>, <Level>)
- Ancestor(<Member>, <Numeric Expression>)
-
([Measures].[总电量], [运营类型大类].[运营类型大类].[运营类型大类].CurrentMember)/ sum(Ancestor([运营类型大类].[运营类型大类].[运营类型大类].CurrentMember,1))
7、LAG
- 返回当前成员开始往前数的本层的第几个成员,语法:<Member>.Lag(n)。
- n是索引,0是它本身,1是前一个(.PrevMember)。
8、OpeningPeriod/ClosingPeriod
- 返回某个层次上第一个/最后一个后代成员,语法:OpeningPeriod([<Level>[, <Member>])。
9、ParallelPeriod
- 返回一个成员同层次对应位置的成员。语法:ParallelPeriod([<Level>[, <n>[, <Member>]]])。
- 在时间维度上取同期(如上年同期)等时候要用到它。
- 使用 PARALLELEPRIOD(Level, N, Member) 先把同比值查询出来,Level 指定的是年,1 表示 1年前,Member 就是指当前成员并且表示月。所以整个表达的意思就是查询当前成员1年前的相对应的那个月的 Reseller Sales Amount 的值是多少
其它函数
1、IS
- 判断是否为同一个对象。语法: object is object2。
2、IsEmpey
- 判断一个值是否为空。语法:IsEmpey(表达式)。
3、IIF
- 根据条件返回值,类似 Excel 的 If 函数。语法:iif(<布尔表达式>, <值 1>, <值 2>)。
- 如果布尔表达式为真,返回值 1,否则,返回值 2。
4、ITEM
- 根据索引返回集合中元素。语法:item(set, <index>)。
- 返回类型一般为元组。
计算成员
- 假设你想创建一个度量,它的值不是来自事实表的列,而是来自一个 MDX 公式。一种方式使用 with member 字句,如下图:
- 如果每个 MDX 查询中包含这个子句,更好的办法是,把这个成员定义到schema中,作为Cube定义的一部分,如下:
- FORMAT_STRING 属性值同样可以使用一个表达式。当格式化一个特定单元格时,首先这个表达式会被运算以产生一个格式字符串,然后把这个格式字符串应用到单元格。下面使用一个条件化的格式字符串:
-
<CalculatedMemberProperty name="FORMAT_STRING" expression="Iif(Value < 0,'|($#,##0.00)|style=red', '|$#,##0.00|style=green')"/>
- 计算成员的另外一个属性是 DATATYPE,可以有 String、Integer 或 Numeric 这些取值,如下:
- 可以给计算成员指定 SOLVE_ORDER 属性,用于确定计算时的优先级,如下:
- SOLVE_ORDER 属性是一个整数,默认是 0,值大者胜出。