关于Descendants()的理解

本文深入解析MDX中的Descendants函数,通过实例对比传统编程方式与使用该函数在多维数据分析中获取指定成员后代集的效率差异,强调了其在处理复杂层级数据结构时的便利性。

以下是联机丛书中的解释:

返回成员在指定级别或距离上的后代集,可以选择包括或不包括其他级别上的后代。 

对照《MDX解决方案》来看,简单可以这样理解:

考虑[Time].[YQMD].[Year].[2005],这是一个Year等级的成员,在其之下还有Quarter、Month、Day,组成了一个树状结构。

如果不用Descendants(),想查看[Time].[YQMD].[Year].[2005]之下每嫉妒合计,那可能只能手动写代码了,比如

select {[Product].[Tools], [Product].[Toys]} on columns,
    {[Time].[YQMD].[Quarter].[Q1, 2005],
     [Time].[YQMD].[Quarter].[Q2, 2005],
     [Time].[YQMD].[Quarter].[Q3, 2005],
     [Time].[YQMD].[Quarter].[Q4, 2005]}
    on rows
from sales
where [Measures].[Dollar Sales]

如果是月份、每日的数据,就更多了。

换成Descendants()就简单多了:

select {[Product].[Tools], [Product].[Toys]} on columns,
    Descendants(
        [Time].[YQMD].[Year].[2005],
        [Time].[YQMD].[Quarter],
        self
    )
    on rows
from sales
where [Measures].[Dollar Sales]

从这里可以看出MDX类似于传统编程语言的地方,就是用函数来实现,也就是类似与LINQ的方法语法(Fluent Syntax)。这种Fluent Syntax和传统SQL的查询语法(Query Expression)混杂在一起,就造成了MDX非常复杂、思维难以转换的特点,夸张点说,简直就是反人类啊。

转载于:https://www.cnblogs.com/ifan/archive/2012/12/29/2839204.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值