页面树结构
转至元数据结尾
转至元数据起始

正在查看旧版本。 查看 当前版本.

与当前比较 查看页面历史

« 前一个 版本 17 下一个 »

1 概述

日期表,故名思义,就是存放日期的表。

新人常会感到困惑,业务表(销量、业绩、采购、检验、出/入库等单据)里不都有日期列吗,为什么还要把日期放在一张额外的表里?

大家都知道,不管零售、制造、金融还是其他什么行业,但凡涉及到数据统计,都离不开日期维度的分析,如累计销量、环比增速、同比增长等,之所以不用业务表的日期列,是因为单独日期表有以下几个特点:

  • 日期表的日期是独立完整的,没有缺失,这对日期维度的分析来说很重要。
  • 业务表里的日期只有业务发生时才会有记录,否则就缺失日期表除了自带的日期列,可以衍生出其他日期相关列,诸如年、月、日、季、周等,一年365行数据。业务表就不同了,一个公司有N个部门,一个部门有N个员工,假如每个员工每天产生一条业务数据,那一年要多少行?如果想按季统计销量,按月统计采购、按周统计销量、就必须同时扩充这三张表里的日期列——毫无效率,凭添隐患


2 示例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)成功,去建仪表盘,用“业务表”的日期字段做“月累”,会不显示原本没有原始记录的数据;而用【日期表】的日期字段则可以正常显示。

    【日期表】支持抽取、直连模式;

    如果存放在MPP中,那只支持抽取模式;

    如果存放在其他库:mysql、clickhouse、mssql、oracle、monetdb, 并且模型没有跨库支持直连。

2 示例2

例如,假设你正在为组织的销售团队开发报表。数据库包含用于销售、订单、产品等的表。你会注意到,其中许多表(包括“Sales”和“Orders”)都包含自己的日期列,如“Sales”和“Orders”表中的“ShipDate”和“OrderDate”列所示。你的任务是开发按年和月划分的总销售额和订单表。如何生成具有多个表的视觉对象并让每个表都引用自己的日期列?

  • 无标签