1 概述
日期表,故名思义,就是存放日期的表。
新人常会感到困惑,业务表(销量、业绩、采购、检验、出/入库等单据)里不都有日期列吗,为什么还要把日期放在一张额外的表里?
大家都知道,不管零售、制造、金融还是其他什么行业,但凡涉及到数据统计,都离不开日期维度的分析,如累计销量、环比增速、同比增长等,之所以不用业务表的日期列,是因为单独日期表有以下几个特点:
- 日期表的日期是独立完整的,没有缺失,这对日期维度的分析来说很重要。
- 业务表里的日期只有业务发生时才会有记录,否则就缺失日期表除了自带的日期列,可以衍生出其他日期相关列,诸如年、月、日、季、周等,一年365行数据。业务表就不同了,一个公司有N个部门,一个部门有N个员工,假如每个员工每天产生一条业务数据,那一年要多少行?如果想按季统计销量,按月统计采购、按周统计销量、就必须同时扩充这三张表里的日期列——毫无效率,凭添隐患
- 目前支持存储"日期表"的数据库类型:mysql、clickhouse、mssql、oracle、monetdb这5种类型;
- 【日期表】支持抽取、直连模式,详情可查阅:直连&抽取; 如果存放在MPP中,那只支持抽取模式,如果存放在第一条支持的5个数据库,并且没有跨库则支持直连
2 示例说明
2.1 示例1
例如,假设某公司的业务用户正在开发业务报表, 数据库中包含"业务表":有单独的日期列
- 诉求:需要统计销量、月累;
- 问题:由于原始记录有些日期没有数据,导致统计月累也会没有数据。
这个时候使用【生成日期表】就能解决问题,最终效果如下:
示例数据下载:业务表.xls
具体操作步骤如下:
- 目标数据源:支持存储"日期表"的数据库类型:高速缓存库,mysql、clickhouse、mssql、oracle、monetdb,默认高速缓存库
- 表名:存放在数据库中的表名,请填写简体英文名称 ;表名具有唯一性,无法填写重复的表名,如果已存在则会进行提示;
- 开始时间、结束时间:目前跨度最大是100年;比如【开始时间】选择了1990-01-01年,【结束时间】选择了2091-12-31,会提示:请选择100年内的日期
- 日期字段名:默认C_Date; 如果需要建多张“日期表” ,建议修改一下日期字段名,以方便区分;
- 创建时间字段:用于当前“日期表”中创建的时间格式字段:
1)年:输出主键字段”日期“和时间字段”年“;
2)年季:输出主键字段”日期“和时间字段”年季“、”季“。创建时间字段;
3)年月:输出主键字段”日期“和时间字段”年月“、”月“;
4)年周:输出主键字段”日期“和时间字段”年周“、”周“;
5)年月日:输出主键字段”日期“和时间字段”年月日“;
- 自定义字段名:即保存在数据库表中的字段名称,默认都是英文,如输入中文,需要看保存的数据库是否支持
1)"年"默认字段名:C_YEAR
2)”年季“默认字段名:C_YEAR_QUARTER
3)”季“默认字段名:C_QUARTER
4)”年月“默认字段名:C_YEAR_MONTH
5)”月“默认字段名:C_MONTH
6)”年周“默认字段名:C_YEAR_WEEK
7)”周“默认字段名:C_WEEK
8)”年月日“字段名:C_YEAR_MONTH_DAY
点击【确定】会回到模型,并且可以在模型中预览到生成的数据以及字段等:
- 设置“日期表”与“业务表”的关系,可参考关系设置,同时也可以构建模型
- 根据“业务表”下的日期字段创建时间层次结构,命名“业务表_时间维度”
- 根据“日期表”下的日期字段创建时间层次结构, 命名“日期表_时间维度”,如下图所示:
保存并且抽取(示例是存放再MPP)成功,去建仪表盘,用“业务表”的日期字段做“月累”,会不显示原本没有原始记录的数据;而用【日期表】的日期字段则可以正常显示。
2.2 示例2
例如,业务用户要为销售团队开发报表,需要开发按年和月划分的合同金额、回款金额;
- 问题:数据库包含【合同表】、【回款表】等表。注意到【合同表】、【回款表】都包含自己的日期列如下图所示, 在制作报表的时用户可能不知道到底要根据哪张表的日期来进行分析,这时候就可以通过模型的日期表生成一个共享的日期维表!
具体操作步骤如下: