SSAS2005/2008中自定义MDX语句模板的使用

MDX语句的编写不但需要具有多维度思考的能力并了解上下文处理方式,而且因为成员名称的冗长而显得复杂。在SQL Server Management Studio及SQL Server Business Intelligence Development Studio中 ,附带了用于许多常见任务的模板,但是模板的真正作用在于它能为必须频繁创建的复杂脚本创建自定 义模板。

在本练习中,您将创建带有较少参数的简单MDX脚本模板(除法脚本,处理了除数为零或空的情况),但是模板也适用于较长的重复MDX脚本及其他类型的脚本(如存储过程等)。

1.创建自定义模板

1)在模板资源管理器中,展开“分析服务器模板”,右键单击模板树中任意位置,指向“新建”,再单

击“MDX模板”;

2)键入“MDX除法模板”作为新模板名称,再按 Enter 键;

3)右键单击“MDX除法模板”,再单击“编辑”。

4)在“连接到Analysis Service”对话框中,查看连接信息,再单击“连接”。

5)在查询编辑器中,键入以下脚本以实现处理了除数为零或除数为空的除法脚本模板:

        --除法模板(处理了除数为0、为空的情况)
        -- =============================================

        IIF(
            (
                IsEmpty()
                OR
                =0
            ),
            NULL,       
            (
                ()
                /
                ()
            )
        )

 

      SQL Server Management Studio 提供的模板脚本包含了可以帮助您自定义代码的参数。模板参数定义将使用格式 ,其中:

  • parameter_name 是脚本中参数的名称。
  • data_type 是参数的数据类型。
          在此示例中:代表除数,类型是mdx变量;

    代表被除数,类型也是mdx变量;

  •      在定义MDX查询时使用“替换模板参数”对话框可以将值插入到脚本中,从而快速生成合法的MDX脚本片断。

2. 测试自定义模板

  •      1)在SQL Server Management Studio的MDX查询语句编辑器中(或者在SQL Server Business Intelligence Development Studio的计算成员编辑器代码窗口视图中),将“除法脚本”拖放到工作区中的对应位置;
  •      2)在主菜单的“查询”菜单中,单击“指定模板参数的值”菜单项。
  •      3)在“替换模板参数”对话框中,为value_clause 值键入 “[Measures].[销售毛利]”(不包含分号),为divisor_clause 值键入 “[Measures].[销售收入]”;
  •      4)再单击“确定”关闭“替换模板参数”对话框,则系统并脚本编辑器中自动生成计算“销售毛利率”的MDX语句。
  •   3.小节

         
  •     通过此方法,在使用SSAS中可逐渐积累,为频繁执行的任务创建自定义模板,并将自定义脚本组织模板文件夹中,可以形成常见任务的自定义脚本库。
  • 附录A:自定义模板,对指定的表达式进行前期比较,并生成文字论断

    --=======================================

    -- 上期比较陈述   
        MEMBER [Measures].[当期] AS
            ()
        MEMBER [Measures].[上期] AS
            ([Measures].[当期],[时间].[Fiscal].CurrentMember.PrevMember)
        MEMBER [Measures].[增长率] AS
            IIF(
                    (
                        IsEmpty([Measures].[上期])
                        OR
                        [Measures].[上期]=0
                    ),
                    NULL,       
                    (
                        ([Measures].[当期]-[Measures].[上期])
                        /
                        ([Measures].[上期])
                    )
            )
        MEMBER [Measures].[增长陈述] AS       
            CASE
                WHEN
                    [Measures].[增长率]=0
                    THEN
                        '与上月基本持平'
                WHEN
                    [Measures].[增长率]>0
                    THEN 
                        VBA!Format(VBA![abs]([Measures].[增长率]) ,'比上月增加0.00%')
                WHEN
                    [Measures].[增长率]<0
                    THEN

    VBA!Format(VBA![abs]([Measures].[增长率]),'比上月减少0.00%')
            END
    --=============================================

    附录B:自定义模板,简单比较分析陈述模板

    --=======================================

     MEMBER [Measures].[<陈述名称,mdx_string,>] AS  
      CASE
       WHEN [Measures].[<原指标名称,mdx_string,>]
        >  
        [Measures].[<参照指标名称,mdx_string,>] THEN
        '比<参照系描述,mdx_string,>增加'+VBA![Format](
         [Measures].[<原指标名称,mdx_string,>]
         -
         [Measures].[<参照指标名称,mdx_string,>]
         ,"#.##")
       WHEN [Measures].[<原指标名称,mdx_string,>]
        <
        [Measures].[<参照指标名称,mdx_string,>] THEN
        '比<参照系描述,mdx_string,>减少'+VBA![Format](
         [Measures].[<参照指标名称,mdx_string,>]
         -
         [Measures].[<原指标名称,mdx_string,>]
         ,"#.##")
        
       ELSE
        '与<参照系描述,mdx_string,>基本持平'
      END

    --=============================================

    附录C:自定义模板,求指定指标的去年平均值

    --=======================================


    --求指标去年平均值
     
    AVG(
     DESCENDANTS(
        ANCESTOR([时间].[Fiscal].CurrentMember,[时间].[Fiscal].[年]).PrevMember,
        [时间].[Fiscal].[月度]
     ),
     [Measures].[库存台数]
    )

    --=============================================

    附录D:自定义模板,求指定指标的前N期值

    --=======================================

     --求指标在指定级别上的前N同期值
    MEMBER [Measures].[<metric_short_name,mdx_name,>上<timespan_N,mdx_int,><level_short_name,mdx_name,>同期值]
    AS
     (
      PARALLELPERIOD(
       [时间].[Fiscal].[<level_short_name,mdx_name,>],
       <timespan_N,mdx_int,>,
       [时间].[Fiscal].CurrentMember    
      ),
      [Measures].[<metric_short_name,mdx_name,>]
     )

     

    --=============================================

    附录E:自定义模板,对指定指标的分段统计考察对象在各段内的数量

    --=======================================

    WITH
     SET tempSet AS
      <segment_set,mdx_set_def,>

     MEMBER [Measures].[<segment_Low_name,string,>] AS
      Count(Filter(
        tempSet,
        <metric_name,mdx_name_def,>
         <
         <segment_Low_bound,double,>
         )
      )
      
     MEMBER [Measures].[<segment_Middle_name,string,>] AS
      Count(Filter(
        tempSet,
        <metric_name,mdx_name_def,>
         >=
         <segment_Low_bound,double,>
         AND <metric_name,mdx_name_def,>
          <
          <segment_High_bound,double,>
       )
      )
      
     MEMBER [Measures].[<segment_High_name,string,>] AS
      Count(Filter(
        tempSet,
        <metric_name,mdx_name_def,>
        >=
        <segment_High_bound,double,>
       )
      )
     
    SELECT
     {
      [Measures].[<segment_Low_name,string,>],
      [Measures].[<segment_Middle_name,string,>],
      [Measures].[<segment_High_name,string,>]
     } ON 0
     
    FROM
     [<cube_name,string,>]
    WHERE
     (<where_def,mdx_tuple,>)

     

 


    • 0
      点赞
    • 3
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值