• 数据仓库MDX实际应用


    今天的项目需要用数据仓库的MDX来获取数据,项目的基本已经做完了,比较了一下原来用sql写的

    方法,数据仓库真是方便,并且相对简单的多,当然,首先是要熟练MDX语法才行,因为刚接触数

    据仓库,语句虽然写出来了,但是还是有很多不熟悉的,特此总结一下。
    项目的需求很简单,根据查询条件,条件中包括年,月,显示前11个月的计划销售量和实际销售量

    和总的销售量,如2009年,6月,显示从2008年7月,到2009年6月每个月的销量和到6月为止的总计划

    量和销量。
    以前用sql写,麻烦在这前11个月的处理,要定义12个时间变量,通过时间函数dateadd()取得真实的时

    间,显示的时候要通过case判断,还要对不同等级的客户进行group by显示
    ,一共写了100多行的sql,现在用MDX,20几行就搞定了,写完的MDX如下:
     
    with member [Measures].[year_quantity] as
        sum([date].[月份].&[2009-01-01T00:00:00]:[date].[月份].&[2009-06-01T00:00:00],[Measures].

    [Month_Quantity])
    member [Measures].[year_plan] as
        sum([date].[月份].&[2009-01-01T00:00:00]:[date].[月份].&[2009-06-01T00:00:00],[Measures].

    [Month_Plan_Quantity])
    member [Measures].[quantity_rate] as
        [Measures].[year_quantity]/[Measures].[year_plan]*100
    member [Measures].[year_expense] as
        sum([date].[月份].&[2009-01-01T00:00:00]:[date].[月份].&[2009-06-01T00:00:00],[Measures].

    [Expense_Amount])
     
    select {
    [Measures].[year_plan],[Measures].[year_quantity]
    ,[Measures].[quantity_rate],[Measures].[year_expense]
    ,[Measures].[Year_Acti_Number],[Measures].[Month_Quantity]
    ,[Measures].[前一月进货量],[Measures].[前二月进货量]
    ,[Measures].[前三月进货量],[Measures].[前四月进货量]
    ,[Measures].[前五月进货量],[Measures].[前六月进货量]
    ,[Measures].[前七月进货量],[Measures].[前八月进货量]
    ,[Measures].[前九月进货量],[Measures].[前十月进货量]
    ,[Measures].[前十一月进货量]
    } on 0
    ,non empty(
    ([cust_grade].[cust_grade].[cust_grade],[cust_grade].[Cust_Grade_Name].[Cust_Grade_Name])
    *([cust].[Cust].[Cust],[cust].[Cust_Name].[Cust_Name])
    *([cust].[City].[City],[cust].[City_Name].[City_Name])
    ) on 1
    from [医院销售分析]
    where ([月份].&[2009-06-01T00:00:00]:[月份].&[2009-06-01T00:00:00]
           ,[material].[Material].[Material].&[BM00000001]
           ,[subcompany].[organ].[organ].&[BG00000020]
           ,[office].[organ].[organ].&[BG00000074]
           ,[salesman].[Personnel].&[DJ00001495])
     
    上面的MDX有几个注意的地方:
    1.时间的区间表示:[date].[月份].&[2009-01-01]:[date].[月份].&[2009-06-01]
    从开始时间到结束时间用冒号[:]连接。
    2.Sql中有with来临时存储数据,MDX中用with member来临时存储。
    3.MDX语句中,where中不能显示此前已经出现的维度。
    数据仓库MDX的语法和sql有很大的不同,增加了许多函数,要想熟练应用MDX,对其函数要精通

    才行,这样才能应对复杂多变的需求
  • 相关阅读:
    iOS OC语言: Block底层实现原理 (转载)
    Objective-C中的Block(闭包) (轉載)
    http://oncenote.com/2015/09/16/Security-2-HTTPS2/ (轉載)
    iOS安全系列之一:HTTPS (轉載)
    Swif基本语法以及与OC比较三
    OC/Swift第三方添加出错解决方法
    Swift基本语法及与OC比较之二
    2015AppStore 上传步骤及常见问题
    使用AJAX日历控件,显示某些日期(CalendarExtender)
    在CheckBox中,仅仅允许选择一项
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1652012.html
Copyright © 2020-2023  润新知