MDX 表达式学习笔记

Count函数.

Distinct函数.

existing关键字.

format_String的值

TopCount(exp1, number, exp2): 返回number个exp1集合内 按照exp2降序排序的集合

MDX 表达式学习笔记_第1张图片

常用属性函数

MDX 表达式学习笔记_第2张图片

使用properties能获取的特性

MDX 表达式学习笔记_第3张图片

MDX 表达式学习笔记_第4张图片

比如

WITH
MEMBER [Measures].[Parent Member Name] AS
    IIF(
        [Product].[Product Categories].CurrentMember.Properties
                  ("Level_Number",TYPED)=0,
        "Not Applicable", 
        [Product].[Product Categories].CurrentMember.Parent.Name
         )
member [Measures].[lvNum] as     [Product].[Product Categories].CurrentMember.Properties
                  ("Level_Number")     
SELECT
    {([Measures].[Parent Member Name]),[Measures].[lvNum]} ON COLUMNS,
    {[Product].[Product Categories].AllMembers} ON ROWS
FROM [Step-by-Step]
MDX 表达式学习笔记_第5张图片

solve_order指定计算列的执行顺序

 

看一个基本的mdx

WITH
MEMBER [Product].[Category].[All Products].[X]AS
([Measures].[Internet Sales Amount],([Product].[Category].[Bikes]))+1
//member [Measures].[totalPecent] as 
//    [Measures].[Internet Sales Amount]/([Product].[Category].[All Products],[Measures].[Internet Sales Amount])
//    ,format_string="percent"
SELECT
{
    ([Date].[Calendar Year].[CY 2003]),
    ([Date].[Calendar Year].[CY 2004])
}*
{
    [Measures].[Internet Sales Amount]
//    ,[Measures].[totalPecent]
}
 ON COLUMNS,
{
[Product].[Category].allmembers
} ON ROWS
FROM[Step-by-Step]
MDX 表达式学习笔记_第6张图片

如图. 最后一个是Bike的值+1.  而标准的表达式写法 是(作用范围, 度量值).

假设, 我们想知道每个分类的销售额占总的销售额的比例, 应该怎么做.  思考. 增加一个数据列, 被rows打烂的每个单元格是 该单元格的度量值除以总的产品的度量值.

member [Measures].[totalPecent] as
    [Measures].[Internet Sales Amount]/([Product].[Category].[All Products],[Measures].[Internet Sales Amount])
    ,format_string="percent"

[Measures].[Internet Sales Amount] 没有指定作用范围, 因此会被rows的产品给切开. 如果指定了作用域, 比如

([Product].[Category].[All Products],[Measures].[Internet Sales Amount]),  这样就限制得到一个所有产品的汇总.   有了这个汇总值, 我们就可以计算每个分类占所有产品销售量的总额了. 得到计算列如上.  结果如图

MDX 表达式学习笔记_第7张图片.

 

看一个例子

MDX 表达式学习笔记_第8张图片.

这个count函数, 计算的是产品的总数量. 相当于select count(*) from product表. 得到是397个.

这样理解 由于, 这算是个cube外的度量值, 和任何维度(在这里是分类维度)没有任何关系, 因此它没有被分类维度拆开打散.

如果, 我们想得到每个分类的产品个数呢.  使用existing关键字. 它能强制在某一个维度区域上(这里是分类)进行计算.

MDX 表达式学习笔记_第9张图片这样就不一样了.  得到我们想要的结果.

 

 

来看看TopCount, 并且理解一下 域 的概念

WITH
    SET [Top 10 Products of 2003]    AS
    TOPCOUNT(
        {[Product].[Product].[Product].Members},
        10,
        ( [Measures].[Internet Sales Amount], [Date].[Calendar Year].[CY 2003])
    )
 
SELECT
    {
        [Measures].[Internet Sales Amount]
    } ON COLUMNS,
    {[Top 10 Products of 2003]} ON ROWS
FROM[Step-by-Step]
WHERE ([Date].[Calendar Year].[CY 2004])
;假设我们现在是没有where条件的. 得到是下面的这个结果,  是销量在2003年度前十的产品的总销售额(是数据库内所有的总销售哦, 而不仅仅只是2003年度的. 不过排名确是2003年度的排名). 

MDX 表达式学习笔记_第10张图片

假如改成这样MDX 表达式学习笔记_第11张图片.  这里得到的是. 数据库销量前十的产品排序. 和上面明显不一样了吧.

MDX 表达式学习笔记_第12张图片

 

OK. 去掉所有的注视. 得到的是. 2003年度销量前十的产品, 在2004年度的销售额..

MDX 表达式学习笔记_第13张图片看. 有些2003年有销售的产品. 在2004年就没有销售了.

 

如果这个时候. 想增加一列. 显示这些产品的2003年的销售, 作为对比的话呢. 我们思考一下. 应该就是一个(度量值, 时间限定)image

得到

MDX 表达式学习笔记_第14张图片

同理, 我们想计算一下2003年的销量, 占所有销量的总额也可以增加两个计算列

增加如下

member Measures.sales2003OfAll as
        ([Measures].[Internet Sales Amount],[Date].[Calendar Year].[CY 2003])/[Measures].[Internet Sales Amount]
        ,format_string="percent"

 

最终如下

WITH
    SET [Top 10 Products of 2003]    AS
    TOPCOUNT(
        {[Product].[Product].[Product].Members},
        10,
        ( [Measures].[Internet Sales Amount], [Date].[Calendar Year].[CY 2003]
        )
    )
    member Measures.sales2004 as
        ([Measures].[Internet Sales Amount],[Date].[Calendar Year].[CY 2004])
    member Measures.sales2003 as
        ([Measures].[Internet Sales Amount],[Date].[Calendar Year].[CY 2003])
    member Measures.salesAll as
        ([Measures].[Internet Sales Amount])
    member Measures.sales2003OfAll as
//        iif(
        ([Measures].[Internet Sales Amount],[Date].[Calendar Year].[CY 2003])/
        ([Measures].[Internet Sales Amount],[Date].[Calendar Year])
        ,format_string="percent"
SELECT
    {
         Measures.sales2004
        , Measures.sales2003
        ,Measures.salesAll
        ,Measures.sales2003OfAll
    } ON COLUMNS,
    {[Top 10 Products of 2003]} ON ROWS
FROM[Step-by-Step]

 

MDX 表达式学习笔记_第15张图片

你可能感兴趣的:(MDX 表达式学习笔记)