核心概念
时间语义
时间语义说明一个数字对应时间点的状态,还是一段时间内发生的事件。日期写在 SQL 里,不代表业务含义已经写清楚。
“截至某天”描述一个时间点的状态,“一段时间”描述期间内发生的事件;两个问题不能共用同一条时间条件。
时间语义说明一个数字对应时间点的状态,还是一段时间内发生的事件。日期写在 SQL 里,不代表业务含义已经写清楚。
2026-09-30 的账户余额快照里,A101 是 720 元,A102 是 480 元。把这两行相加,回答的是“9 月 30 日这个时间点,账户状态合计还有多少钱”。
这对应第 02 章见过的 Periodic Snapshot Fact:一行代表一个账户在固定周期末的状态,即使当天没有新交易,也可以有一行快照。
选择“截至某天”或“一段时间”,查看统计边界、输入行含义、纳入的记录和结果。取款事件会保留在表里,但不会被当成“累计存入金额”。
2026-09-01 到 2026-09-30 之间,T001、T003、T004 三笔存入交易合计 680 元。这个数字描述期间内发生了什么,不等于 9 月 30 日仍然留在账户里的余额;期间里还可能发生取款、转账或其他交易。
因此,存款余额使用 snapshot_date 表达状态归属,累计存入金额使用交易事件的日期区间。两者的统计对象、输入 Grain 和可回答问题都不同。
先选业务问题,再查看对应的事实形态和时间字段。
| 快照日 | 账户 | 余额 |
|---|---|---|
| 2026-09-30 | A101 | 720 元 |
| 2026-09-30 | A102 | 480 元 |