MDX基础

本文介绍了MDX中的逗号和冒号操作符的应用,演示了如何使用.Members、.Children及Descendants()函数来获取多维数据集中的成员及其子级成员。通过具体实例展示了这些操作符和函数在实际查询中的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.逗号(,) and 冒号 (:)
2..Members
3..Children和 Descendants()
 
逗号(,) and 冒号 (:)
到现在为此我们已经看到逗号操作符被应用到了Mdx语句中;现在让我们学习更多的
关于逗号的知识。首先我们可以使用逗号来分割组件和它的属性。如下面的代码如示:
 
{ [Time].[January 2007], [Time].[February 2007],
[Time].[March 2007] }

   
上面语句的功能是列出2007年头三个月数据。

    在每一个维度的第一层的成员通常按着一个顺序排列(通常是按着key或是名称进行排列)。根据这个顺序,我们可以将两个成员中间的数据作为一个集合列出。而集合的两端就是两个成员。这两个成员使用冒号(:)分割。这有些和在Excel中指定单元格之间的范围类似。如下面的查询的结果是列出2005年9月和2007所10月的月份以及在产生目录中从Tools到Audio的数据。代码如下:

SELECT { [Time].[Sep,2005] : [Time].[Oct,2007] } on columns, { [Product].[Tools] : [Product].[Home Audio] } on rows FROM [Sales] WHERE ([Customer].[Lubbock, TX], [Measures].[Unit Sales])
我们还可以将逗号和冒号混合使用,如下面的代码如下:
 
{ [Time].[2005], { [Time].[January-2006] : [Time].[March-2006] } }

    上面的代码建立一个2005年的集合以及2006年1月至3月的集合。

.Members
获得一个维度、层次的成员集合是非常普遍的一种操作,也是进一步做其他操作的基础。.Members操作符可以操作一个维度、层次,并返回所有和这些元数据范围的所有成员的集合。如[Customer].Members返回所有的的Customer集合,而[Product].[Product Category].Members返回所有的成员的产品目录的成员。例子代码如下:
SELECT { [Scenario].Members } on columns, { [Store].Members } on rows FROM Budgeting


 当一个客户使用.Members(或是其他可以返回和响应的成员集合的元数据函数),分析服务和Essbase都不会包括任何被计算过的成员。在分析服务中还提供了AddCalculatedMembers()和.AddMembers函数来向集合中加入成员。

.Children


   
另一种使用频率非常高的选择方法就是获得成员的孩子(children)。我们可以使用下钻的操作,或者是简单地获得一个基于parent的成员的范围。MDX提供了一个.Children函数,这个函数将为我们实现这个功能。下面的MDX语句将在rows上选择[Product].[Tools]的成员和它的Children,代码如下:

SELECT { [Time].[Q3, 2005].Children } on columns, { [Product].[Tools], [Product].[Tools].Children } on rows FROM Sales WHERE ([Customer].[TX], [Measures].[Unit Sales])


我们可以通过这个函数获得任何一个有Children的成员的Children。如果我们获得一个叶子节点的孩子,就会得到一个空的集合。

使用Descendants()函数获得成员的子孙

    为了获得成员的更深层次的孩子。或是为了进行更深的搜寻,我们可以使用Descendants()函数。由于这个函数的选择过我,因此,我们只讨论一下它的基本的用法。

Descendants ()方法的语法如下:
Descendants (member [, [ level ] [, flag]] )
 
   Descendants()方法返回了和层次或当前的成员的子孙。下面是这个方法的一些选项:
 
SELF
BEFORE
AFTER
SELF_AND_BEFORE
SELF_AND_AFTER
SELF_BEFORE_AFTER
LEAVES

    SELF仅仅引用了层的成员,这是最学用的选项。如下面的代码选择了2007年的月份。代码如下:

SELECT
{ [Product].[Tools], [Product].[Toys] } ON COLUMNS,
Descendants (
[Time].[2007],
[Time].[Month],
SELF
)
ON ROWS
FROM Sales
WHERE [Measures].[Dollar Sales]

    由于SELF使用非常频繁,因此,这个选项是默认的。如果我们在代码中忽略了这个标志。如Descendants ([Time].[2007], [Time].[Month])同样返回2007年的月份列表。
    另外一个选项SELF_AND_BEFORE表示返回SELF和“before”层之间的所有成员。如下面的代码挑出了在2007年的四个季度和每个月份。代码如下:

{ [Product].[Tools], [Product].[Toys] } ON COLUMNS, Descendants ( [Time].[2007], [Time].[Month], SELF_AND_BEFORE ) ON ROWS FROM Sales WHERE [Measures].[Dollar Sales]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值