Skip to main content

📆日历维度

本文介绍如何为语义模型创建一个日历类型的维度 和如何在故事仪表板里使用日历类型的维度.

创建日历 (Calendar) 共享维度

在涉及到时间相关分析的时候往往需要按不同的时间粒度来统计数据, 如年,季度,月,日等. 那么就需要我们在建模的时候为多维模型指定其时间维度. 时间维度的数据应该是与实际业务数据不相关的固定数据, 如日期列表日期所属的月和年并不会因为公司不同而不同, 所以我们只需要将时间按需要生成相应的表数据即可.

本篇我们使用表 time_by_day 这个日历表来制作时间公共维度, 上篇Shared Dimension我们已经介绍了如何创建公共维度, 这里不再赘述.

步骤如下:

  1. 根据 time_by_day 表来新建公共维度, 命名为 Time, 标签: 日历;
  2. 创建后默认跳转到了默认的层次结构, 打开属性设置界面, 修改主键(Primary Key): time_id
  3. 在维度页签里修改维度类型(Type): Time
  4. 创建如下层级字段:
    1. Year
      1. 标签: 年,
      2. 名称: Year,
      3. 字段: the_year,
      4. 成员唯一: true,
      5. 时间层级类型: Year
      6. 语义类型: Calendar Year
    2. Quarter
      1. 标签: 季度,
      2. 名称: Quarter,
      3. 字段: quarter,
      4. 成员唯一: false,
      5. 时间层级类型: Quarter
      6. 语义类型: Calendar Quarter,
      7. 时间格式化: [yyyy].['Q'Q]
    3. Month
      1. 标签: 月,
      2. 名称: Month,
      3. 字段: month_of_year,
      4. 成员唯一: false,
      5. Caption 字段: the_month,
      6. 时间层级类型: Month
      7. 语义类型: Calendar Month,
      8. 时间格式化: [yyyy].['Q'Q].[M]
    4. Day
      1. 标签: 日期,
      2. 名称: Day,
      3. 字段: the_date,
      4. 成员唯一: true,
      5. 时间层级类型: Day
      6. 语义类型: Calendar Day,
      7. 时间格式化: [yyyy].['Q'Q].[M].[yyyy-MM-dd]
  5. 保存

这里需要注意的几点:

  • 只有 Year 和 Day 字段的成员唯一(Unique Members)属性为 true, 而 Quarter 和 Month 字段的为 false, 因为 quartermonth_of_year 字段的值并不能单独作为汇总维度, 否则汇总结果不具有实际意义.
  • 我们为 Month 指定了说明字段(Caption Column)为 the_month, 这样在展示的时候月份描述就不是单纯数字形式, 而是语言文字(这里是英文单词).
  • 维度类型设置为 Time, 并且每个层级都要设置 Level 类型, 这样分析引擎才能正确得解析跟日历相关的函数, 如:
    • ParallelPeriod([level[, index[, member]]])
    • PeriodsToDate([level[, member]])
    • WTD([member])
    • MTD([member])
    • QTD([member])
    • YTD([member])
    • LastPeriod(index[, member])
  • 语义类型跟时间层级类型(Time Level Type)对应起来, 格式化(Formatter)属性是为了前端程序将系统当前时间 Date 转换成实际多维模型的值, 参考 https://date-fns.org/的日期格式化格式.

创建多个层次结构 (Hierarchy)

除了默认的层次结构 (Hierarchy) 外我们还可以为维度 (Dimension) 创建多个层次结构 (Hierarchy), 例如可以创建以为习惯方式的层次结构:

点击菜单中的维度 (Dimension) 菜单, 点击新建层次结构 (New Hierarchy), 转到新建的页签在层次结构 (Hierarchy) 属性设置界面输入以下信息:

  1. 名称(Name): Weekly
  2. 标签(Caption): 周日历
  3. 维度表, 表名(Table Name): time_by_day
  4. 主键(Primary Key): time_id

创建以下层级字段:

  1. 年(Year)
    1. 字段: the_year,
    2. 成员唯一(UniqueMembers): true,
    3. 时间层级类型(LevelType): Year,
    4. 语义类型: Calendar Year
  2. 周(Week)
    1. 字段: week_of_year,
    2. 成员唯一(UniqueMembers): false,
    3. 时间层级类型(LevelType): Week,
    4. 语义类型: Calendar Week,
    5. 时间格式化(Time Formatter): [yyyy].[W]
  3. 日期(Day)
    1. 字段: day_of_month,
    2. 成员唯一(UniqueMembers): false,
    3. 时间层级类型(LevelType): Day,
    4. 语义类型: Calendar Day,
    5. 时间格式化(Time Formatter): [yyyy].[W].[Do]

将日历维度添加到多维模型

打开 多维数据模型 中创建的销售 (Sales) 模型, 将日历维度 (Time) 拖入维度区域. 选中 Time 维度修改其属性外键(Foreign Key): time_id. 保存后便可以使用模型的日历维度了.