语义层

阅读(3154) 标签: 元数据, 字典, 可视文件,

本节主要介绍报表DQL Server服务中语义层文件一些最基本的制作,像假表分表等更高级的元数据制作介绍可参考高级元数据设计小节。

语义层包含三种类型的文件:元数据、字典、可视文件。元数据文件描述数据库中,各个表中的数据以及各类表间关系;字典定义表或字段的别名;可视文件设定表或字段的可见。

基础元数据设计

描述数据库中各个表的数据结构,以及各类表间关系的文件叫做元数据文件;元数据文件使用DQL元数据层设计器编辑,存为json格式的文件,文件的默认扩展名为.lmd。它可以和报表DQL Server的驱动包一起部署在服务器端,客户端以标准JDBC的连接方式连接访问。

打开DQL元数据层设计器,在菜单栏中点击文件>新建,创建元数据文件:

这就是设计好的元数据文件,后面我们会逐步对元数据文件中的配置做详细介绍。

Ø 

元数据中的表有四种,普通表、SQL型表假表分表,在这里先介绍普通表。

普通表的物理表名必须和数据库中的表名或视图名完全一致。如果是带模式的表,则必须把表名定义成schema.table,如:dba.公司信息表名称的初始值和物理表名相同,也可以自行修改。

常规页面中,可以设定表或视图的字段,数据来源需要和表或视图在数据库中的字段名相同。字段名称的初始值和数据来源相同,可以自行修改。

新建普通表不仅可以手动点击菜单添加外,还可以直接将数据库中的一个或多个表导入到元数据中,导入方法如下所示:

在菜单栏中通过系统>数据源或者点击,可以设定数据源连接:

数据源连接窗口中,可以配置数据源的连接属性,或连接指定的数据源。在DQL元数据层设计器中,不允许同时连接多个数据源。在数据源连接列表中,dqldemo为默认的HSQL数据库。

连接数据源后,可以直接导入数据库中的物理表或视图为元数据的表,然后再添加修改主键、外键等属性。导入时,在工具栏中点击导入数据库表

然后在弹出窗口中选择需要导入的数据库表即可。

如果数据库中未设定主键及外键信息,则需要在元数据的表字段信息中修改。

如果选择了选项使用数据库中描述作为表和字段名称,则导入表时,表名和字段名来自数据库中表和字段的描述。

Ø  SQL型表

SQL表与数据库中的视图类似,它是执行SQL语句后返回的结果集所构成的表。

在快捷工具栏中,点击增加SQL型表,或者在菜单栏中选择相应选项,可以在元数据中新建SQL型表:

SQL型表需要设定表名称及SQL语句,设定完毕后,连接数据源后,可以执行读取结构,自动分析取结果集中的字段信息: 

执行时,在从数据库获取结果集后,数据来源为空时,会缺省使用字段名称进行查询。此规则适用于除假表外的所有表类型。

Ø  主键

用来唯一确定记录的字段,一般情况和数据库物理表的主键定义一致。导入数据库物理表的时候,能把数据库的主键一起读进来。也可以在元数据中修改主键字段,使之和数据库不一致。如果是SQL型表,读取结构时不会包含主键信息,主键需要设定。

设定主键,只需要勾选字段后面主键的复选框即可。

与数据库中的情况相似,一个表的主键可以是一个,也可以是多个;单一主键的值,或者多个主键值的组合,在一个表中应该具有唯一性

元数据中表的主键可以人工设定,在设定时一定要注意主键的合理性,在定义表的主键时,报表DQL Server并不会去验证主键设定是否合理。如果设定的主键值在表中不唯一,在查询或者汇总计算时就可能产生错误。

Ø  外键

与数据库中的概念相似,DQL中,表的外键字段指向另一张表主键,从而产生关联。导入数据库物理表的时候,会把数据库的外键定义一起读进来。在元数据中可以修改外键的定义,不需要和数据库的定义完全一致。

 

外键名称:外键的名称可以直接编辑,设定时不允许与本表的字段名相同,也不允许与本表的其它外键名称相同,否则引用外键时会产生错误;如果当前外键是由单外键字段组成的,那么外键名称通常可以不使用,而是用外键字段来代替;如果当前外键是由多个外键字段组合成的,那么在引用外键指向表的字段时,只能使用外键名称,如上图中fk1fk2fk3均为外键名称,选中外键的外键名称是fk2

对应表名:外键所指向的表名,当指向表的主键唯一且非外键时,那么这个表称为维表,如上图所示的维表是:产品。

引用字段:外键指向表的主键,当这个主键非外键时,它被称为,如上图所示的维是:产品.产品ID。当引用字段并非维时,即引用字段是外键,此时,引用字段会指向新的引用字段……这样的引用最终会指向一个维,这个维就是最初外键指向的

外键字段:当前表的字段,和引用字段一一对应,如上图中所示入库单表的外键字段是:产品ID

当日期型字段特别多时,使用菜单日期字段自动映射日期维,可使日期型字段自动对应日期假表。

DQL中,外键字段和维字段的地位是完全一样的,可以把外键字段看成维字段

任何表的主键都可以视为维字段。如果某个表的主键是外键,那么这个主键的维即为外键指向的维;如果主键并非外键,那么这个主键的维就是它本身。对于非主键的字段,只有当它是外键时才是维字段,字段的维即为外键指向的维。

举例:

根据上图所示,“回款单”表中的客户ID字段指向“客户”表的客户ID字段,“回款单”表与“客户”表之间的数据关系为多对一的关系,其中的相关概念描述如下:

外键字段:回款单”表的客户ID字段

维表:客户”表

维:客户”表的主键客户ID字段

DQL的时候,可以像引用属性一样引用外键表的字段,比如:SELECT 客户ID.客户名称,回款日期,金额 FROM 回款单,这里客户ID.客户名称引用的是客户ID指向的“客户”表的客户名称字段。

 

知识点:

1) 对于单一字段形成的外键,在使用DQL时,可以用外键字段.外键表的字段名的方式来直接使用。

2) 对于多字段组成的外键,在使用DQL时,可以用外键名称.外键表的字段名的方式来直接使用。

3) 使用外键名称.外键表的字段名方式引用,既可用于多字段组成的外键,也可用于单一字段形成的外键情况。

 

Ø  伪字段

通过设定主键和外键,使得表与表相互关联。如订单,根据外键关联,可以获得销售以及与销售表同维的雇员等表的信息,也可以获得客户以及与客户表同维的VIP客户等表的信息,再通过雇员的外键关联,可以获得城市表的信息,等等。

表的外键,同维的表的外键,通称为广义外键,广义外键的同维表的外键,同样属于广义外键,另外,广义外键的层函数也是一种广义外键。

表的字段,同维表的字段,广义外键的同维表的字段,通称为广义字段,广义字段的层函数也是一种广义字段。

用广义字段定义的表达式,通称为伪字段,按普通字段处理,但不作为外键。

外键指向表的同维表集合,通称为广义外键表但不包含主键外键时指向的本表同维表。

 

通过在元数据中设定伪字段,可以命名一些常用的广义字段,可以使得对它们的查询语句更为精简方便。例如:

如果在回款单中定义广义字段客户VIP结束如下:

伪字段可以相当于普通字段使用,如查询的DQL可以写成:SELECT 客户VIP结束年月 FROM 回款单,而不必写为SELECT 客户ID.结束时间#FROM 回款单。伪字段也可以作为汇总维度使用,如SELECT 回款单.COUNT(*) 本年到期VIP客户回款笔数 ON FROM 回款单 BY 客户VIP结束年月#

 

知识点:

1) 在元数据中定义的伪字段在DQL元数据文件中使用时与普通字段相同。

字典文件设计

字典文件可以使用DQL元数据层设计器编辑,存为.dct格式的文件。它可以和引擎一起部署在WEB服务器上,客户端通过字典中定义好的表或者字段的别名、字段显示格式、代码显示值等设置,访问元数据定义的数据。字典中的别名设定,与DQL无关,需要在WEB服务器中分析处理,是无法在DQL语句中使用的。

打开DQL元数据层设计器,在菜单栏中点击文件>新建,创建字典文件:

如下图所示,这是设计好的字典文件,后面我们会逐步对字典文件中的配置做详细介绍。

Ø  表项

表项设定中,包括表名,以及每个表中的各种字段项。

字段项包括表的字段名、广义字段名、测度名、外键名等设定。在设定时可以为表名字段项和聚合项命名别名。

Ø  维项

元数据中表A的外键指向表B主键,当这个表B主键非外键时,它被称为。维项设定中,可以为元数据中的维命名别名。

通过设定维项的代码列和显示列,在WEB端处理维条件时,如通过显示值设定维过滤条件,在维的查询结果中按显示值处理等。

Ø  分类项

设定分类项可将当前元数据文件中的所有表进行分类。设置分类项后,可在WEB查询界面中通过选择分类项展现当前分类下不同的表信息。

Ø  导入元数据

字典文件中的内容除了通过菜单逐个添加,还可以直接导入元数据,将元数据中的表和维项全部导入到字典中。

导入方法如下所示:

在菜单中执行系统>导入元数据,导入元数据文件中的表项和维项,导入后,各个表项和维项的名称默认与其在元数据中定义的名称相同:

如果选择了选项删除不在元数据内的表和字段,则字典中已存在而元数据中不存在的表、字段项、维和定位项将被删除。

导入后的字典文件结构如下:

制作可视文件

可视文件可以使用DQL元数据层设计器编辑,存为.vsb格式的文件。它可以和引擎一起部署在WEB服务器上,对于不同的用户可以配置不同的可见文件,使他们在登录WEB后拥有不同的访问权限。

打开DQL元数据层设计器,在菜单栏中点击文件>新建,创建可视文件:

可见性设定的结构如下:

 

可以在菜单中执行系统>导入元数据,将元数据文件中的表导入。

Ø  表可见性

对于每个表,均可以设定为可见、不可见或者条件可见。

当表可见时,可以在DQL中正常查询该表的数据。当表不可见时,在DQL中查询该表数据时会报错。

表设为条件可见时,将根据设定的条件,在查询表的数据时强制过滤。这样,通过使用不同的可见性配置文件,可以使得不同的用户浏览到的记录不同。

如将销售表的表可视属性设为条件可见:

则此时对销售表用DQL查询: SELECT * FROM 销售,相当于SELECT * FROM 销售 WHERE 雇员ID=1

可视文件中的条件可见表达式支持使用DQL宏,宏的语法为${宏名称}

如将销售表的条件可见写为:

 

Ø  字段可见性

在每个表中均可以设定不可视字段名称列表,不可视字段名称与元数据中的字段名相对应,但是不包括测度名、广义外键名及广义字段名等。

设定为不可视的字段,在DQL的查询中将不允许使用。

知识点:

和字典不同,可见性设定会影响DQL的执行结果;而字典通过WEB应用分析,与DQL的执行无关。