《NCV61-语义模型红皮书(整理后)》由会员分享,可在线阅读,更多相关《NCV61-语义模型红皮书(整理后)(70页珍藏版)》请在金锄头文库上搜索。
1、 UAP 6.1 语义模型技术红皮书UAP 6.1语义模型技术红皮书 产业链开发部 编著目录第一章前言41.1概念51.2定位5第二章结构62.1应用模型72.2语义模型72.2.1定义形态72.2.2执行流程92.2.3数据形态102.3语义提供者102.3.1接口112.3.2扩展142.4函数172.4.1函数解析172.4.2函数扩展172.5参数202.5.1参数定义202.5.2参数引用202.5.3参数设置202.5.4参照依赖212.5.5自定义参照212.6宏变量222.7描述器232.8数据加工242.8.1概念242.8.2定位242.8.3执行原理252.8.4使用25
2、2.8.5常见问题272.9物化策略272.10复合语义模型272.10.1设计向导方式282.10.2语义脚本方式292.11语义上下文312.12脚本规则312.12.1实现规则类322.12.2配置文件注册322.12.3操作使用33第三章语义模型管理353.1对象管理363.1.1目录管理363.1.2语义模型管理373.1.3监控373.1.4权限383.1.5全局变量配置383.2环境配置393.3导入导出413.3.1导出逻辑413.3.2导入逻辑43第四章功能扩展474.1扩展语义提供者484.2扩展业务函数484.3使用数据加工484.4自定义执行策略484.5业务规则扩展4
3、94.6元定义驱动扩展494.6.1接口504.6.2实现504.6.3配置文件504.6.4使用51第五章范例525.1脚本中引用参数范例53第六章附录576.1入门586.2语义模型API636.3语义函数656.4其他函数656.5脚本引擎666.6针对查询引擎的改进676.7性能监控676.8多语言支持68第一章 前言UAP 技术红皮书系列 第1 / 51页本章内容概要:l 概念l 定位1.1 概念SMART,即SemanticModelingforAnalysisReportToolkit ,分析报表语义建模工具。1.2 定位语义模型把面向技术的数据,组织成面向业务的数据,供业务人员
4、查询分析使用。第二章 结构本章内容概要:l 应用模型l 语义模型l 语义提供者l 函数l 参数l 宏变量l 描述器l 数据加工l 物化策略l 复合语义模型l 语义上下文l 脚本规则2.1 应用模型上图为语义模型应用结构图。语义模型通过语义提供者,可以将多个数据源的数据进行整合。2.2 语义模型2.2.1 定义形态下图展示了语义模型的内部结构:语义模型主要由以下几部分构成:n 元数据元数据是指描述数据的数据,是为了外界使用数据而对数据本身含义的阐述。拿我们最常见的二维数据(行列结构)举例来说,如果只有这些行列结构的数据,对我们来说这将毫无意义。因为我们无法知道哪一列的数据代表什么含义,无法知道如
5、何操作这些数据,更别提由这些数据分析出有用的信息。反过来,如果针对这些数据指定了元数据,我们就可以了解哪一列代表的业务含义,并且知道该列的数据类型、长度、精度 等。这样,我们就能对这些数据进行加工处理,分析提取出有价值的信息。同理,语义模型的元数据是对执行语义模型后获取的二维数据的描述。元数据针对结果数据的每一列都提供了下列信息:数据类型、字段显示名、字段名、备注、长度、精度 等。有了这些信息,我们就能知道在业务应用中该如何使用语义模型。n 语义提供者语义提供者,表述了一类取数方式,或者说如何提供数据的方式。在语义模型中,语义提供者负责把一类业务取数过程以语义脚本的形式描述出来。为了能更好的理
6、解这个概念,我们可以打这样一个比方:NC元数据、数据仓库、报表数据、总账数据 等 这些可提供数据的对象好比“数据水源”,而语义提供者好比“水泵”,语义模型好比“抽水机”。每种“数据水源”只支持特定的“水泵”来抽取数据。我们有了一种语义提供者“水泵”,就能抽取其对应的“数据水源”里的数据。语义模型中能指定多个语义提供者,就相当于“抽水机”挂接了多个“水泵”,我们就能从多个不同类型的“数据水源”来抽取数据。语义提供者负责抽取数据,同时对外提供元数据来描述这些数据。语义提供者的元数据一般是在语义模型内部使用。更多细节以及语义提供者的扩展说明参见章节语义提供者。n 描述器描述器是指对数据操作的描述,例
7、如:过滤、排序、分页、汇总 等。在语义模型中,描述器表述了对语义提供者抽取的数据的加工处理过程。更多细节参见章节描述器。n 首选项语义模型中的首选项包括三类数据:参数、宏变量、配置项。下面将分别介绍:u 参数参数是模型中代表动态信息的元素,用于响应用户的输入。参数给用户提供了控制模型执行过程的机会。更多细节参见章节参数。u 宏变量宏变量与参数类似,区别是,参数在模型执行时需要用户输入值;而宏变量不需要与用户交互,系统后台会根据上下文计算该值。更多细节参见章节宏变量。u 配置项配置项用于控制语义模型的执行方式。2.2.2 执行流程语义模型的执行流程如下图所示:语义模型执行过程可分为以下步骤:n
8、第一步:语义模型脚本化语义模型中的对象结构将转变为字符串形式的语义脚本。n 第二步:脚本对象化通过脚本引擎把语义脚本解析为脚本模型,即把字符串形式的脚本 对象化。n 第三步:脚本模型翻译为SQL基于脚本模型,处理其中的语义函数,把脚本模型翻译为标准SQL语句。运行态描述器会在这一步被处理。n 第四步:执行sql,把结果集封装为DataSet,返回DataSet。由于运行态描述器的存在,每次执行语义模型时获取的最终sql都是不同的,但是,语义模型本身对应的脚本模型是相同的。基于性能考虑,我们可以把语义模型对应的脚本模型缓存起来。这样一来,只有第一次执行语义模型时,我们需要完整执行上述四个步骤,接
9、下来的每次执行,我们只需取得该缓存的脚本模型,再做第三、四步的处理即可。2.2.3 数据形态语义模型提供的数据可以以两种形态存在:数据集DataSet、数据表DbTable。从数据流转的角度来说,语义模型代表了一种取数管道,数据可以从管道中抽取出来。数据集DataSet代表了内存中的数据,或者说,数据在内存中以数据集DataSet为载体。数据表DbTable代表了数据库中的数据,或者说,数据在数据库中以数据表DbTable为载体。语义模型、数据集、数据表 这三者之间还存在互相转换的关系,下图形象的展示了这点:数据从语义模型这种数据管道中加载到内存,就以数据集的形式存在;如果把数据集中的当前数据
10、持久化到数据库中,数据就以数据表的形式存在;把数据从数据库中加载到内存中,就完成了数据表到数据集的转换;数据表可以以语义提供者的形式构成语义模型,完成数据从数据表到语义模型的流转;并且,语义模型经由视图化执行,最终的结果集将以数据表的形式呈现。数据在不同形态间流转时,改变的是数据载体,不变的数据本身的结构,即元数据。2.3 语义提供者语义提供者,表述了一类取数方式,或者说如何提供数据的方式。在语义模型中,语义提供者负责把一类业务取数过程以语义脚本的形式描述出来。2.3.1 接口接口方法方法说明String getCode()获取编码。该编码用于标示语义提供者MetaData getMetaDa
11、ta()获取元数据。元数据中包含了该提供者提供的数据的描述信息,例如:字段名、字段数据类型、字段精度 等String getTitle()获取标题,即该提供者的显示名称MetaData provideMetaData(SmartContext context)构造元数据。入参参数context是提供者构造元数据时的执行环境。此方法通常在设计态使用,用于重新构造元数据。String provideScript(SmartContext context)构造语义脚本。入参参数context是提供者构造脚本时的执行环境。此方法通常在运行态使用,用于把业务取数过程转换为语义脚本。void setCod
12、e(String code)设置编码void setMetaData(MetaData metaData)设置元数据。此方法通常在设计态使用,一般是先调用provideMetaData(context)构造元数据,然后调用此方法来把元数据保存在语义提供者。void setTitle(String title)设置标题,即显示名语义提供者包括NC元数据、DW元数据、以及语义脚本和业务代码扩展提供者(提供总帐、HR、供应链、报表等业务数据扩展)。其整个体系结构可由下图表示:其中,Provider是语义提供者的接口;SemanticProvider是基础扩展抽象类,对能把取数过程以脚本形式描述的语义
13、提供者可继承此类;SemanticDataProvider是语义数据扩展抽象类,对不能以脚本形式描述取数过程,只能提供二维数据的提供者,可继承此类。SemanticSqlProvider适用于提供者在运行时根据执行环境context返回不同取数sql,其与SqlProvider的区别在于:u SqlProvider的sql结构在定义态已经确定;u SemanticSqlProvider是在运行时,经过一系列业务处理,返回最终取数sql。上述图中,蓝色代表具体实现类。通过以上的介绍我们可以得知,Provider定义了语义提供者的接口规范,SemanticProvider、SemanticDataProvider、SemanticSqlProvider则是我们具体实现提供者时要继承的抽象类。现对这四个类的主要接口做重点介绍。n Provider接口方法方法说明String getCode()获取编码。该编码用于标示语义提供者MetaData getMetaData()获取元数据。元数据中包含了该提供者提供的数据的描述信息,例如:字段名、字段数据类型、字段精度 等String getTitle()