441 lines
26 KiB
Markdown
441 lines
26 KiB
Markdown
---
|
||
|
||
### 7.1 dim_goods_category
|
||
|
||
**业务职责**:商品分类维度表,记录商品分类树结构(两级分类),无扩展表(SCD2 缓慢变化维度)
|
||
**数据状态**:2,127 行(26 个分类 × 多版本),当前版本 26 行,SCD2 版本范围 1~78
|
||
**主键**:`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 | 版本号(1~78) |
|
||
|
||
#### 业务关键字段
|
||
|
||
| 字段名 | 类型 | 验证状态 | 语义说明 | 值域/分布 |
|
||
|--------|------|----------|----------|-----------|
|
||
| category_name | varchar(50) | ✅ 已验证 | 分类名称 | 18 个不同名称(含历史版本) |
|
||
| parent_category_id | bigint | ✅ 已验证 | 父分类 ID(0 或 NULL=一级分类) | 一级分类 9 个(parent=0),二级分类 17 个 |
|
||
| category_level | integer | ✅ 已验证 | 分类层级 | 1=一级分类(9), 2=二级分类(17)(当前版本) |
|
||
| is_leaf | integer | ✅ 已验证 | 是否叶子节点 | 0=非叶子(9, 一级), 1=叶子(17, 二级) |
|
||
| business_name | varchar(50) | ✅ 已验证 | 业务线名称 | 9 个不同值,与一级分类对应 |
|
||
| tenant_goods_business_id | bigint | ✅ 已验证 | 业务线 ID | 与 business_name 一一对应 |
|
||
| open_salesman | integer | ✅ 已验证 | 是否开启销售员 | 2=否(2,127),100% 单值 |
|
||
| is_warehousing | integer | ✅ 已验证 | 是否入库管理 | 1=是(2,127),100% 单值 |
|
||
| sort_order | integer | ✅ 已验证 | 排序序号 | 0(大部分) 或 1(少量) |
|
||
|
||
**全空字段**:`alias_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) |
|