MDX常用函数

1.ParallelPeriod

--ParallelPeriod
with member [Measures].[a1] As 'ParAllelPeriod(Year,2,[时间].[月].&[2011]&[12])'
select ParAllelPeriod([时间].[月].&[2011]&[10].level,1,[时间].[月].&[2011]&[10]) on columns,
[Measures].[会员人数] on rows
from [BSUSYS_New]

2.Topcount

select [Measures].[会员人数] on 0,
topcount([时间].[月].[月],5,[Measures].[会员人数]) on 1
from [BSUSYS_New]

3.bottomcount

select [Measures].[会员人数] on 0,
bottomcount([时间].[月].[月],5,[Measures].[会员人数]) on 1
from [BSUSYS_New]

4.Toppercent(这些元素的累积合计至少为指定的百分比即指定月份的会员人数总和至少是总会员人数的50%)

select [Measures].[会员人数] on 0,
Toppercent([时间].[月].[月],50,[Measures].[会员人数]) on 1
from [BSUSYS_New]

5.bottompercent

select [Measures].[会员人数] on 0,
bottompercent([时间].[月].[月],50,[Measures].[会员人数]) on 1
from [BSUSYS_New]

6.TOPSUM(这些月份的累计会员>=1600000)

select [Measures].[会员人数] on 0,
TOPSUM([时间].[月].[月],1600000,[Measures].[会员人数]) on 1
from [BSUSYS_New]

7.BOTTOMSUM

select [Measures].[会员人数] on 0,
BOTTOMSUM([时间].[月].[月],500,[Measures].[会员人数]) on 1
from [BSUSYS_New]

8.Filter

select [Measures].[会员人数] on 0,
filter([时间].[月].[月],[Measures].[会员人数]>100000) on 1
from [BSUSYS_New]

9.generate(将集合应用到另一集合的每个成员)

复制代码
--Generate 最常见的实际用法是为一组成员计算复杂集表达式,如 TopCount。
select [Measures].[会员人数] on 0,
generate ([时间].[年].[年].members,
TOPcount([时间].[年].currentmember*[会员 - 注册门店].[省].[省].members,2,[Measures].[会员人数])) on 1
from  [BSUSYS_New]
/*将年份跟会员人数排名前2名的省份的集进行简单交叉联接将
显示所有时间的前2个省份(每年都重复),而不是每年的前两名省份*/
select [Measures].[会员人数] on 0,
[时间].[年].[年].members*TOPcount([会员 - 注册门店].[省].[省].members,2,[Measures].[会员人数]) on 1
from  [BSUSYS_New]
--以下示例说明如何使用 Generate 返回字符串:
with member MEASURES.GENERATESTRINGDEMO AS
generate ([时间].[年].[年].members,[时间].[年].currentmember.name)
member MEASURES.GENERATEDELIMITEDSTRINGDEMO AS
generate ([时间].[年].[年].members,[时间].[年].currentmember.name," and ")
select {MEASURES.GENERATESTRINGDEMO,MEASURES.GENERATEDELIMITEDSTRINGDEMO }on 0
from [BSUSYS_New]
复制代码

10.Descendants(Descendants 函数中的成员和级别必须属于同一层次结构)

select [Measures].[订单数] on 0,
descendants([创建时间].[年季月层次].[年].&[2011],[创建时间].[年季月层次].[月],SELF)  on 1
from YHDJBLMDataDW

11.Ancestor(在同一层次结构才行)

复制代码
WITH MEMBER Measures.x AS [Measures]. [Measures].[商品小票数]/ 
   (
   [Measures].[Measures].[商品小票数],  
      Ancestor 
         (
         [商品].[旧品类层次].CurrentMember,
         [商品].[旧品类层次].[旧大品类]
         )
   ), FORMAT_STRING = '0%'
SELECT {[Measures].[商品小票数], Measures.x} ON 0,
{
   Descendants 
      (
        [商品].[旧品类层次].[旧大品类].&[糖果类],
         [商品].[旧品类层次].[旧小品类], SELF 
      )
} ON 1
FROM [YHD_NEW]
复制代码

12.RANK

复制代码
WITH 
MEMBER [Measures].[Rank] AS
Rank(
[商品].[旧品类层次].CurrentMember,
[商品].[旧品类层次].CurrentMember.Siblings,
([Measures].[商品小票数])
)
SELECT
{
[Measures].[商品小票数],
[Measures].[Rank]
} ON COLUMNS,
order ({[商品].[旧品类层次].[旧大品类].Members} ,[Measures].[Rank]
,asc)ON ROWS
FROM [YHD_NEW]
复制代码

13.IsLeaf

复制代码
WITH
MEMBER [Measures].[ss] AS
IIF(
IsLeaf([商品].[旧品类层次].CurrentMember),
"N/A",
COUNT(
[商品].[旧品类层次].CurrentMember.Children
)
)
SELECT
{[Measures].[ss]} ON COLUMNS,
{[商品].[旧品类层次].[旧小品类].Members} ON ROWS
FROM [YHD_NEW]
复制代码

14.OpeningPeriod/ClosingPeriod

复制代码
SELECT OpeningPeriod
([时间].[日历层次].[月],[时间].[日历层次].[年].&[2010]) ON 0,
[Measures].[商品小票数] on 1
FROM [YHD_NEW]

SELECT ClosingPeriod
([时间].[日历层次].[季度],[时间].[日历层次].[年].&[2010]) ON 0,
[Measures].[商品小票数] on 1
FROM [YHD_NEW]
复制代码

15.AGGREGATE

复制代码
with member [商品].[aa]
AS AGGREGATE({[商品].[旧品类层次].[旧大品类].&[NULL], 
[商品].[旧品类层次].[旧大品类].&[N元系列], 
[商品].[旧品类层次].[旧大品类].&[车用产品], 
[商品].[旧品类层次].[旧大品类].&[宠物专用]})
SELECT [商品].[aa] ON COLUMNS,
[Measures].[商品小票数] on ROWS
FROM [YHD_NEW]
复制代码

16.VisualTotals

复制代码
with member [aa]
 AS 

        VISUALTOTALS(
                { 
                    [商品].[旧品类层次].[All], 
                    [商品].[旧品类层次].[旧大品类].&[NULL], 
                    [商品].[旧品类层次].[旧大品类].&[N元系列], 
                    [商品].[旧品类层次].[旧大品类].&[车用产品], 
                    [商品].[旧品类层次].[旧大品类].&[宠物专用]
                }
        )
        
SELECT 
{[Measures].[不重复商品小票数]}    ON COLUMNS, 
[aa]    ON ROWS
FROM [YHD_NEW]
CELL PROPERTIES VALUE, FORMATTED_VALUE, FORE_COLOR, BACK_COLOR


SELECT [Measures].[商品小票数] ON Columns,
   VisualTotals
   ({[商品].[旧大品类].[ALL]
,[商品].[旧大品类].&[NULL]
,[商品].[旧大品类].&[N元系列]
     }
      , '* - Visual Total'
   ) ON Rows
FROM [YHD_NEW]


SELECT {[Measures].[商品小票数],[Measures].[不重复商品小票数],
[Measures].[不重复渗透率]} ON Columns,
 VisualTotals({[商品].[旧大品类].[ALL]
,[商品].[旧大品类].&[NULL]
,[商品].[旧大品类].&[N元系列]
     })
 ON Rows
FROM [YHD_NEW]
复制代码

17.DrilldownLevel

复制代码
SELECT {[Measures].[商品小票数],
[Measures].[渗透率],
[Measures].[不重复商品小票数]} 
ON COLUMNS , 
{DrilldownLevel({[商品].[旧品类层次].[All]})}
ON ROWS  
FROM 
(
SELECT 
({[商品].[旧品类层次].[旧大品类].&[宠物专用], 
[商品].[旧品类层次].[旧大品类].&[车用产品], 
[商品].[旧品类层次].[旧大品类].&[N元系列], 
[商品].[旧品类层次].[旧大品类].&[NULL]}) 
ON COLUMNS  
FROM [YHD_NEW]
) 
复制代码

18.杂项

复制代码
/*instr*/
SELECT 
[Measures].[积金币次数] ON 0,
FILTER([产品].[产品名].CHILDREN,
INSTR([产品].[产品名].CURRENTMEMBER.NAME,'西王')>0
and INSTR([产品].[产品名].CURRENTMEMBER.NAME,'玉米')>0) ON 1
FROM [YHDJBLMDataDW]

/*rank*/
with set [aa] 
as filter (order (([产品].[产品名].children,[金币联盟会员].[省].children)
,[Measures].[积金币次数],bdesc),[Measures].[积金币次数]>10000)

member [Measures].[bb] as 
rank(([产品].[产品名].currentmember,[金币联盟会员].[省].currentmember),[aa])

select 
{[Measures].[bb],[Measures].[积金币次数]} on 0,
[aa] on 1 
from [YHDJBLMDataDW]

/*lastperiods和lastchild*/
with set [aa] as filter(order(lastperiods(4,[创建时间].[季度].&[2012]&[1])
,[Measures].[积金币次数],desc)
,[Measures].[积金币次数]>0)

member [Measures].[bb] as 
rank(([创建时间].[季度].currentmember),[aa])

select {[Measures].[bb],[Measures].[积金币次数]} on 0,
[aa] on 1 
from [YHDJBLMDataDW]

/*head 和tail*/
with set [top10province] as 
tail(topcount([产品].[产品名].children*[金币联盟会员].[省].children,10,
[Measures].[积金币次数]),5)

select [Measures].[积金币次数] on 0,
[top10province] on 1
from [YHDJBLMDataDW]

/*children/sibling/parent*/
select [Measures].[积金币次数] on 0,
filter([产品].[产品层次].
[商家].&[shengyuan].&[58优博].
&[08版新优博2段900g听装较大婴儿配方奶粉].siblings,[Measures].[积金币次数]>10000) on 1
from [YHDJBLMDataDW]

select [Measures].[积金币次数] on 0,
[产品].[产品层次].
[商家].&[shengyuan].&[58优博].
&[08版新优博2段900g听装较大婴儿配方奶粉].parent on 1
from [YHDJBLMDataDW]

/*Descendants/ancestors/ascendants*/
select [Measures].[积金币次数] on 0,
order(filter(Descendants([产品].[产品层次].[商家].&[shengyuan].&[58优博],
[产品].[产品层次].[产品名],self_and_before),[Measures].[积金币次数]>150000),[Measures].[积金币次数],desc) on 1
from [YHDJBLMDataDW]

select [Measures].[积金币次数] on 0,
order(filter(ancestors([产品].[产品层次].[商家].&[shengyuan].
&[58优博].&[10版优博4段400g盒装奶粉],
[产品].[产品层次].[商家]),[Measures].[积金币次数]>150000),[Measures].[积金币次数],desc) on 1
from [YHDJBLMDataDW]

select [Measures].[积金币次数] on 0,
ascendants([产品].[产品层次].[商家].&[shengyuan].&[58优博])on 1
from [YHDJBLMDataDW]

/*hierarchize 整理回层次结构的正常顺序*/
select [Measures].[积金币次数] on 0,
hierarchize(union(ascendants([产品].[产品层次].[商家].&[shengyuan].&[58优博]),
Descendants([产品].[产品层次].[商家].&[shengyuan].&[58优博],
[产品].[产品层次].[产品名],self_and_before)))
on 1
from [YHDJBLMDataDW]

select [Measures].[积金币次数] on 0,
[产品].[产品层次].[商家].&[shengyuan].firstchild.parent.children on 1
from [YHDJBLMDataDW]
/*openingperiod/closingperiod*/
with member [firstmonth] as
([Measures].[积金币次数]
,closingperiod([创建时间].[年季月层次].[月],[创建时间].[年季月层次]))

select {[firstmonth],[Measures].[积金币次数]} on 0,
[产品].[产品层次].[商家].&[shengyuan].children 
having [Measures].[积金币次数]>10000 and [firstmonth]>6028 on 1
from [YHDJBLMDataDW]
where [创建时间].[年季月层次].[年].&[2011]
复制代码

19.前12个月有积金币次数的情况,且倒序排列

复制代码
with set [lastmonth] as 
tail(filter([创建时间].[月].[月],[Measures].[积金币次数]),1)

set [last12months] as
order(lastperiods(12,[lastmonth].item(0).item(0)),
[创建时间].[月].currentmember.properties("Key0")
+VBA!Right([创建时间].[月].currentmember.properties("Key1"),2),desc)

select
[Measures].[积金币次数] on 0,
[last12months] on 1
from [YHDJBLMDataDW]


select
[Measures].[积金币次数] on 0,
Mtd([创建时间].[月].&[2012]&[5])on 1
from [YHDJBLMDataDW]
复制代码
原文地址:https://www.cnblogs.com/martin-roger/p/5534662.html