跳到主要内容

日历维度

在 XpertAI 数据分析平台中,日历维度(也称“时间维度”)是构建各类时间序列分析的基础,支持用户基于年、季度、月、周、日等时间粒度灵活进行数据切片、趋势分析和同比/环比计算等操作。

✨ 功能说明

日历维度提供标准化的时间层级结构,便于用户在不同粒度间切换查看数据表现。例如:

  • 年(Year):适用于年度对比、年度汇总分析等场景;
  • 季度(Quarter):支持按季度观察销售、经营趋势;
  • 月份(Month):常用于月度报告、月环比分析;
  • 周(Week):适用于周期性周度运营分析;
  • 日(Day):支持查看具体日期的数据,如每日销售、每日指标波动等。

🧭 时间层级与语义说明

平台内置标准时间层级体系,每个层级具有清晰的语义与格式化规则:

层级名称说明格式化字符串示例值
Calendar Year表示年粒度yyyy2024
Calendar Quarter表示季度粒度[yyyy].[Q#][2024].[Q1]
Calendar Month表示月粒度[yyyy].[MM][2024].[01]
Calendar Week表示周粒度[yyyy].[wWW][2024].[w05]
Calendar Day表示日粒度[yyyy].[MM].[dd][2024].[01].[15]

📌 说明:格式化字符串用于将日期对象转化为分析模型中统一的时间标识(技术ID),以实现准确的数据匹配和时间函数支持。

如需了解更多关于时间维度语义的配置方式,请参阅:语义设置

🎯 使用建议

  • 进行年度/季度/月度分析时,建议使用相应的时间层级进行聚合,并结合系统提供的时间比较功能(如:本期/同期、同比/环比);
  • 在仪表盘或数据探索中,时间维度通常作为行或列用于构建趋势图、表格等可视化组件;
  • 对于跨周期分析(如年初至今、月初至今),平台内置智能时间函数可直接使用,无需额外建模。
  • 时间过滤器的使用请参考 切片器#时间维度

📎 附:创建时间/日历表

为了支持时间维度分析,建议在数据库中维护一张标准的 Time Calendar 日期表,其中包含年、季度、月、周、日等常用字段。该表可作为日历维度的主表,供数据分析平台建模引用。

✅ 表结构设计

推荐的字段包括:

字段名类型说明
date_keyVARCHAR(10)主键,格式为 YYYY-MM-DD
dateDATE日期型字段
yearINT年份
quarterINT季度(1~4)
monthINT月份(1~12)
month_nameVARCHAR(20)月份名称(如 January)
week_in_yearINT年内第几周
day_in_monthINT月内第几天
day_nameVARCHAR(20)星期几(如 Monday)

🧩 示例 SQL

MySQL

-- 创建表
CREATE TABLE time_calendar (
date_key VARCHAR(10) PRIMARY KEY, -- 格式:'YYYY-MM-DD'
date DATE,
year INT,
quarter INT,
month INT,
month_name VARCHAR(20),
week_in_year INT,
day_in_month INT,
day_name VARCHAR(20)
);

-- 填充数据(2023-01-01 ~ 2025-12-31)
WITH RECURSIVE dates AS (
SELECT DATE('2023-01-01') AS dt
UNION ALL
SELECT dt + INTERVAL 1 DAY FROM dates WHERE dt < '2025-12-31'
)
INSERT INTO time_calendar
SELECT
DATE_FORMAT(dt, '%Y-%m-%d') AS date_key,
dt,
YEAR(dt),
QUARTER(dt),
MONTH(dt),
MONTHNAME(dt),
WEEK(dt, 1),
DAY(dt),
DAYNAME(dt)
FROM dates;

PostgreSQL

-- 创建表
CREATE TABLE time_calendar (
date_key VARCHAR(10) PRIMARY KEY, -- 格式:'YYYY-MM-DD'
date DATE,
year INT,
quarter INT,
month INT,
month_name VARCHAR(20),
week_in_year INT,
day_in_month INT,
day_name VARCHAR(20)
);

-- 填充数据(2023-01-01 ~ 2025-12-31)
INSERT INTO time_calendar
SELECT
TO_CHAR(d, 'YYYY-MM-DD') AS date_key,
d::DATE AS date,
EXTRACT(YEAR FROM d)::INT AS year,
EXTRACT(QUARTER FROM d)::INT AS quarter,
EXTRACT(MONTH FROM d)::INT AS month,
TO_CHAR(d, 'Month') AS month_name,
EXTRACT(WEEK FROM d)::INT AS week_in_year,
EXTRACT(DAY FROM d)::INT AS day_in_month,
TO_CHAR(d, 'Day') AS day_name
FROM generate_series(
DATE '2023-01-01',
DATE '2025-12-31',
INTERVAL '1 day'
) AS d;

📌 注意事项

  • date_key 是主键,适用于语义模型中唯一标识每一天的成员ID
  • 保留 date 类型字段是为了后续可能的时间函数计算或日期范围筛选;
  • week_in_year 建议统一采用 ISO 周(周一为一周开始),确保跨数据库一致性;
  • month_nameday_name 等字符串字段可作为显示字段使用;
  • 可根据需要增加更多时间标志列,如:是否工作日、是否节假日、自定义财务期等。
  • TO_CHAR(d, 'YYYY-MM-DD')DATE_FORMAT(dt, '%Y-%m-%d') 用于保证主键格式标准统一。