壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 633|回复: 0

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

[复制链接]
发表于 2012/3/9 13:08:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
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,>)

该贴已经同步到 xiaoerp的微博
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 03:31 , Processed in 0.012583 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表