1.0.178.sql 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. -- =============================================================================
  2. -- 批次:S5-S6-S7-T8-KPI-DATA-FOUNDATION-REFRESH-1
  3. -- 范围:S5 物料仓储 / S6 生产执行 / S7 成品仓储 — T8 KPI 数据底座
  4. -- 边界:
  5. -- 1. 只建 DOP 端 DWD 与元数据登记,不建 mdp_stg_t8_*(一期不做贴源层)
  6. -- 2. 不动 T8 源库任何对象
  7. -- 3. metric_value 保留 NULL 语义;分母缺失时禁止伪装 0
  8. -- 4. 所有 INSERT 使用 ON DUPLICATE KEY UPDATE 保证幂等
  9. -- 上游 SQL:方老师 v5.4 KPI 字段对照表 J 列(DOP-T8字段对照表_v5.4(3) 的副本.xlsx)
  10. -- 字段反推依据:lwb/对接T8/T8-KPI字段对照表-按SQL重新梳理-v1.md
  11. -- 阶段 0 实测:lwb/对接T8/T8-KPI开发阶段0证据-v1.md
  12. -- =============================================================================
  13. -- -----------------------------------------------------------------------------
  14. -- A. 9 张 DWD 主题宽表(dwd_t8_<业务主题>,统一 t8 前缀以标识源系统)
  15. -- -----------------------------------------------------------------------------
  16. -- A.1 #16 S5 物料上线周期(日 T+1)
  17. CREATE TABLE IF NOT EXISTS `dwd_t8_material_online_cycle` (
  18. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  19. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  20. `factory_id` BIGINT NOT NULL DEFAULT 1,
  21. `biz_date` DATE NOT NULL COMMENT '业务日期(refresh 跑数日期)',
  22. `source_ztid` VARCHAR(64) NOT NULL COMMENT 'T8 账套(kc_tz_head.ztid)',
  23. `item_code` VARCHAR(64) NOT NULL COMMENT 'T8 kc_tz_list.code 物料编码',
  24. `online_date` DATETIME NULL COMMENT '配送到产线日期=lbs=生产领料最早 shtime',
  25. `receipt_date` DATETIME NULL COMMENT '物料收货日期=lbs=采购入库最早 shtime',
  26. `cycle_days` INT NULL COMMENT 'DATEDIFF(day, receipt_date, online_date);任一端 NULL 时 NULL',
  27. `batch_id` VARCHAR(100) NOT NULL,
  28. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  29. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  30. UNIQUE KEY `uk_t8_mat_online_cycle` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`item_code`),
  31. KEY `idx_t8_mat_online_cycle_biz_date` (`biz_date`),
  32. KEY `idx_t8_mat_online_cycle_batch` (`batch_id`)
  33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #16 物料上线周期 DWD';
  34. -- A.2 #17 S5 物料上线满足率(日 T+1)
  35. CREATE TABLE IF NOT EXISTS `dwd_t8_material_online_fulfillment` (
  36. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  37. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  38. `factory_id` BIGINT NOT NULL DEFAULT 1,
  39. `biz_date` DATE NOT NULL,
  40. `source_ztid` VARCHAR(64) NOT NULL,
  41. `work_order_no` VARCHAR(64) NOT NULL COMMENT 'T8 kc_dd_head.noid = kc_tz_list.lynoid',
  42. `before_kgdate_rows` INT NOT NULL DEFAULT 0 COMMENT '工单开工日期前完成物料上线行数(分子)',
  43. `total_rows` INT NOT NULL DEFAULT 0 COMMENT '工单物料总行数(分母,来自 kc_dd_list_cllist)',
  44. `fulfillment_rate` DECIMAL(18,4) NULL COMMENT '分母=0 时 NULL;不伪装 0',
  45. `batch_id` VARCHAR(100) NOT NULL,
  46. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  47. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  48. UNIQUE KEY `uk_t8_mat_online_full` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`work_order_no`),
  49. KEY `idx_t8_mat_online_full_biz_date` (`biz_date`),
  50. KEY `idx_t8_mat_online_full_batch` (`batch_id`)
  51. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #17 物料上线满足率 DWD';
  52. -- A.3 #18 S5 物料仓储人效(月 M+1)
  53. CREATE TABLE IF NOT EXISTS `dwd_t8_material_warehouse_efficiency` (
  54. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  55. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  56. `factory_id` BIGINT NOT NULL DEFAULT 1,
  57. `biz_month` CHAR(7) NOT NULL COMMENT 'YYYY-MM',
  58. `source_ztid` VARCHAR(64) NOT NULL,
  59. `period_start` DATE NOT NULL COMMENT '统计区间起(含)',
  60. `period_end` DATE NOT NULL COMMENT '统计区间止(含)',
  61. `online_qty` DECIMAL(18,4) NULL COMMENT 'SUM(kc_tz_list.slzx) where lbs=生产领料(分子)',
  62. `warehouse_headcount` INT NULL COMMENT 'sys_pelist count where gw=仓管 zzzt=在职(分母)',
  63. `efficiency` DECIMAL(18,4) NULL COMMENT 'online_qty/warehouse_headcount;分母 0 或 NULL 时 NULL',
  64. `denominator_status` VARCHAR(32) NOT NULL DEFAULT 'OK' COMMENT 'OK | NO_HEADCOUNT | NO_NUMERATOR',
  65. `batch_id` VARCHAR(100) NOT NULL,
  66. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  67. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  68. UNIQUE KEY `uk_t8_mat_wh_eff` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`),
  69. KEY `idx_t8_mat_wh_eff_batch` (`batch_id`)
  70. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #18 物料仓储人效 DWD(人效类分母缺失保留 NULL)';
  71. -- A.4 #19 S5 品类物料库存周转(月 M+1,来源 TVF Rep_总账_存货_V3)
  72. CREATE TABLE IF NOT EXISTS `dwd_t8_material_inventory_turnover` (
  73. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  74. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  75. `factory_id` BIGINT NOT NULL DEFAULT 1,
  76. `biz_month` CHAR(7) NOT NULL,
  77. `source_ztid` VARCHAR(64) NOT NULL,
  78. `period_start_yyyymm` CHAR(6) NOT NULL COMMENT 'TVF 入参起期 YYYYMM',
  79. `period_end_yyyymm` CHAR(6) NOT NULL COMMENT 'TVF 入参止期 YYYYMM',
  80. `warehouse_code` VARCHAR(64) NULL COMMENT 'TVF.ckcode',
  81. `warehouse_name` VARCHAR(200) NULL COMMENT 'TVF.ckname',
  82. `item_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'TVF.code',
  83. `item_name` VARCHAR(200) NULL COMMENT 'TVF.cname',
  84. `category_code` VARCHAR(64) NULL COMMENT 'TVF.pcode',
  85. `category_name` VARCHAR(200) NULL COMMENT 'TVF.pname',
  86. `avg_inventory_value` DECIMAL(18,4) NULL COMMENT 'TVF.je3 月平均库存金额(D1)',
  87. `monthly_outbound_cost` DECIMAL(18,4) NULL COMMENT 'TVF.je2 当月出库成本(D2)',
  88. `turnover_days` DECIMAL(18,4) NULL COMMENT 'D1/D2 × 30;D2 NULL 或 0 时 NULL',
  89. `batch_id` VARCHAR(100) NOT NULL,
  90. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  91. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  92. UNIQUE KEY `uk_t8_mat_inv_turn` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`,`warehouse_code`,`item_code`),
  93. KEY `idx_t8_mat_inv_turn_batch` (`batch_id`)
  94. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #19 品类物料库存周转 DWD(TVF Rep_总账_存货_V3)';
  95. -- A.5 #22 S6 工单制造满足率(日 T+1)
  96. CREATE TABLE IF NOT EXISTS `dwd_t8_work_order_mfg_fulfillment` (
  97. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  98. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  99. `factory_id` BIGINT NOT NULL DEFAULT 1,
  100. `biz_date` DATE NOT NULL,
  101. `source_ztid` VARCHAR(64) NOT NULL,
  102. `order_no` VARCHAR(64) NOT NULL COMMENT 'T8 kc_dd_head.noid 工单号',
  103. `task_no` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'T8 kc_dd_list.rwnoid 任务号',
  104. `item_code` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'T8 物料编码',
  105. `plan_qty` DECIMAL(18,4) NULL COMMENT 'kc_dd_list.sl 计划数量(分母)',
  106. `done_qty_in_window` DECIMAL(18,4) NULL COMMENT 'SUM(d.slzx) 计划完工时间内累计报工数量(分子)',
  107. `fulfillment_rate` DECIMAL(18,4) NULL COMMENT 'done/plan;plan<=0 或 NULL 时 NULL',
  108. `batch_id` VARCHAR(100) NOT NULL,
  109. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  110. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  111. UNIQUE KEY `uk_t8_wo_mfg_full` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`order_no`,`task_no`,`item_code`),
  112. KEY `idx_t8_wo_mfg_full_biz_date` (`biz_date`),
  113. KEY `idx_t8_wo_mfg_full_batch` (`batch_id`)
  114. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #22 工单制造满足率 DWD';
  115. -- A.6 #23 S6 工单制造人效(月 M+1)
  116. CREATE TABLE IF NOT EXISTS `dwd_t8_work_order_mfg_efficiency` (
  117. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  118. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  119. `factory_id` BIGINT NOT NULL DEFAULT 1,
  120. `biz_month` CHAR(7) NOT NULL,
  121. `source_ztid` VARCHAR(64) NOT NULL,
  122. `period_start` DATE NOT NULL,
  123. `period_end` DATE NOT NULL,
  124. `done_count` INT NULL COMMENT 'count(*) where lbs=生产入库 且 (slzx>=sl OR gdyn=1)(分子)',
  125. `production_headcount` INT NULL COMMENT 'sys_pelist count where gw=生产 zzzt=在职(分母)',
  126. `efficiency` DECIMAL(18,4) NULL COMMENT 'done_count/production_headcount;分母 0 或 NULL 时 NULL',
  127. `denominator_status` VARCHAR(32) NOT NULL DEFAULT 'OK',
  128. `batch_id` VARCHAR(100) NOT NULL,
  129. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  130. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  131. UNIQUE KEY `uk_t8_wo_mfg_eff` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`),
  132. KEY `idx_t8_wo_mfg_eff_batch` (`batch_id`)
  133. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #23 工单制造人效 DWD(人效类分母缺失保留 NULL)';
  134. -- A.7 #25 S7 订单发货周期(日 T+1,5 表 JOIN)
  135. CREATE TABLE IF NOT EXISTS `dwd_t8_order_shipment_cycle` (
  136. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  137. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  138. `factory_id` BIGINT NOT NULL DEFAULT 1,
  139. `biz_date` DATE NOT NULL,
  140. `source_ztid` VARCHAR(64) NOT NULL,
  141. `order_no` VARCHAR(64) NOT NULL COMMENT 'T8 kc_dd_head.noid 销售订单号',
  142. `cycle_days` INT NULL COMMENT 'datediff(day,min(shdate),max(shtime));仅含 min(wczt)=1 的订单',
  143. `batch_id` VARCHAR(100) NOT NULL,
  144. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  145. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  146. UNIQUE KEY `uk_t8_ord_ship_cycle` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`order_no`),
  147. KEY `idx_t8_ord_ship_cycle_biz_date` (`biz_date`),
  148. KEY `idx_t8_ord_ship_cycle_batch` (`batch_id`)
  149. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #25 订单发货周期 DWD(5 表 JOIN)';
  150. -- A.8 #26 S7 订单发货满足率(日 T+1)
  151. CREATE TABLE IF NOT EXISTS `dwd_t8_order_shipment_fulfillment` (
  152. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  153. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  154. `factory_id` BIGINT NOT NULL DEFAULT 1,
  155. `biz_date` DATE NOT NULL,
  156. `source_ztid` VARCHAR(64) NOT NULL,
  157. `order_no` VARCHAR(64) NOT NULL,
  158. `total_rows` INT NOT NULL DEFAULT 0 COMMENT '该订单总行数',
  159. `in_window_rows` INT NOT NULL DEFAULT 0 COMMENT '在确认交期前发货的行数',
  160. `fulfillment_rate` DECIMAL(18,4) NULL COMMENT '(in_window/total)×100;total=0 时 NULL',
  161. `batch_id` VARCHAR(100) NOT NULL,
  162. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  163. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  164. UNIQUE KEY `uk_t8_ord_ship_full` (`tenant_id`,`factory_id`,`biz_date`,`source_ztid`,`order_no`),
  165. KEY `idx_t8_ord_ship_full_biz_date` (`biz_date`),
  166. KEY `idx_t8_ord_ship_full_batch` (`batch_id`)
  167. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #26 订单发货满足率 DWD';
  168. -- A.9 #27 S7 成品仓储人效(月 M+1)
  169. CREATE TABLE IF NOT EXISTS `dwd_t8_finished_warehouse_efficiency` (
  170. `id` BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  171. `tenant_id` BIGINT NOT NULL DEFAULT 0,
  172. `factory_id` BIGINT NOT NULL DEFAULT 1,
  173. `biz_month` CHAR(7) NOT NULL,
  174. `source_ztid` VARCHAR(64) NOT NULL,
  175. `period_start` DATE NOT NULL,
  176. `period_end` DATE NOT NULL,
  177. `shipment_qty` DECIMAL(18,4) NULL COMMENT 'SUM(b.slzx) where lbs=销售出库(分子)',
  178. `warehouse_headcount` INT NULL COMMENT 'sys_pelist count where gw=仓管 zzzt=在职(分母,与 S5 共用枚举,待业务侧拆物料仓 vs 成品仓)',
  179. `efficiency` DECIMAL(18,4) NULL COMMENT 'shipment_qty/warehouse_headcount;分母 0 或 NULL 时 NULL',
  180. `denominator_status` VARCHAR(32) NOT NULL DEFAULT 'OK',
  181. `batch_id` VARCHAR(100) NOT NULL,
  182. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
  183. `update_time` DATETIME NULL ON UPDATE CURRENT_TIMESTAMP,
  184. UNIQUE KEY `uk_t8_fin_wh_eff` (`tenant_id`,`factory_id`,`biz_month`,`source_ztid`),
  185. KEY `idx_t8_fin_wh_eff_batch` (`batch_id`)
  186. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='T8 #27 成品仓储人效 DWD(人效类分母缺失保留 NULL)';
  187. -- -----------------------------------------------------------------------------
  188. -- B. mdp_source 登记 T8 数据源(密码不入库,凭据在 Database.json + CLAUDE.md)
  189. -- -----------------------------------------------------------------------------
  190. INSERT INTO `mdp_source` (
  191. `tenant_id`,`source_code`,`source_name`,`source_type`,`status`,
  192. `db_type`,`db_host`,`db_port`,`db_name`,`db_user`,
  193. `db_password_enc`,`db_extra_params`,
  194. `remark`
  195. ) VALUES (
  196. 0,'T8_V5_SQLSERVER','T8 一站式系统源库(SQL Server 只读)','DB',1,
  197. 'SQLServer','39.105.125.212',29289,'t8_V5_09_56','dopsa',
  198. NULL,'ConfigId=t8_v5;TrustServerCertificate=true;Encrypt=false',
  199. 'S5/S6/S7 KPI 数据贴源同步用;只读 SELECT;凭据见 CLAUDE.md「T8 源库连接信息」与 Database.json'
  200. )
  201. ON DUPLICATE KEY UPDATE
  202. `source_name`=VALUES(`source_name`),
  203. `db_host`=VALUES(`db_host`),
  204. `db_port`=VALUES(`db_port`),
  205. `db_name`=VALUES(`db_name`),
  206. `db_user`=VALUES(`db_user`),
  207. `db_extra_params`=VALUES(`db_extra_params`),
  208. `remark`=VALUES(`remark`),
  209. `update_time`=CURRENT_TIMESTAMP;
  210. -- -----------------------------------------------------------------------------
  211. -- C. mdp_entity 登记 9 个 KPI 用到的 T8 表/TVF(target_table_name 一期为 NULL,不贴源)
  212. -- -----------------------------------------------------------------------------
  213. INSERT INTO `mdp_entity` (
  214. `tenant_id`,`source_id`,`entity_code`,`entity_name`,`entity_type`,
  215. `source_table_name`,`target_table_name`,`sync_mode`,`batch_size`,`status`,`remark`
  216. )
  217. SELECT 0, s.id, v.entity_code, v.entity_name, v.entity_type,
  218. v.source_table_name, NULL, 'NONE', 0, 1, v.remark
  219. FROM `mdp_source` s
  220. CROSS JOIN (
  221. SELECT 'T8_KC_TZ_HEAD' AS entity_code, 'T8 出入库流水头表' AS entity_name, 'TABLE' AS entity_type, 'kc_tz_head' AS source_table_name, 'S5/S6/S7 KPI 共用;按 lbs 区分生产领料/采购入库/生产入库/销售出库' AS remark
  222. UNION ALL SELECT 'T8_KC_TZ_LIST', 'T8 出入库流水明细', 'TABLE', 'kc_tz_list', '与 kc_tz_head 关联,含 code/slzx/sl/lynoid 等'
  223. UNION ALL SELECT 'T8_KC_DD_HEAD', 'T8 单据头表', 'TABLE', 'kc_dd_head', 'S6/S7 KPI 用;按 lbs 区分生产任务/销售订单'
  224. UNION ALL SELECT 'T8_KC_DD_LIST', 'T8 单据明细', 'TABLE', 'kc_dd_list', '与 kc_dd_head 关联,含 sl/jhdate/rwnoid'
  225. UNION ALL SELECT 'T8_KC_DD_LIST_CLLIST', 'T8 单据物料行', 'TABLE', 'kc_dd_list_cllist', 'S5 #17 工单物料总行数'
  226. UNION ALL SELECT 'T8_KC_ZJ_LIST', 'T8 检验/质检流水', 'TABLE', 'kc_zj_list', 'S7 #25 FQC 报检关联'
  227. UNION ALL SELECT 'T8_CJ_BG_HEAD_REP', 'T8 员工报工头表', 'TABLE', 'Cj_Bg_Head_Rep', 'S5 #17 工单开工时间(kgdate)'
  228. UNION ALL SELECT 'T8_SYS_PELIST', 'T8 人员主数据', 'TABLE', 'sys_pelist', 'S5/S6/S7 人效 KPI 分母(gw=仓管/生产;zzzt=在职)'
  229. UNION ALL SELECT 'T8_REP_ZONGZHANG_CUNHUO_V3','T8 总账存货月报 TVF', 'TVF', 'Rep_总账_存货_V3', 'S5 #19 品类物料库存周转;返回月均库存金额 je3 与出库成本 je2'
  230. ) v
  231. WHERE s.source_code='T8_V5_SQLSERVER' AND s.tenant_id=0
  232. ON DUPLICATE KEY UPDATE
  233. `entity_name`=VALUES(`entity_name`),
  234. `entity_type`=VALUES(`entity_type`),
  235. `source_table_name`=VALUES(`source_table_name`),
  236. `remark`=VALUES(`remark`),
  237. `update_time`=CURRENT_TIMESTAMP;
  238. -- -----------------------------------------------------------------------------
  239. -- D. ado_smart_ops_kpi_master 注册 9 个 KPI(L1)
  240. -- - Direction 沿用既有枚举:lower_is_better / higher_is_better
  241. -- - YellowThreshold / RedThreshold 一期 NULL(业务侧上线前回填)
  242. -- - DataSource 普通表填 T8.dbo.<表名>;TVF 填 T8.dbo.Rep_总账_存货_V3
  243. -- - StatFrequency 沿用既有 "天" / "月" 中文风格
  244. -- -----------------------------------------------------------------------------
  245. INSERT INTO `ado_smart_ops_kpi_master` (
  246. `MetricCode`,`ModuleCode`,`MetricLevel`,`ParentId`,`MetricName`,`Description`,`Formula`,`CalcRule`,
  247. `DataSource`,`StatFrequency`,`Department`,`DopFields`,`Unit`,`Direction`,
  248. `IsHomePage`,`SortNo`,`Remark`,`IsEnabled`,`TenantId`,`CreatedAt`,
  249. `YellowThreshold`,`RedThreshold`
  250. ) VALUES
  251. ('S5_L1_001','S5',1,NULL,'物料上线周期',
  252. 'S5 物料仓储:物料从供应商收货入库到配送上线之间的天数差',
  253. '物料上线周期 = 物料配送到生产线日期 - 物料收货日期',
  254. '物料配送到生产线日期 = T8 kc_tz_head + kc_tz_list 中 lbs=生产领料的最早 shtime;物料收货日期 = lbs=采购入库的最早 shtime;按 code 分组取 MIN',
  255. 'T8.dbo.kc_tz_head','天','物料仓储',NULL,'天','lower_is_better',
  256. 0,510,'方老师 v5.4 KPI #16;T8 SQL 原逻辑直发(路径 A)',1,0,NOW(),
  257. NULL,NULL),
  258. ('S5_L1_002','S5',1,NULL,'物料上线满足率',
  259. 'S5 物料仓储:工单开工日期前完成物料上线行数占工单物料总行数比率',
  260. 'S = 工单开工日期前完成物料上线行数 / 工单物料总行数',
  261. '分子=T8 kc_tz_head/list 中 lbs=生产领料 且 shtime <= 工单开工时间 kgdate(Cj_Bg_Head_Rep.noid);分母=kc_dd_head/kc_dd_list_cllist 中 lbs=生产任务 行数',
  262. 'T8.dbo.kc_tz_head','天','物料仓储',NULL,'%','higher_is_better',
  263. 0,520,'方老师 v5.4 KPI #17;分母为 0 时 fulfillment_rate 写 NULL',1,0,NOW(),
  264. NULL,NULL),
  265. ('S5_L1_003','S5',1,NULL,'物料仓储人效',
  266. 'S5 物料仓储:单位仓储人员完成的上线物料数量',
  267. 'H = 完成上线的工单物料数量 / 物料仓储人数',
  268. '分子=统计期 SUM(kc_tz_list.slzx) where lbs=生产领料;分母=sys_pelist count where gw=仓管 AND zzzt=在职',
  269. 'T8.dbo.kc_tz_head','月','物料仓储',NULL,'个/人','higher_is_better',
  270. 0,530,'方老师 v5.4 KPI #18;当前 T8 中 gw 全空,分母为 NULL 时 efficiency 写 NULL(不伪装 0),denominator_status=NO_HEADCOUNT',1,0,NOW(),
  271. NULL,NULL),
  272. ('S5_L1_004','S5',1,NULL,'品类物料库存周转',
  273. 'S5 物料仓储:按品类的物料库存周转天数',
  274. 'D1 / D2 × 30',
  275. 'D1=月平均库存金额=TVF Rep_总账_存货_V3.je3;D2=当月出库成本=TVF Rep_总账_存货_V3.je2;TVF 入参:(账套, 普通, 正常, 起期 YYYYMM, 止期 YYYYMM)',
  276. 'T8.dbo.Rep_总账_存货_V3','月','物料仓储',NULL,'天','lower_is_better',
  277. 0,540,'方老师 v5.4 KPI #19;D2 为 0 或 NULL 时 turnover_days 写 NULL',1,0,NOW(),
  278. NULL,NULL),
  279. ('S6_L1_001','S6',1,NULL,'工单制造满足率',
  280. 'S6 生产执行:计划完工时间内累计报工数量占工单计划生产数量的比率',
  281. '工单制造满足率 = 计划完工时间内累计报工数量 / 工单计划生产数量',
  282. '分母=kc_dd_list.sl where lbs=生产任务;分子=SUM(kc_tz_list.slzx) where lbs=生产入库 AND shtime <= jhdate;按 (noid, rwnoid, code) 关联',
  283. 'T8.dbo.kc_dd_head','天','生产执行',NULL,'%','higher_is_better',
  284. 0,610,'方老师 v5.4 KPI #22;plan_qty<=0 或 NULL 时 fulfillment_rate 写 NULL',1,0,NOW(),
  285. NULL,NULL),
  286. ('S6_L1_002','S6',1,NULL,'工单制造人效',
  287. 'S6 生产执行:单位生产人员完成的工单数量',
  288. '工单制造人效 = 统计期内完成制造的工单数量 / 生产人数',
  289. '分子=count(*) from kc_tz_head/list where lbs=生产入库 AND date0 在窗口 AND (slzx>=sl OR gdyn=1);分母=sys_pelist count where gw=生产 AND zzzt=在职',
  290. 'T8.dbo.kc_tz_head','月','生产执行',NULL,'个/人','higher_is_better',
  291. 0,620,'方老师 v5.4 KPI #23;当前 T8 中 gw 全空,分母为 NULL 时 efficiency 写 NULL(不伪装 0)',1,0,NOW(),
  292. NULL,NULL),
  293. ('S7_L1_001','S7',1,NULL,'订单发货周期',
  294. 'S7 成品仓储:订单最后一行物料发货日期与最早一行物料 FQC 报检日期的天数差',
  295. '订单发货周期 = 订单最后一行物料发货日期 - 订单最早一行物料 FQC 报检日期',
  296. '基于 kc_dd_head/list + kc_tz_head/list + kc_zj_list 5 表 JOIN,按 noid 分组取 datediff(day,min(shdate),max(shtime));仅保留 min(wczt)=1 的订单',
  297. 'T8.dbo.kc_dd_head','天','成品仓储',NULL,'天','lower_is_better',
  298. 0,710,'方老师 v5.4 KPI #25;最复杂 5 表 JOIN',1,0,NOW(),
  299. NULL,NULL),
  300. ('S7_L1_002','S7',1,NULL,'订单发货满足率',
  301. 'S7 成品仓储:在确认交期前发货的行数占订单总行数的比率',
  302. '订单发货满足率 = (在确认交期前发货的行数 / 该订单总行数) × 100%',
  303. '按 (noid, rwnoid, code) 关联,wczt = case when SUM(kc_tz_list.slzx where lbs=销售出库 AND shtime<=jhdate) >= kc_dd_list.sl then 1 else 0',
  304. 'T8.dbo.kc_dd_head','天','成品仓储',NULL,'%','higher_is_better',
  305. 0,720,'方老师 v5.4 KPI #26;total_rows=0 时 fulfillment_rate 写 NULL',1,0,NOW(),
  306. NULL,NULL),
  307. ('S7_L1_003','S7',1,NULL,'成品仓储人效',
  308. 'S7 成品仓储:单位仓储人员完成的发货物料数量',
  309. 'H = 完成发货的订单物料数量 / 成品仓储人数',
  310. '分子=SUM(kc_tz_list.slzx) where lbs=销售出库 AND shtime 在窗口;分母=sys_pelist count where gw=仓管 AND zzzt=在职(与 S5 #18 共用 gw 枚举)',
  311. 'T8.dbo.kc_tz_head','月','成品仓储',NULL,'个/人','higher_is_better',
  312. 0,730,'方老师 v5.4 KPI #27;分母 NULL 或 0 时 efficiency 写 NULL(不伪装 0);gw 是否区分物料仓 vs 成品仓待业务侧确认',1,0,NOW(),
  313. NULL,NULL)
  314. ON DUPLICATE KEY UPDATE
  315. `MetricName`=VALUES(`MetricName`),
  316. `Description`=VALUES(`Description`),
  317. `Formula`=VALUES(`Formula`),
  318. `CalcRule`=VALUES(`CalcRule`),
  319. `DataSource`=VALUES(`DataSource`),
  320. `StatFrequency`=VALUES(`StatFrequency`),
  321. `Department`=VALUES(`Department`),
  322. `Unit`=VALUES(`Unit`),
  323. `Direction`=VALUES(`Direction`),
  324. `SortNo`=VALUES(`SortNo`),
  325. `Remark`=VALUES(`Remark`),
  326. `IsEnabled`=VALUES(`IsEnabled`),
  327. `UpdatedAt`=NOW();