商业分析平台-语义模型 用友集团技术中心 边传猛 2013年 11月 06日
课程内容 课程目标与要求 课程目标 学习要求 产品功能介绍 整体功能简介 模块功能介绍 常见问题 实战演练
课程目标与要求 课程目标 学习要求 1、掌握语义模型开发 1、为保证学习效果,如需学习本课程,需先学习在线课程“元数据”; 2、具备一定数据库、SQL基础
元定义 元定义是语义层的核心概念,是对二维业务数据的抽象描述
元定义 元定义通过驱动的方式来挂接不同类型的业务数据,针对NC系统,主要有以下三种:语义元数据、语义查询模型、数据字典。 另外,分析平台提供了通用的数据库驱动来支持第三方的数据库。业务部门可以通过扩展驱动的方式来支持自己的业务数据
语义模型-概念 SMART,即Semantic Modeling for Analysis Report Toolkit ,分析报表语义建模工具 语义模型把面向技术的数据,组织成面向业务的数据,供业务人员查询分析使用。
应用模型 语义模型应用结构图。语义模型通过语义提供者,可以将多个数据源的数据进行整合
内部结构 下图展示了语义模型的内部结构
执行流程 语义模型的执行流程如下图所示
数据形态 语义模型、数据集、数据表 这三者之间还存在互相转换的关系,下图形象的展示了这点
节点位置 节点位置:商业分析-商业分析平台-语义层-语义模型
管理界面 语义模型包括分类、定义,可在此进行维护。分类、定义均支持数据权限,如果需要,可在“数据权限”节点进行配置。
语义模型-定义 定义信息包括如下属性: 编码、名称、数据源,模型。其他审计信息属性不再赘述 需要注意以下几点: 编码:语义模型定义编码是全局唯一的,不允许重复; 数据源:是指执行数据源,即取数数据源。取值范围为“数据源”节点配置的“执行数据源”。
语义模型-设计 选中语义模型,点击菜单项:语义模型-设计
语义模型-设计器 设计器采用向导方式,界面如下, 注意: 向导各步骤支持切换,并不一定严格按步骤进行
语义模型-设计器-选择表 此处“表”为逻辑表概念,并不是指数据库中物理表。 内部称为“提供者”,即能对外提供二维数据的数据来源。 包括如下几种,并支持扩展, 元数据:从UAP元数据业务实体中取数; 元定义:从数据字典、语义元数据、语义模型取数; 语义脚本:通过类sql脚本方式取数; 数据加工:采用java代码方式取数; 业务数据:扩展提供者 跨数据源取数:提供者一般有数据源属性,不同数据源的提供者可以在同一个语义模型内部使用。语义模型会自动处理多数据源
语义模型-设计器-选择表-元数据 基于UAP元数据业务实体进行取数,支持多级关联。 左边是模块-实体树,展开后选择业务实体; 右边是实体-属性树,存在关联的属性会继续以层级关系进行展开,支持无限极展开,并支持勾选不同层级属性,自动生成语义模型内部的表、字段、关联关系。 注意: 通过元数据方式会自动在语义模型设计器内部生成表、关联、字段,此过程不支持修改,后续修改只能基于表、字段来做。
语义模型-设计器-选择表-元定义 元定义是分析平台语义层的核心概念,可以简单理解为二维数据的统称。 元定义包括如下类型,并支持扩展, 数据字典:UAP元数据对应的数据模型; 语义元数据:数据仓库表; 语义模型:基于此可构造复合语义模型
语义模型-设计器-选择表-元定义-数据字典 数据字典组织方式与元数据类似,也是以模块来分类。 数据字典与元数据的区别: 元数据属于业务模型,数据字典为数据模型。一些业务特性只在元数据中有,例如:多语种,时间类型,枚举、关联、参照等。 一般推荐直接使用元数据来构造语义模型,元数据方式生成的表即是“数据字典”类型的表,后续细节调整可基于数据字典来做。
语义模型-设计器-选择表-元定义-语义元数据 语义元数据,在分析平台中一般理解为数据仓库表。后续会有专门课程进行讲解,在此不再赘述
语义模型-设计器-选择表-元定义-语义模型 基于此,可实现复合语义模型,即语义模型嵌套,一个语义模型基于其他语义模型进行取数。 注意: 语义模型不能引用自身,更不能出现循环引用
语义模型-设计器-选择表-语义脚本 语义脚本,是基于sql的脚本语言,允许使用语义函数 下面页签面板中列出的语义函数都可以在脚本中 使用,使用方式为,双击函数,弹出函数设计器,完成后生成函数表达式片段。
语义模型-语义函数 语义函数,是语义模型提供的一种扩展机制,一般处理逻辑为,获得入参,进行处理,最后返回sql片段。 语义函数可以在语义模型的字段表达式、语义脚本、过滤条件等中使用。 具体扩展机制可参考《语义模型红皮书》。
语义模型-设计器-选择表-数据加工 数据加工,即使用java代码执行取数。在不能直接使用sql语句取数,或者涉及敏感数据需要隐藏表信息时可使用数据加工。 在数据加工设计器中,左边是代码向导,用来辅助生成代码;右边是代码编辑器,提供格式化、编译功能。 一般代码逻辑为: 从上下文中获得入参,进行逻辑处理,获得返回值,设置返回值。 返回值有3种: 数据集;表 ;sql 语句。
语义模型-设计器-选择表-业务数据 业务数据,指的是扩展提供者。系统中所有扩展的提供者都可以在此使用。 提供者扩展具体参考《语义模型红皮书》 提供者组织方式以模块为层级结构
语义模型-设计器-选择表-修改 逻辑表的修改,编码、名称的修改可以在表格上直接编辑;模型的修改有如下3种: 双击“类型”列; 右键菜单“编辑”; 点击“修改”按钮。 右键菜单中有“元数据”菜单项,用来查看该提供者对外暴露的字段信息。
语义模型-设计器-连接条件 连接设置分两种模式: 典型模式:表.字段 操作符 表.字段 高级模式:手工拼写条件表达式 高级模式,连接表达式中可使用参数、宏变量、语义函数等
语义模型-设计器-选择字段 字段,是语义模型对外暴露的元数据信息,包括如下属性: 编码、名称、表达式、数据类型、长度、精度、关联、数据权限等
语义模型-设计器-选择字段-关联 字段关联,用来配置外键关联关系,用于自由报表,即时查询、即时分析等。 关联,能够极大的扩展语义模型所能表达的字段信息。与UAP元数据类似,关联关系在展示中表现为层级展开关系,能够基于关联选取外键关联表的字段。 并且对于外键表为基本档案表的情况,报表执行时会使用UAP前台数据缓存,减轻数据库压力。
语义模型-设计器-选择字段-数据权限 字段上可以配置数据权限,默认为“不启用”。 数据权限控制模式分两种: 管理报表:可自定义设置,自定义选择资源实体、场景; 单据业务:使用UAP元数据上设置的资源实体、场景,不可修改。
语义模型-设计器-描述器 描述器,是对数据处理的描述,包括:排序、过滤、汇总、分页、topN、去重、限制列、限制行等 描述器在报表运行时会作用于语义模型,影响语义模型的取数
语义模型-设计器-描述器-筛选 筛选,即过滤条件。支持两种模式: 典型模式:字段 操作符 值 3段式设置; 高级模式:手工表达式设置
语义模型-设计器-描述器-排序 可设置TopN,排序规则
语义模型-设计器-描述器-其他 现包括“去除重复行”
语义模型-设计器-查询参数 参数,和用户进行交互,获得用户输入数据的一种机制。 类型包括字符、数值、参照等几类。 字符、数值类型时,可以在“属性”列输入以@符分割的数据作为枚举值。 参照类型时,可以在“属性”列选择参照。 参照依赖:给参照设置过滤条件,其中可引用其他参数,用来支持参数与参数间的依赖关系。 数据权限:参照类型的参数支持设置数据权限,用来过滤参照数据。 自定义参照:对不方便注册标准参照的,提供自定义参照方式进行处理
语义模型-设计器-宏变量 宏变量,占位符,值由后台计算出,不与用户交互。 分两种类型: Sql语句:通过sql查询数据,取第一行第一列作为变量的值; NC公式:通过NC公式取数
语义模型-全局变量 语义模型管理界面,“全局变量”按钮。 全局变量,也叫全局宏变量,区别于上述语义模型内部的变量,顾名思义,是应用于全局,即每个语义模型内部都能使用。 全局变量包括预置宏变量,是系统变量,由语义层执行时进行计算值。 也可以新增其他全局变量,类型和一般宏变量一样。 变量广泛应用于语义模型内部,包括:语义脚本、字段表达式、过滤条件等
语义模型-设计器-选项 选项,即配置项,用来对语义模型的执行进行设置,包括:物化策略、最长执行时间、最大行数、启用SQL优化、业务规则、数据权限控制模式等
语义模型-设计器-选项-物化策略 物化策略,是指定期把语义模型执行结果集写入指定物理表,后续报表取数直接从该表中取数,提高效率。 物化策略本质上是用空间换时间,对执行较慢的语义模型,让其预先执行,这样在报表查询时就比较快速。
语义模型-设计器-选项-业务规则 业务规则,即脚本规则,允许开发人员直接干预语义模型sql语句的处理过程,直接修改语义模型最终的sql语句。一般用于处理自定义数据权限,即给sql语句增加where条件。
语义模型-设计器-选项-业务规则
语义模型-设计器-选项 启用SQL优化:脚本引擎会对sql语句进行优化处理,对有些复杂sql可能会出现优化错误,此时可以把该选项关闭。 最大查询执行时间:超时时间,只适用于oracle 最大行数:数据集最大行限制
语义模型-设计器-导航栏按钮 概览:对模型内部结构进行图形化展示,包括原始脚本语句;
语义模型-设计器-导航栏按钮 校验:对模型进行校验,校验出错,会展示校验错误面板; 保存:直接把模型保存到数据库,不进行校验; 完成:先校验,如果没问题则保存到数据库;否则弹出错误框,提示是否继续保存;
管理界面-工具-导入导出 进行模型的导入导出操作
管理界面-工具-性能监控 性能监控,对语义模型内部执行逻辑进行跟踪记录,以在出现性能问题或者执行出错时进行问题定位、解决
管理界面-工具-批量修改执行数据源 对选中目录下的所有语义模型进行数据源修改
管理界面-工具-执行物化策略 手动发起一次物化策略调用,会提交一次性物化作业,由调度引擎异步调度执行。 执行状态可以在“调度队列”节点查看
管理界面-工具-物化策略管理 对所有定义了物化的语义模型进行物化策略管理
管理界面-工具-结构概览 同语义模型设计器中的“概览”按钮,
管理界面-工具-执行评估 对语义模型进行执行,统计指标。可以为后续的报表提供参考
语义模型-扩展 语义模型提供以下扩展方式: 1.提供者 2.函数 3.脚本规则 4.元定义驱动 具体扩展实现参见《语义模型红皮书》
常见问题-数据加工 数据加工java代码中,调用语义模型的类时,直接使用类名,而对业务部门的类,需要使用全路径名。 java代码中封装DataSet时,需要设置元数据MetaData(具体参见相关类)。 java代码中通过调用代码setDataSet(DataSet)设置最终需要返回的结果数据集DataSet,通过调用代码setResultSQL(sql)设置sql返回值。 这部分代码是在后台调用,切忌调用UI类 java代码最终生成的类继承于nc.pub.smart.model.code.CodeProcessor ,实现其process() 方法 java代码生成的类放在 NC_Home\modules\bapub\META-INF\var\classes 下 数据加工代码在后台调用,且中引用的类必须在public中
常见问题- group By 语义模型定义中不需要指定groupBy。 2. Union 现在设计向导对union支持不够,如果需要使用union,可以通过使用语义脚本,在语义脚本中编写union语句实现