《NCV61-语义模型红皮书new》由会员分享,可在线阅读,更多相关《NCV61-语义模型红皮书new(64页珍藏版)》请在金锄头文库上搜索。
1、商业分析平台 版本:6.1.0语义模型红皮书 日期:2012-06-08作者:商业分析平台语义模型红皮书版本:V6.1.0.201206082第 页目 录一、前言41.概念42.定位4二、结构41.应用模型42.语义模型5定义形态5执行流程7数据形态73.语义提供者8a)接口8b)扩展104.函数14a)函数解析14b)函数扩展145.参数16参数定义17参数引用17参数设置17参照依赖17自定义参照186.宏变量197.描述器208.数据加工21概念21定位21执行原理21使用22常见问题249.物化策略2410.复合语义模型2511.语义上下文2912.脚本规则29三、语义模型的管理321
2、.对象管理322.环境配置353.导入导出373.1导出逻辑:373.1.1导出文件的规则373.1.2使用导出功能373.2导入逻辑:393.2.1导入的规则393.2.2使用导出功能40四、功能扩展421.扩展语义提供者422.扩展业务函数433.使用数据加工434.自定义执行策略435.业务规则扩展436.元定义驱动扩展44五、范例471.脚本中引用参数范例47六、附录511.入门512.语义模型API573.语义函数594.其他函数595.脚本引擎616.针对查询引擎的改进617.性能监控618.多语言支持638.1全局宏变量638.2语义模型抽取多语638.3配置文件多语支持63秘密
3、UFIDA,2012第3 页一、 前言1. 概念SMART,即SemanticModelingforAnalysisReportToolkit ,分析报表语义建模工具。 2. 定位语义模型把面向技术的数据,组织成面向业务的数据,供业务人员查询分析使用二、 结构1. 应用模型上图为语义模型应用结构图。语义模型通过语义提供者,可以将多个数据源的数据进行整合。2. 语义模型定义形态下图展示了语义模型的内部结构,语义模型主要由以下几部分构成:1.1 元数据元数据是指描述数据的数据,是为了外界使用数据而对数据本身含义的阐述。拿我们最常见的二维数据(行列结构)举例来说,如果只有这些行列结构的数据,对我们来
4、说这将毫无意义。因为我们无法知道哪一列的数据代表什么含义,无法知道如何操作这些数据,更别提由这些数据分析出有用的信息。反过来,如果针对这些数据指定了元数据,我们就可以了解哪一列代表的业务含义,并且知道该列的数据类型、长度、精度 等。这样,我们就能对这些数据进行加工处理,分析提取出有价值的信息。同理,语义模型的元数据是对执行语义模型后获取的二维数据的描述。元数据针对结果数据的每一列都提供了下列信息:数据类型、字段显示名、字段名、备注、长度、精度 等。有了这些信息,我们就能知道在业务应用中该如何使用语义模型。1.2 语义提供者语义提供者,表述了一类取数方式,或者说如何提供数据的方式。在语义模型中,
5、语义提供者负责把一类业务取数过程以语义脚本的形式描述出来。为了能更好的理解这个概念,我们可以打这样一个比方:NC元数据、数据仓库、报表数据、总账数据 等 这些可提供数据的对象好比“数据水源”,而语义提供者好比“水泵”,语义模型好比“抽水机”。每种“数据水源”只支持特定的“水泵”来抽取数据。我们有了一种语义提供者“水泵”,就能抽取其对应的“数据水源”里的数据。语义模型中能指定多个语义提供者,就相当于“抽水机”挂接了多个“水泵”,我们就能从多个不同类型的“数据水源”来抽取数据。语义提供者负责抽取数据,同时对外提供元数据来描述这些数据。语义提供者的元数据一般是在语义模型内部使用。更多细节以及语义提供
6、者的扩展说明参见章节语义提供者。1.3 描述器描述器是指对数据操作的描述,例如:过滤、排序、分页、汇总 等。在语义模型中,描述器表述了对语义提供者抽取的数据的加工处理过程。更多细节参见章节描述器。1.4 首选项语义模型中的首选项包括三类数据:参数、宏变量、配置项。下面将分别介绍:1.4.1 参数参数是模型中代表动态信息的元素,用于响应用户的输入。参数给用户提供了控制模型执行过程的机会。更多细节参见章节参数。1.4.2 宏变量宏变量与参数类似,区别是,参数在模型执行时需要用户输入值;而宏变量不需要与用户交互,系统后台会根据上下文计算该值。更多细节参见章节宏变量。1.4.3 配置项配置项用于控制语
7、义模型的执行方式。执行流程语义模型的执行流程如下图所示:语义模型执行过程可分为以下步骤:第一步:语义模型脚本化语义模型中的对象结构将转变为字符串形式的语义脚本。第二步:脚本对象化通过脚本引擎把语义脚本解析为脚本模型,即把字符串形式的脚本 对象化。第三步:脚本模型翻译为SQL基于脚本模型,处理其中的语义函数,把脚本模型翻译为标准SQL语句。运行态描述器会在这一步被处理。第四步:执行sql,把结果集封装为DataSet,返回DataSet。由于运行态描述器的存在,每次执行语义模型时获取的最终sql都是不同的,但是,语义模型本身对应的脚本模型是相同的。基于性能考虑,我们可以把语义模型对应的脚本模型缓
8、存起来。这样一来,只有第一次执行语义模型时,我们需要完整执行上述四个步骤,接下来的每次执行,我们只需取得该缓存的脚本模型,再做第三、四步的处理即可。数据形态语义模型提供的数据可以以两种形态存在:数据集DataSet、数据表DbTable。从数据流转的角度来说,语义模型代表了一种取数管道,数据可以从管道中抽取出来。数据集DataSet代表了内存中的数据,或者说,数据在内存中以数据集DataSet为载体。数据表DbTable代表了数据库中的数据,或者说,数据在数据库中以数据表DbTable为载体。语义模型、数据集、数据表 这三者之间还存在互相转换的关系,下图形象的展示了这点:数据从语义模型这种数据
9、管道中加载到内存,就以数据集的形式存在;如果把数据集中的当前数据持久化到数据库中,数据就以数据表的形式存在;把数据从数据库中加载到内存中,就完成了数据表到数据集的转换;数据表可以以语义提供者的形式构成语义模型,完成数据从数据表到语义模型的流转;并且,语义模型经由视图化执行,最终的结果集将以数据表的形式呈现。数据在不同形态间流转时,改变的是数据载体,不变的数据本身的结构,即元数据。3. 语义提供者语义提供者,表述了一类取数方式,或者说如何提供数据的方式。在语义模型中,语义提供者负责把一类业务取数过程以语义脚本的形式描述出来。a) 接口语义提供者包括NC元数据、DW元数据、以及语义脚本和业务代码扩
10、展提供者。提供总帐、HR、供应链、报表等业务数据扩展。其整个体系结构可由下图表示:其中,Provider是语义提供者的接口;SemanticProvider是基础扩展抽象类,对能把取数过程以脚本形式描述的语义提供者可继承此类;SemanticDataProvider是语义数据扩展抽象类,对不能以脚本形式描述取数过程,只能提供二维数据的提供者,可继承此类。SemanticSqlProvider适用于提供者在运行时根据执行环境context返回不同取数sql 与SqlProvider的区别在于: SqlProvider的sql结构在定义态已经确定; SemanticSqlProvider是在运行时
11、,经过一系列业务处理,返回最终取数sql.上述图中,蓝色代表具体实现类。通过以上的介绍我们可以得知,Provider定义了语义提供者的接口规范,SemanticProvider、SemanticDataProvider、SemanticSqlProvider则是我们具体实现提供者时要继承的抽象类。现对这四个类的主要接口做重点介绍。l Provider接口方法方法说明String getCode()获取编码。该编码用于标示语义提供者MetaData getMetaData()获取元数据。元数据中包含了该提供者提供的数据的描述信息,例如:字段名、字段数据类型、字段精度 等String getTit
12、le()获取标题,即该提供者的显示名称MetaData provideMetaData(SmartContext context)构造元数据。入参参数context是提供者构造元数据时的执行环境。此方法通常在设计态使用,用于重新构造元数据。String provideScript(SmartContext context)构造语义脚本。入参参数context是提供者构造脚本时的执行环境。此方法通常在运行态使用,用于把业务取数过程转换为语义脚本。void setCode(String code)设置编码void setMetaData(MetaData metaData)设置元数据。此方法通常在
13、设计态使用,一般是先调用provideMetaData(context)构造元数据,然后调用此方法来把元数据保存在语义提供者。void setTitle(String title)设置标题,即显示名l SemanticProvider接口方法方法说明MetaData provideMetaData(SmartContext context)同Provider对于继承此类的提供者,必须实现此方法。String provideScript(SmartContext context)同Provider对于继承此类的提供者,必须实现此方法。l SemanticDataProvider接口方法方法说明D
14、ataSet provideData(SmartContext context)提供二维数据。入参context提供执行环境;返回结果数据以DataSet形式展现。DataSet主要包含两部分:二维数据数组、元数据。对于继承此类的提供者,必须实现此方法。l SemanticSqlProvider接口方法方法说明String provideSql (SmartContext context)提供sql。入参context提供执行环境;返回结果数据以sql形式展现。对于继承此类的提供者,必须实现此方法。b) 扩展前面介绍了语义提供者的整个体系结构,现在我们拿一个具体例子来讲解如何实现一个语义提供者。我们以比较简单的“数据表”这类取数方式来做示例。扩展语义提供者可分为以下三步:i. 实现语义提供者类由前文介绍,我们知道实现一个提供者有三种方式:1. 继承SemanticProvider:能把取数过程以脚本形式描述的语义提供者可继承此类我们现以数据表提供者为例来讲解如何以此种方式实现语义提供者。数据表提供者对应的实