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