假表

阅读(394) 标签: 假表,

假表是一种虚拟的单字段无记录表,可以视为普通表来使用,主要用于在无实体表的场景下定义维度层次,如时间维度通常没有实体表,此时就可以通过假表实现。

以demo.glmd中通过date、year、ymonth三张假表定义的日期层次为例:

 

  

 

说明:

1)  系统已为日期维度预定义常用层函数:

datetime

日期时间维度

date

日期维度,年月日

time

时间维度分量,总是精确到秒

year

年

season

季

month

月

day

日

mday

月日

week

星期几,1表示星期天

yseason

带有年的季

ymonth

带有年的月

weeks

总第几周

yweeks

当前的第几周

sweeks

当季的第几周

mweeks

当月的第几周

hour

小时

minute

分钟

2) 层间计算式也可以理解为从细向粗计算。比如“date”维,只能从年月日算出年,不能从年算出年月日。

3) 目标维可分别通过多个源维进行换算。比如“year”维,可能是从年月日聚集到年,也可能从年月聚集到年,因此,对于“year”维,就要定义两个层间计算式,分别从“date”表的日期和“ymonth”表的年月计算而来。

接下来可以在DQL中直接使用定义定义好的日期层函数,如下例:

 

ReturnedPmt表中RDate是个日期类型,在ReturnedPmt表的外键定义中,我们将“ReturnedPmt”表的字段RDate与“date”表的字段date建立外键关系,如下图:

 

这样,我们就可以在DQL中获得RDate的年、月等信息了,如RDate#year,得到RDate的年份,RDate#ymonth就得到了RDate的年月

DQL: SELECT CustomerID,ID,RDate,RDate#ymonth YearMonth,RDate#year Year,Amount,SellerID FROM ReturnedPmt  

DQL: SELECT sum(Amount) Sum_Amount ON year FROM ReturnedPmt by RDate#year

  

DQL: SELECT sum(Amount) Sum_Amount ON ymonth FROM ReturnedPmt by RDate#ymonth