26 KiB
category_id, scd2_start_time(复合主键)
关联表:dim_tenant_goods(1:N,goods_category_id / goods_second_category_id → category_id)、dim_store_goods(1:N,goods_category_id / goods_second_category_id → category_id)
> ⚠️ 注意:dim_goods_category 是唯一没有扩展表的维度表。
#### SCD2 字段
| 字段名 | 类型 | 说明 |
|--------|------|------|
| scd2_start_time | timestamptz | 版本生效时间(PK 组成部分) |
| scd2_end_time | timestamptz | 版本失效时间(NULL=当前版本) |
| scd2_is_current | integer | 当前版本标记(1=当前,0=历史) |
| scd2_version | integer | 版本号(1alias_name(801 行 NULL,其余为空字符串或与 category_name 相同)
#### 商品分类树结构(当前版本,26 个分类)
| 一级分类 | 业务线 | 二级分类 |
|----------|--------|----------|
| 酒水 | 酒水 | 饮料、酒水、茶水、咖啡、加料、洋酒 |
| 零食 | 零食 | 零食、面 |
| 器材 | 器材 | 球杆、皮头、其他 |
| 小吃 | 小吃 | 小吃 |
| 果盘 | 水果 | 果盘 |
| 雪糕 | 雪糕 | 雪糕 |
| 槟榔 | 槟榔 | 槟榔 |
| 香烟 | 香烟 | 香烟 |
| 其他 | 其他 | 其他2 |
> ✅ 分类树为严格的两级结构:9 个一级分类(is_leaf=0)→ 17 个二级分类(is_leaf=1)。所有商品挂在二级分类下。
7.2 dim_tenant_goods
业务职责:租户商品维度主表,记录租户级别的商品基本信息(名称、分类、市场价、状态),是门店商品的上级(SCD2)
数据状态:15,416 行(174 个商品 × 多版本),当前版本 174 行,SCD2 版本范围 1~78
主键:tenant_goods_id, scd2_start_time(复合主键)
关联表:dim_tenant_goods_ex(1:1,tenant_goods_id + scd2_start_time)、dim_goods_category(N:1,goods_category_id → category_id,100% 可关联)、dim_goods_category(N:1,goods_second_category_id → category_id,100% 可关联)、dim_store_goods(1:N,tenant_goods_id)、dwd_store_goods_sale(1:N,tenant_goods_id,100% 可关联)
SCD2 字段
同 dim_goods_category:scd2_start_time(PK), scd2_end_time, scd2_is_current, scd2_version
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| goods_name | varchar(128) | ✅ 已验证 | 商品名称 | "百威235毫升"、"哇哈哈矿泉水"、"东方树叶"等 |
| category_name | varchar(64) | ✅ 已验证 | 所属二级分类名称(冗余) | 14 个分类,零食(48)、饮料(38)、其他2(18)、香烟(17) 等 |
| goods_category_id | bigint | ✅ 已验证 | 一级分类 ID | 100% 可关联到 dim_goods_category(当前版本) |
| goods_second_category_id | bigint | ✅ 已验证 | 二级分类 ID | 100% 可关联到 dim_goods_category(当前版本) |
| market_price | numeric(18,2) | ✅ 已验证 | 市场价(建议零售价) | MIN=2 MAX=11,360 AVG=269.89 中位数=12(当前版本) |
| goods_state | integer | ✅ 已验证 | 商品状态 | 1=上架(168), 2=下架(6)(当前版本) |
| is_delete | integer | ✅ 已验证 | 删除标记 | 0=未删除(174),当前版本 100% 未删除 |
| not_sale | integer | ✅ 已验证 | 禁售标记 | 2=否(174),当前版本 100% 可售 |
| goods_number | varchar(64) | ✅ 已验证 | 商品编号 | 非空 |
| unit | varchar(16) | ✅ 已验证 | 计量单位 | 非空 |
透明字段:tenant_goods_id(PK), tenant_id
全零/全空字段:supplier_id(全0/NULL — 15,416 行)、update_time(2,578 行 NULL)
商品分类分布(当前版本,174 个商品)
| 二级分类 | 商品数 | 典型商品 |
|---|---|---|
| 零食 | 48 | 奥利奥饼干、薯片 |
| 饮料 | 38 | 哇哈哈矿泉水、东方树叶、红牛 |
| 其他2 | 18 | 杂项商品 |
| 香烟 | 17 | 钻石荷花、荷花双中支 |
| 雪糕 | 14 | 各类雪糕 |
| 酒水 | 10 | 百威、蓝妹、风花雪月 |
| 球杆 | 8 | 台球杆 |
| 槟榔 | 6 | 各品牌槟榔 |
| 小吃 | 4 | 地道肠、鱼蛋 |
| 面 | 4 | 红烧牛肉面 |
| 果盘 | 2 | 水果拼盘 |
| 洋酒 | 2 | 进口酒 |
| 皮头 | 2 | 球杆皮头 |
| 其他 | 1 | — |
7.3 dim_tenant_goods_ex
业务职责:租户商品扩展表,记录商品图片、条码、成本价、折扣设置等补充信息(SCD2)
数据状态:15,414 行(与主表基本 1:1,差 2 行),当前版本 174 行
主键:tenant_goods_id, scd2_start_time(复合主键)
关联表:dim_tenant_goods(1:1,tenant_goods_id + scd2_start_time)
⚠️ 注意:dim_tenant_goods_ex 有 15,414 行 vs dim_tenant_goods 的 15,416 行,差 2 行。当前版本均为 174 行,1:1 关系在当前版本上成立。
SCD2 字段
同 dim_tenant_goods:scd2_start_time(PK), scd2_end_time, scd2_is_current, scd2_version
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| pinyin_initial | varchar(128) | ✅ 已验证 | 拼音首字母(用于搜索) | 非空 |
| goods_cover | varchar(512) | ✅ 已验证 | 商品封面图 URL | 非空 |
| able_discount | integer | ✅ 已验证 | 是否允许折扣 | 1=允许(174),当前版本 100% 允许 |
| is_warehousing | integer | ✅ 已验证 | 是否入库管理 | 非空 |
| cost_price_type | integer | ✅ 已验证 | 成本价类型 | 非空 |
| able_site_transfer | integer | ✅ 已验证 | 是否允许门店调拨 | 非空 |
全零/全空字段:remark_name(全NULL)、goods_bar_code(全NULL)、sale_channel(全NULL)、common_sale_royalty(全0)、point_sale_royalty(全0)、out_goods_id(全0)
大量零值字段:min_discount_price(12,658/15,414 为 0 或 NULL)、cost_price(14,973/15,414 为 0 或 NULL)
7.4 dim_store_goods
业务职责:门店商品维度主表,记录门店级别的商品信息(售价、库存快照、销量统计、分类冗余),是租户商品在具体门店的实例化(SCD2)
数据状态:18,765 行(173 个商品 × 多版本),当前版本 173 行,SCD2 版本范围 1~78
主键:site_goods_id, scd2_start_time(复合主键)
关联表:dim_store_goods_ex(1:1,site_goods_id + scd2_start_time)、dim_tenant_goods(N:1,tenant_goods_id,100% 可关联)、dim_goods_category(N:1,goods_category_id,100% 可关联)、dim_goods_category(N:1,goods_second_category_id,100% 可关联)、dwd_store_goods_sale(1:N,site_goods_id,100% 可关联)、dwd_goods_stock_summary(1:N,site_goods_id)、dwd_goods_stock_movement(1:N,site_goods_id,100% 可关联)
注:当前版本 173 个门店商品 vs 174 个租户商品,差 1 个(某商品未分配到门店)。
SCD2 字段
同 dim_tenant_goods:scd2_start_time(PK), scd2_end_time, scd2_is_current, scd2_version
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| goods_name | text | ✅ 已验证 | 商品名称(与租户商品一致) | 同 dim_tenant_goods |
| sale_price | numeric(18,2) | ✅ 已验证 | 门店售价 | MIN=2 MAX=11,360 AVG=271.10 中位数=12(当前版本) |
| category_level1_name | text | ✅ 已验证 | 一级分类名称(冗余) | 与 dim_goods_category 一致 |
| category_level2_name | text | ✅ 已验证 | 二级分类名称(冗余) | 与 dim_goods_category 一致 |
| goods_state | integer | ✅ 已验证 | 商品状态 | 1=上架(154), 2=下架(19)(当前版本) |
| enable_status | integer | ✅ 已验证 | 启用状态 | 1=启用(173),当前版本 100% 启用 |
| send_state | integer | ✅ 已验证 | 配送状态 | 1=可配送(173),当前版本 100% |
| is_delete | integer | ✅ 已验证 | 删除标记 | 0=未删除(173),当前版本 100% |
| not_sale | integer | ✅ 已验证 | 禁售标记 | 2=否(173),当前版本 100% 可售 |
| batch_stock_qty | integer | ✅ 已验证 | 批次库存数量 | MIN=0 MAX=1,000(当前版本) |
| sale_qty | integer | ✅ 已验证 | 销售数量(累计) | MIN=0 MAX=6,681 零值=17 |
| total_sales_qty | integer | ✅ 已验证 | 总销售数量 | MIN=0 MAX=6,681 零值=17(与 sale_qty 一致) |
| avg_monthly_sales | numeric(18,4) | ⚠️ 部分验证 | 月均销量 | 91/173 为 NULL 或 0 |
| commodity_code | text | ✅ 已验证 | 商品编码 | 非空 |
透明字段:site_goods_id(PK), tenant_id, site_id, tenant_goods_id, goods_category_id, goods_second_category_id, created_at, updated_at
租户商品与门店商品的关系(关键验证)
✅ 关联完整性:当前版本 173 个门店商品 100% 可关联到 dim_tenant_goods(tenant_goods_id),100% 可关联到 dim_goods_category(goods_category_id 和 goods_second_category_id)。
层级关系:
dim_goods_category(分类)→dim_tenant_goods(租户商品)→dim_store_goods(门店商品)。租户商品定义商品基本信息和市场价,门店商品实例化为具体门店的售价和库存。当前数据中 sale_price 与 market_price 高度一致(门店未单独调价)。
商品分类分布(当前版本,173 个门店商品)
| 一级分类 | 二级分类 | 商品数 |
|---|---|---|
| 零食 | 零食 | 47 |
| 酒水 | 饮料 | 38 |
| 其他 | 其他2 | 18 |
| 香烟 | 香烟 | 17 |
| 雪糕 | 雪糕 | 14 |
| 酒水 | 酒水 | 10 |
| 器材 | 球杆 | 8 |
| 槟榔 | 槟榔 | 6 |
| 零食 | 面 | 4 |
| 小吃 | 小吃 | 4 |
| 器材 | 皮头 | 2 |
| 果盘 | 果盘 | 2 |
| 酒水 | 洋酒 | 2 |
| 器材 | 其他 | 1 |
7.5 dim_store_goods_ex
业务职责:门店商品扩展表,记录门店级别的库存详情、成本价、折扣设置、审核状态等运营信息(SCD2)
数据状态:18,723 行(173 个商品 × 多版本),当前版本 173 行
主键:site_goods_id, scd2_start_time(复合主键)
关联表:dim_store_goods(1:1,site_goods_id + scd2_start_time)
⚠️ 注意:dim_store_goods_ex 有 18,723 行 vs dim_store_goods 的 18,765 行,扩展表版本数略少于主表。当前版本均为 173 行,1:1 关系在当前版本上成立。
SCD2 字段
同 dim_store_goods:scd2_start_time(PK), scd2_end_time, scd2_is_current, scd2_version
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| unit | text | ✅ 已验证 | 计量单位 | 非空 |
| stock_qty | integer | ✅ 已验证 | 当前库存数量 | MIN=0 MAX=976 AVG=27.91(当前版本),4,674 行 NULL(历史版本) |
| cost_price | numeric(18,4) | ⚠️ 部分验证 | 成本价 | MIN=0 MAX=2.87 仅 9 个非零值(当前版本),大部分商品无成本价 |
| cost_price_type | integer | ✅ 已验证 | 成本价类型 | 非空 |
| is_discountable | integer | ✅ 已验证 | 是否可折扣 | 1=可折扣(172), 另 1 个不同(当前版本) |
| forbid_sell_status | integer | ✅ 已验证 | 禁售状态 | 1=正常(173),当前版本 100% |
| audit_status | integer | ✅ 已验证 | 审核状态 | 2=已审核(173),当前版本 100% |
| is_warehousing | integer | ✅ 已验证 | 是否入库管理 | 1=是(173),当前版本 100% |
| able_site_transfer | integer | ✅ 已验证 | 是否允许门店调拨 | 2=否(172), 0(1)(当前版本) |
| custom_label_type | integer | ✅ 已验证 | 自定义标签类型 | 2(173),当前版本 100% 单值 |
| option_required | integer | ✅ 已验证 | 是否必选规格 | 1(173),当前版本 100% 单值 |
| days_on_shelf | integer | ⚠️ 部分验证 | 上架天数 | MIN=0 MAX=13,942 零值=10,359(全量) |
| sort_order | integer | ✅ 已验证 | 排序序号 | 非空 |
全零/全空字段:goods_barcode(全NULL)、stock_secondary_qty(全0/NULL)、safety_stock_qty(全0/NULL)、freeze_status(全0/NULL)、remark(全NULL)、warning_sales_day(全0/NULL)、warning_day_max(全0/NULL)、warning_day_min(全0/NULL)
大量零值字段:provisional_total_cost(18,319/18,723 为 0 或 NULL)、total_purchase_cost(17,740/18,723 为 0 或 NULL)、min_discount_price(15,862/18,723 为 0 或 NULL)
冗余/透明字段:site_name("朗朗桌球"), goods_cover_url(商品图片), pinyin_initial(拼音首字母)
7.6 dwd_store_goods_sale
业务职责:商品销售流水事实表,记录每笔商品销售的单价、数量、金额、折扣等明细
数据状态:26,911 行,时间范围 2025-07-21 ~ 2026-03-04。其中 is_delete=0(有效)26,709 行,is_delete=1(已删除)202 行
主键:store_goods_sale_id
关联表:dwd_store_goods_sale_ex(1:1,store_goods_sale_id)、dwd_settlement_head(N:1,order_settle_id,100% 可关联)、dim_store_goods(N:1,site_goods_id,100% 可关联)、dim_tenant_goods(N:1,tenant_goods_id,100% 可关联)
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| ledger_unit_price | numeric(18,2) | ✅ 已验证 | 商品单价 | MIN=2 MAX=1,690 AVG=11.82 中位数=8(is_delete=0) |
| ledger_count | integer | ✅ 已验证 | 销售数量(负值=退货) | MIN=-1 MAX=66 AVG=1.73 |
| ledger_amount | numeric(18,2) | ✅ 已验证 | 销售金额 = ledger_unit_price × ledger_count ✅ 100% 成立 |
MIN=-12 MAX=1,690 AVG=20.50 中位数=8 |
| discount_money | numeric(18,2) | ✅ 已验证 | 折扣金额 | MIN=0 MAX=990 AVG=1.02 非零=1,833(6.9%) |
| real_goods_money | numeric(18,2) | ✅ 已验证 | 实收金额 = ledger_amount - discount_money ✅ 100% 成立 |
MIN=-12 MAX=1,690 AVG=19.49 |
| cost_money | numeric(18,2) | ✅ 已验证 | 成本金额 | MIN=0 MAX=81.82 非零=2,521(9.4%) |
| ledger_status | integer | ✅ 已验证 | 账本状态 | 1=已结算(26,911),100% 单值 |
| is_delete | integer | ✅ 已验证 | 删除标记 | 0=有效(26,709), 1=已删除(202) |
| discount_price | numeric(18,2) | ✅ 已验证 | 折扣后单价 | 非零=26,618,零值=293 |
| coupon_share_money | numeric(18,2) | ✅ 已验证 | 券分摊金额 | 全部为 0 |
| ledger_name | varchar(200) | ✅ 已验证 | 商品名称(冗余) | 与 dim_store_goods.goods_name 对应 |
| ledger_group_name | varchar(100) | ✅ 已验证 | 商品分组名称 | 非空 |
全零字段:order_pay_id(全0)、coupon_share_money(全0)
透明字段:store_goods_sale_id(PK), order_trade_no, order_settle_id, site_id, tenant_id, site_goods_id, tenant_goods_id, tenant_goods_category_id, tenant_goods_business_id, site_table_id(6,724 为 0 — 商城订单无台桌), create_time
商品销售金额公式(关键验证)
✅ 公式 G1:销售金额 = 单价 × 数量
ledger_amount = ledger_unit_price × ledger_count验证结果:is_delete=0 的 26,709 条 100% 成立(误差 < 0.02 元)
✅ 公式 G2:实收金额 = 销售金额 - 折扣金额
real_goods_money = ledger_amount - discount_money验证结果:is_delete=0 的 26,709 条 100% 成立
✅ 交叉验证 G3:商品流水 ↔ 结算单
SUM(sale.ledger_amount WHERE is_delete=0) = settlement_head.goods_money验证结果:10,175 笔有商品流水的结算中 99.7% 成立(10,145/10,175),30 笔有微小偏差。SUM(sale.real_goods_money WHERE is_delete=0) = settlement_head.real_goods_money同样 99.7% 成立。
销售 TOP 10 商品(is_delete=0)
| 商品名称 | 销售笔数 | 总数量 | 总金额 |
|---|---|---|---|
| 百威235毫升 | 667 | 6,349 | 95,235 |
| 钻石荷花 | 438 | 615 | 28,700 |
| 哇哈哈矿泉水 | 3,322 | 5,511 | 27,555 |
| 东方树叶 | 2,033 | 2,813 | 22,504 |
| 荷花双中支 | 188 | 246 | 17,036 |
| 蓝妹 | 98 | 856 | 15,408 |
| 红牛 | 979 | 1,540 | 15,400 |
| 地道肠 | 1,192 | 2,618 | 13,090 |
| 轻上椰子水 | 608 | 1,046 | 12,552 |
| 风花雪月 | 109 | 756 | 12,096 |
7.7 dwd_store_goods_sale_ex
业务职责:商品销售流水扩展表,记录操作员、销售员、退货、券抵扣等补充信息
数据状态:26,911 行,与主表 1:1
主键:store_goods_sale_id
关联表:dwd_store_goods_sale(1:1,store_goods_sale_id)
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| operator_name | text | ✅ 已验证 | 操作员名称 | 非空 |
| operator_id | bigint | ✅ 已验证 | 操作员 ID | 非空 |
| open_salesman_flag | integer | ✅ 已验证 | 是否开启销售员 | 2=否(26,911),100% 单值 |
| is_single_order | integer | ✅ 已验证 | 是否独立订单 | 1=独立(26,911),100% 单值 |
| sales_type | integer | ✅ 已验证 | 销售类型 | 1=普通销售(26,911),100% 单值 |
| discount_money | numeric(18,2) | ✅ 已验证 | 折扣金额(与主表冗余) | 非零=1,837 |
| returns_number | integer | ✅ 已验证 | 退货数量 | 仅 1 笔非零(值=1) |
| site_name | text | ✅ 已验证 | 门店名称 | "朗朗桌球" |
| goods_remark | text | ⚠️ 部分验证 | 商品备注 | 非空=20,203(75.1%),NULL=6,708 |
全零/全空字段:legacy_order_goods_id(全0)、option_value_name(全NULL)、salesman_name(全NULL)、salesman_user_id(全0)、salesman_role_id(全0)、salesman_org_id(全0)、coupon_deduct_money(全0)、member_discount_amount(全0)、point_discount_money(全0)、point_discount_money_cost(全0)、package_coupon_id(全0)、order_coupon_id(全0)、member_coupon_id(全0)、option_price(全0)、option_member_discount_money(全0)、option_coupon_deduct_money(全0)、push_money(全0)
7.8 商品域空字段汇总
| 表名 | 全零/全空字段 |
|---|---|
| dim_goods_category | alias_name(801 行 NULL) |
| dim_tenant_goods | supplier_id(全0/NULL) |
| dim_tenant_goods_ex | remark_name(全NULL), goods_bar_code(全NULL), sale_channel(全NULL), common_sale_royalty(全0), point_sale_royalty(全0), out_goods_id(全0) |
| dim_store_goods | — |
| dim_store_goods_ex | goods_barcode(全NULL), stock_secondary_qty(全0/NULL), safety_stock_qty(全0/NULL), freeze_status(全0/NULL), remark(全NULL), warning_sales_day(全0/NULL), warning_day_max(全0/NULL), warning_day_min(全0/NULL) |
| dwd_store_goods_sale | order_pay_id(全0), coupon_share_money(全0) |
| dwd_store_goods_sale_ex | legacy_order_goods_id(全0), option_value_name(全NULL), salesman_name(全NULL), salesman_user_id(全0), salesman_role_id(全0), salesman_org_id(全0), coupon_deduct_money(全0), member_discount_amount(全0), point_discount_money(全0), point_discount_money_cost(全0), package_coupon_id(全0), order_coupon_id(全0), member_coupon_id(全0), option_price(全0), option_member_discount_money(全0), option_coupon_deduct_money(全0), push_money(全0) |
===SECTION_8_BOUNDARY===
表清单与数据状态
| 表名 | 类型 | 行数 | 时间范围 | 时间字段 |
|---|---|---|---|---|
dwd_goods_stock_summary |
事实表 | 7,320 | 2025-12-19 ~ 2026-03-04 | fetched_at |
dwd_goods_stock_movement |
事实表 | 35,325 | 2025-07-18 ~ 2026-03-04 | create_time |
8.1 dwd_goods_stock_movement
业务职责:库存变动流水事实表,记录每次库存变动的类型、数量、前后库存、价格等明细
数据状态:35,325 行,时间范围 2025-07-18 ~ 2026-03-04
主键:site_goods_stock_id
关联表:dim_store_goods(N:1,site_goods_id,100% 可关联)
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| stock_type | integer | ✅ 已验证 | 库存变动类型(见下方枚举) | 6 种类型 |
| change_num | numeric(18,4) | ✅ 已验证 | 变动数量(负值=出库,正值=入库,0=盘点) | MIN=-66 MAX=1,000 |
| start_num | numeric(18,4) | ✅ 已验证 | 变动前库存 | 非空 |
| end_num | numeric(18,4) | ✅ 已验证 | 变动后库存 = start_num + change_num ✅ 100% 成立 |
非空 |
| price | numeric(18,4) | ✅ 已验证 | 商品价格 | MIN=2 MAX=11,360 AVG=18.50 中位数=8 零值=0 |
| goods_name | text | ✅ 已验证 | 商品名称 | 非空 |
| unit | text | ✅ 已验证 | 计量单位 | 非空 |
| operator_name | text | ✅ 已验证 | 操作员名称 | 非空 |
| create_time | timestamptz | ✅ 已验证 | 变动时间 | 2025-07-18 ~ 2026-03-04 |
| fetched_at | timestamptz | ✅ 已验证 | ETL 抓取时间 | 非空 |
大量零值字段:change_num_a(33,225/35,325 为 0 或 NULL)、start_num_a(34,275 为 0 或 NULL)、end_num_a(34,275 为 0 或 NULL)
全空字段:remark(34,240/35,325 为 NULL)
透明字段:site_goods_stock_id(PK), tenant_id, site_id, site_goods_id, goods_category_id, goods_second_category_id
stock_type 枚举分布(关键验证)
| stock_type | 笔数 | change_num 方向 | 合计变动量 | 推断含义 |
|---|---|---|---|---|
| 1 | 29,931 | 负值(-1 ~ -66) | -54,462 | 销售出库(最大量,占 84.7%) |
| 2 | 1,016 | 0 | 0 | 盘点(无变动) |
| 4 | 3,294 | 正值(1 ~ 66) | +7,301 | 退货入库 |
| 7 | 34 | 0 | 0 | 盘点(调整类) |
| 8 | 1,016 | 正值(1 ~ 1,000) | +52,427 | 采购入库 |
| 9 | 34 | 负值(-1 ~ -50) | -445 | 报损出库 |
✅ 库存变动净值:-54,462 + 7,301 + 52,427 - 445 = +4,821(净入库),符合门店持续补货的业务逻辑。
库存等式验证(关键验证)
✅ 公式 SM1:变动后库存 = 变动前库存 + 变动数量
end_num = start_num + change_num验证结果:35,325 条 100% 成立
8.2 dwd_goods_stock_summary
业务职责:库存汇总快照事实表,按商品+抓取日期记录期间的库存变动汇总(期初、入库、出库、销售、盘点、期末、当前库存)
数据状态:7,320 行,时间范围 2025-12-19 ~ 2026-03-04,覆盖 173 个商品 × 25 个抓取日
主键:site_goods_id, fetched_at(复合主键)
关联表:dim_store_goods(N:1,site_goods_id)
业务关键字段
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|---|---|---|---|---|
| range_start_stock | numeric(18,4) | ✅ 已验证 | 期初库存 | 非空 |
| range_end_stock | numeric(18,4) | ✅ 已验证 | 期末库存 | 非空 |
| range_in | numeric(18,4) | ⚠️ 部分验证 | 期间入库量 | 5,142/7,320 为 0 或 NULL |
| range_out | numeric(18,4) | ⚠️ 部分验证 | 期间出库量(负值,含销售和其他出库) | 2,999/7,320 为 0 或 NULL |
| range_sale | numeric(18,4) | ⚠️ 部分验证 | 期间销售量 | 3,040/7,320 为 0 或 NULL |
| range_sale_money | numeric(18,2) | ⚠️ 部分验证 | 期间销售金额 | MIN=0 MAX=20,250 |
| range_inventory | numeric(18,4) | ✅ 已验证 | 期间盘点调整量 | 全部为 0(7,320 行) |
| current_stock | numeric(18,4) | ✅ 已验证 | 当前实时库存 | MIN=0 MAX=976 AVG=38.30 |
| category_name | text | ✅ 已验证 | 分类名称 | 非空 |
| goods_name | text | ✅ 已验证 | 商品名称 | 非空 |
| goods_unit | text | ✅ 已验证 | 计量单位 | 非空 |
透明字段:site_goods_id(PK), site_id, tenant_id, goods_category_id, goods_category_second_id, fetched_at(PK)
库存汇总等式验证(关键验证)
⚠️ 公式 SS1:期末库存 = 期初库存 + 入库 + 出库 + 盘点
range_end_stock = range_start_stock + range_in + range_out + range_inventory(注意:range_out为负值,已包含销售出库和其他出库) 验证结果:7,320 条中 6,625 条成立(90.5%),695 条不成立。不成立原因分析:
- 无活动记录(range_sale=0, range_in=0, range_out=0)但 range_start_stock ≠ range_end_stock 的仅 2 条 → 可能是跨期调整
- 有活动记录但等式不成立的 693 条 →
range_out不完全等于销售出库,可能存在其他出库类型(退货冲正、调拨等)未完全反映在汇总字段中range_sale与ABS(range_out)的关系:2,012 条完全相等,1,087 条 range_out 绝对值大于 range_sale(含非销售出库),1,019 条 range_out 绝对值小于 range_sale(数据不一致)⚠️ 警告:库存汇总表的等式成立率仅 90.5%,
range_out与range_sale的关系不完全一致。建议后续验证时以dwd_goods_stock_movement的逐笔流水为准,汇总表仅作参考。
8.3 库存域空字段汇总
| 表名 | 全零/全空字段 |
|---|---|
| dwd_goods_stock_movement | remark(34,240 NULL), change_num_a(33,225 为 0/NULL), start_num_a(34,275 为 0/NULL), end_num_a(34,275 为 0/NULL) |
| dwd_goods_stock_summary | range_inventory(全0) |