日历维度
在 XpertAI 数据分析平台中,日历维度(也称“时间维度”)是构建各类时间序列分析的基础,支持用户基于年、季度、月、周、日等时间粒度灵活进行数据切片、趋势分析和同比/环比计算等操作。
✨ 功能说明
日历维度提供标准化的时间层级结构,便于用户在不同粒度间切换查看数据表现。例如:
- 年(Year):适用于年度对比、年度汇总分析等场景;
- 季度(Quarter):支持按季度观察销售、经营趋势;
- 月份(Month):常用于月度报告、月环比分析;
- 周(Week):适用于周期性周度运营分析;
- 日(Day):支持查看具体日期的数据,如每日销售、每日指标波动等。
🧭 时间层级与语义说明
平台内置标准时间层级体系,每个层级具有清晰的语义与格式化规则:
层级名称 | 说明 | 格式化字符串 | 示例值 |
---|---|---|---|
Calendar Year | 表示年粒度 | yyyy | 2024 |
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_key | VARCHAR(10) | 主键,格式为 YYYY-MM-DD |
date | DATE | 日期型字段 |
year | INT | 年份 |
quarter | INT | 季度(1~4) |
month | INT | 月份(1~12) |
month_name | VARCHAR(20) | 月份名称(如 January) |
week_in_year | INT | 年内第几周 |
day_in_month | INT | 月内第几天 |
day_name | VARCHAR(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_name
、day_name
等字符串字段可作为显示字段使用;- 可根据需要增加更多时间标志列,如:是否工作日、是否节假日、自定义财务期等。
TO_CHAR(d, 'YYYY-MM-DD')
和DATE_FORMAT(dt, '%Y-%m-%d')
用于保证主键格式标准统一。