同维表、量纲与宏字段表达式

阅读(185) 标签: 同维表, 量纲, 宏字段表达式,

从元数据中,再引入一个表EMPLOYEEINFO到汉语查询的词典中:

引入后这个表中宏字段如下:

EMPLOYEEINFO表的主键是和EMPLOYEE一对一关联的,在元数据中,EMPLOYEEINFO的主键与EMPLOYEEINFO的主键关联:

这种情况称它们为同维表EMPLOYEE可以引用它的同维表中的广义字段,在汉语查询中,可以合并定义为一个表。如把EMPLOYEEINFO删除,并在EMPLOYEE中增加EMPLOYEEINFO中的字段,定义新增宏字段的字段词后,如下:

此时可以同时查询这两个表中的字段,如:

这里新增的宏字段中,身高和体重都是有数值单位的,身高单位是厘米,体重单位是千克,为了表明它们数据的实际意义,需要设置量纲

数据结构中,选择量纲,这里已经设入了一些默认的量纲及单位:

量纲是所有表通用的,在一个类型的量纲中,可以定义多个单位,每个单位可以定义多个量词名称,如长度量纲中把厘米作为基本单位,它的系数是1.0。长度量纲中还有一些其它单位,并以厘米为基准设置了系数。

定义了量纲,就可以在宏字段定义中,选择宏字段的单位了,如选择身高的单位为厘米:

此时查询时就可以用量词了,如:

在这里,虽然没有指明160厘米对应的字段词,但是使用长度单位的只有身高宏字段,查询时会自动匹配。查询时也可以使用同一类型量纲中的不同单位,如:

当查询时的单位与宏字段设定不同时,将会根据系数自动转换。

通过设置宏字段的单位,能够使查询语句的执行更为准确有效。

 

有了员工的身高与体重数据,就能够计算他们的BMI指数了,如添加宏字段BMI来处理:

表达式用已存在的字段计算,需要使用标准DQL函数,这里的宏字段表达式设定的是:

EMPLOYEE.WEIGHT*10000.0/EMPLOYEE.HEIGHT/EMPLOYEE.HEIGHT

设定后,即可通过字段词查询:

类似的,也可以通过雇用日期,计算雇用年数:

这里设置的宏字段表达式如下:

year(now())-year(EMPLOYEE.HIREDATE)-case when month(now())*100+day(now())<month(HIREDATE)*100+day(HIREDATE) THEN 1 ELSE 0 END