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