博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

有关比较分析的MDX

Posted on 2011-06-28 11:07  徐正柱-  阅读(333)  评论(0编辑  收藏  举报

所有的例子中:month参数指向月粒度、year参数指向年粒度。日期层次结构为:年、季度、月、日

1. 去年同期:即查询月为200905的话,该指标为200805该指标
total([金额] within set parallelPeriod([日期].[日期层次结构].[年],1,[日期].[日期层次结构].[月]->?mon?))
2. 本年累计:即查询月为200905的话,该指标为200901-200905期间发生
total([金额] within set periodsToDate([日期].[日期层次结构].[年],[日期].[日期层次结构].[月]->?mon?))

3.  去年同期止累计:即查询月为200905的话,该指标为200801-200805期间发生
total([金额] within set periodsToDate([日期].[日期层次结构].[年],parallelPeriod([日期].[日期层次结构].[年],1,[日期].[日期层次结构].[月]->?mon?)))
同比增长  (以日期为行维)
([销售金额]- value(tuple(parallelPeriod([ARPD-Sale].[日期].[日期].[年]),[销售金额])))/ value(tuple(parallelPeriod([ARPD-Sale].[日期].[日期].[年]),[销售金额]))
环比增长   (以日期为行维)
([销售金额]-value(tuple(prevMember(currentMember([ARPD-Sale].[日期].[日期])),[销售金额])))/value(tuple(prevMember(currentMember([ARPD-Sale].[日期].[日期])),[销售金额]))
4. 有史以来累计发生:查询月为200805,则为从时间第一个节点截止200805期间发生

1)如果提示使用的是[日期].[日期层次结构].[月].[月 - Key]
   total([金额] within set
        filter(
             members([日期].[日期层次结构].[月]),
             [日期].[日期层次结构].[月].[月 - Key]<=?month?
              ))

2)如果提示使用的是[日期].[日期层次结构].[月]
    total([金额] within set
        lastperiods(1000,[日期].[日期层次结构].[月]->?month?))
5. 查询粒度为年,统计上半年、下半年
上半年余额(即时点类指标):
total([余额] within set subset(descendants([日期].[日期层次结构].[年]->?year?,[日期].[日期层次结构].[月]),5,1))
上半年发生额(即时段类指标):
total([金额] within set subset(descendants([日期].[日期层次结构].[年]->?year?,[日期].[日期层次结构].[月]),0,6))

这里subset()这个函数和substring()类似,只不过subset截取的是一个set(集合)中的某些成员而已,并且注意subset()第一个是0而不是1,这个和数组是类似的.