在DQL服务器相关的各类文件中,元数据文件比较重要,它用来将物理数据库中的表定义为DQL中使用的表,而后面的汉语查询也以此为基础。下面将简单介绍在元数据文件中的各项相关概念以及编辑方法。
在报表安装根目录的report\bin下,运行dql.exe可以打开DQL编辑器(如果是其它版本等也可能需要执行startupdql.bat和startupdql.sh):

点击新建,选择元数据,新建lmd元数据文件:


在菜单栏中选择系统 - 数据源,或者点击
,连接数据源:

这里的数据源是物理数据库,系统默认的orders与前面配置的DQL服务配置中的是一致的,连接参数与下面的相同:

也可以根据需要,连接到其它数据源。
在菜单栏中选择系统 - 导入数据库表,或者点击
,可以选择当前连接的数据库中的表,导入到元数据中:

结果如下:

按照需要,设置其中的主键字段:

也可以手动添加表和字段,并分别设置它们的信息,如表名和物理表名,字段名、数据来源和数据类型等。
将所需的表全部引入:

在数据分析查询中,还需要对一些维执行聚合计算,这些维可能是外键,对应着某个数据库表,也可能是其它字段构成的,如“性别”“类别”等,也可能是实际数据的一部分或者根据实际数据计算出的,如“年”“季度”等。对于没有物理表对应的维,需要加入一些假表。
在菜单栏中选择编辑 - 增加假表,或者点击
,可以添加一个假表,如Year,为它添加需要的主键字段:

在数据分析中,各个表都可能会有需要涉及分组统计的维,而有关日期时间可能需要各种不同的维,如年、月、季度等等,所需用到的假表可能会很多,如:

在日期时间数据中,有可能可以计算出其它维对应的数据,这些数据可能由当前数据的一部分,也可能是由当前数据计算获得的。这样的情况,可以将这些维对应的假表,视为当前假表相关的层,转换时计算所用的函数称为层函数,以日期假表Day为例:

如“年月”YearMonth,可以由当前日期的年份和月份计算得出。这里定义层函数中使用的函数,如year(),month(),DATEDIFF()等,需要是标准SQL函数,也就是集算器的sqltranslate()能够识别的函数。层函数表达式中的?对应着Day对应的数据值。
定义完了使用到的表和维相关的假表,还需要完善表间关联关系的定义,这需通过定义每个表的外键来完成。以员工表Employee为例:

员工表中的BOSS字段,存储的是直接上级的员工编码,这里的fk1即设置它们的对应关系。上方选择外键对应的表名仍为员工表,下方的外键映射选择外键字段以及对应外键表中的哪个字段。
又如fk2和fk3分别是员工出生日期BIRTHDATE和雇佣日期HIREDATE两个外键,它们对应的是日期假表Day,如fk3设置如下:

员工表中,其它的外键,fk4表示员工籍贯城市编码字段与城市表的关联关系,fk5表示性别字段与Gender假表的关联关系,fk6表示职务字段与Title假表的关联。
在表中,还可以定义一些伪字段,伪字段并不是物理表中实际存在的,而是可以用表中字段通过计算获得,如:

伪字段的表达式也需要使用标准SQL函数,如这里的表达式是:
year(now())-year(BIRTHDATE)-case when month(now())*100+ day(now())>month(BIRTHDATE)*100+day(BIRTHDATE) then 0 else 1 end
伪字段的数据类型需要按照数据的实际情况设置。
在元数据中定义的伪字段,可以在DQL查询或者汉语查询中类似常规字段一样使用,有效地简化查询语句。
在页面中选择维和层页面,可以看到根据表和关联关系定义生成的维的相关定义,前面设定的层函数也可以在相应的维中看到:

更详细的有关DQL服务器配置,以及编辑元数据文件的内容,请阅读报表文档中的分析教程。如果使用的是集算器版本的DQL服务器,相关内容请阅读集算器文档中的DQL教程。