全部文档
文档中心多维表达式MDX语法MDX的数据类型

MDX的数据类型

一个整数或非整数的数值。

True /false。函数或者逻辑表达式可以返回布尔类型的值。

字符串用单引号包围起来表示 (’ … ‘)。

成员,或者称维度/度量成员。目前在财务模型中,仅有维度成员,而没有度量成员。在先胜的维度元素中的每行数据就代表一个维度成员。在一个维度中的成员名是不允许重复的,而成员描述可以重复。 成员表达式包含成员标识符和可以返回一个成员的函数。 关于成员标识符,在国际通用的MDX语言中,成员的表示方式是:

Dimension_Name  
.[Hierarchy_Name.] [[{Member_Name | &Member_Key}.]... ] {Member_Name} 

而在先胜云MDX中,因为维度成员是全维度中唯一的,因此我们可以以[维度名].[成员]的方式来体现(在后期增加类似BI的维度建模能力后,我们再实现更加通用的MDX维度表达式的方法)。

[Scenario].[Actual]
[Account].[A0002]

在需要传递成员表达式的地方,也可以通过使用返回一个成员的函数来实现,常用的成员函数有:

Parent([Account].[A0002])    --返回科目A0002的非共享的Parent成员
FirstChild([Period].[Q1])    --返回期间Q1下的第一个子成员

需要注意的是,在先胜云平台的概念中,维度元素名不等于维度名。财务模型元素的不同列可以引用同一个维度元素,因此在对财务模型使用MDX语句中,这里[Account].[A0002]的Account表示的不是引用的Account元素名,而是财务模型的事实表上的Account这列的列名,因为目前默认是使用列名作为这个财务模型的某个维度名。

关于具体的函数的用法,请参考《MDX函数》。

在先胜云平台的维度中,我们定义#root根节点下的一棵树就是一个层次结构。因此,可以使用。暂不支持多种层次结构,因此 层次结构表示维度成员的一种架构。在先胜云平台中,我们定义维度有如下几种层次结构:

1、 维度自身的层次结构

先胜云的维度由于自身就具有父子结构,因此,该层级结构就是维度的默认层次结构。因此,通常我们使用的成员表达式[Account].[A0002]即表示是使用该默认层次结构。

2、 结合属性维形成的层次结构

先胜云的维度由于可以添加自定义属性,因此可以理解为这本身就是一种两层的层级结构,即上层是维度的该属性,下层是维度成员。 进一步来讲,当该属性指向另一个维度时(即我们通常所说的属性维),则这样就可以形成一个N层的层次结构,上层从第1层到N-1层都是该属性指向的维度自身的结构,第N层(即Base层)则是本维度的成员。 再更进一步的话,属性指向的维度也可以有一个属性指向第三个维度,以此类推。但无论如何,都可以形成一个第N层是本维度成员,上层是直接的属性维以及间接的属性维所组成的成员架构。 因此,对这类层次结构,是可以通过对维度添加Hierarchy的方式来定义层次结构。但当前,先胜云仅支持直接使用的属性维,因此可以直接使用该属性的名称作为该Hierarchy的名称。例如:

[Store].[Region]

Region是Store维度添加的一个自定义属性,指向另一个维度,例如Geography维度。则以上表达式表示Store维度的Region层次结构,如果需要定位到具体Region中的某个成员,则表达式如下:

[Store].[Region].[Shanghai]

元组,表示一组维度成员的组合,并且每个维度成员都不是来自同一个维度。元组用于标识财务模型/多维模型的特定多维数据块/切片。换言之,元组是一种成员向量。 元组标识符的完整表达式由一个或多个用圆括号括起的显式指定的成员组成: (成员表达式[,成员表达式…] )

比如,如下示例就是一个元组:

([Scenario].[Actual], [Account].[A0002], [Year].[2021])

而下例就不构成一个元组,因为存在两个Account成员:

([Scenario].[Actual], [Account].[A0002], [Account].[A0003],[Year].[2021])

.. note:: 在标准的MDX体系中,例如在微软和IBM的MDX中,会为元组中不存在的当前模型的其他维度补充隐式成员(在元组中明确定义的称为显式成员),即保证一个元组中包含该模型的所有维度。而在Oracle体系中,则不会为元组补充隐式成员。在先胜云的模型体系中,我们定义元组不会进行隐式成员的补充。

元组的有序集合称为集合(Set)。在 MDX 查询中,轴维度和切片器维度由这种元组集合组成。如果集合中有单个成员,则默认将该成员转为一个只有该成员的元组。 一个集的完整表达式由零个或多个显式指定的元组构成,各元组放在大括号中: { [ { 元组表达式 | 成员表达式 } [ , { 元组表达式 | 成员表达式 } ] … ] }

以下是两个集合的示例:

{[Account].[price], [Account].[vol], [Account].[amount]}

{([Year].[2021], [Period].[1]),([Year].[2021], [Period].[2]),([Year].[2021], [Period].[3]) }

比较常用的回一个集合的函数有CrossJoin, Union等。关于具体的函数的用法,请参考《MDX函数》。

一个集合中的每一个元组,其内部的维度以及维度的顺序都必须保持一致,如,下例给出了一些非法的集合,这些集合会在解析时被校验并抛出错误信息。

{[Account].[price], [Account].[amount], [Scenario].[Actual]}    --前两个元组都只有Account维度,第三个里有Scenario维度

{([Year].[2021], [Period].[1]),([Year].[2021], [Period].[2]),([Year].[2021], [Scenario].[Actual]) }   --前两个元组都是Year和Period的组合,第三个元组是Year和Scenairo的组合。

{([Year].[2021], [Period].[1]),([Year].[2021], [Period].[2]),([Period].[3], [Year].[2021]) }    --第三个元组中Year和Period维度的顺序同前两个元组不一致

回到顶部

咨询热线

400-821-9199

我们使用 ChatGPT,基于文档中心的内容以及对话上下文回答您的问题。

ctrl+Enter to send