diff --git a/README.md b/README.md index fc4c6ae..1cb7b64 100644 --- a/README.md +++ b/README.md @@ -1 +1,281 @@ -# 领悦看板项目 +# 领悦看板项目代码库 + +--- +## 一、代码范围说明 + +1.**数仓``dw``** + +- dim层表加工逻辑: dw/dim +- dwd层表加工逻辑: dw/dwd +- dws层表加工逻辑: dw/dws + +2.**帆软报表后台逻辑``finereport``** + +- 明细表加工逻辑 +- 大屏关键指标加工逻辑 +- 填报表目标库表及校验规则 + + +## 二、SQL开发规范分享 + +### 1. 建表脚本(DDL) + +**【建表语句】** + +命名规则示例: **create_dwd_cost_budget_data_d.sql** + +```sql +-- ***************************************** +-- 开发人员: 杨坤安 +-- 创建日期: 2024-07-18 +-- 功 能: 费控预算金额明细表 +-- ***************************************** +DROP TABLE IF EXISTS dw.dwd_cost_budget_data_d; +CREATE TABLE IF NOT EXISTS dw.dwd_cost_budget_data_d ( + dimaccountcode VARCHAR(255) COMMENT '预算科目编码' +,dimaccountname VARCHAR(255) COMMENT '预算科目名称' +,dimsubjectcode VARCHAR(255) COMMENT '组织机构编码' +,dimsubjectname VARCHAR(255) COMMENT '组织机构名称' +,yearname VARCHAR(50) COMMENT '年' +,totalcode VARCHAR(255) COMMENT '组织机构层级编码' +,monthname VARCHAR(50) COMMENT '月' +,buget VARCHAR(255) COMMENT '预算金额' +,occ VARCHAR(255) COMMENT '已占用金额' +,realfee VARCHAR(255) COMMENT '已使用金额' +,available VARCHAR(255) COMMENT '剩余可用金额' +,budgetfee_rate VARCHAR(50) COMMENT '预算执行率' +)COMMENT = '费控预算金额明细表' +``` + +**【修改表字段】** + +命名规则示例: **alter_dwd_cost_budget_data_d.sql** + +```sql +-- ***************************************** +-- 开发人员: 杨坤安 +-- 修改日期: 2024-07-18 +-- 修改内容: 字段修改 monthname -> month_name +-- ... -> ... +-- ***************************************** + +ALTER TABLE dw.dwd_cost_budget_data_d MODIFY COLUMN monthname month_name; +``` + +**【字段命名规范】** + +- 字段中文名翻译过来的单词来命名 + +- 如果翻译的单词太长,可以适当截取单词,尽量直观一点 + +- 不要使用拼音、关键字命名字段 + +**【表命名规范】** + +数仓层\_业务域\_主要业务数据_跑数天(D|M|Q|Y|) + +如: dwd_cost_budget_data_d + + + +### 2. 数据转换、加载(DML) + +**【关键字大写】** + +使用select、from、where等关键字时使用大写 + +**【层级关联表别名】** + +多个表关联,最外层用T1、T2、T3等顺序命名 + +里面关联子表使用A、B、C、D顺序命名 + +子表中关联使用A1、A2、B1、B2顺序命名 + +**【注释】** + +脚本头注释: 写明谁开发的、开发日期、改段sql主要的功能是什么 + +字段注释: 每个字段必写字段的中文名称,方便理解 + +复杂功能注释: 如果有较复杂的加工逻辑,简要注释写一下该段的加工说明 + +**【其他】** + +字段分割符`,`放到第一列,批量修改比较容易 + +注释间隔、缩进怎么整齐怎么来 + +**【示例】** + +```sql +truncate dw.dwd_cost_detail_data_d; +INSERT into dw.dwd_cost_detail_data_d +SELECT + T1.yearname AS yearname -- 年 + ,T1.monthname AS monthname -- 月 + ,T2.organ_code AS organ_code -- 片区ID + ,T2.organ_name AS organ_name -- 片区名称 + ,T1.cost_code AS cost_code -- 成本类型编码: LC:行政成本 AC:人力成本 + ,T1.cost_name AS cost_name -- 成本类型名称 + ,T1.dimsubjectcode AS dimsubjectcode -- 组织机构编码 + ,T1.dimsubjectname AS dimsubjectname -- 组织机构名称 + ,T1.totalcode AS totalcode -- 组织机构层级编码 + ,T1.dimaccountcode AS dimaccountcode -- 预算科目编码 + ,T1.dimaccountname AS dimaccountname -- 预算科目名称 + ,T1.buget AS buget -- 预算金额 + ,T1.occ AS occ -- 已占用金额 + ,T1.realfee AS realfee -- 已使用金额 + ,T1.available AS available -- 剩余可用金额 + ,T1.budgetfee_rate AS budgetfee_rate -- 预算执行率 + ,T1.originalcurrency AS originalcurrency -- 调整金额 + ,T1.target_fee AS target_fee -- 目标值 + ,T1.actual_fee AS actual_fee -- 实际值 + ,ROUND((T1.target_fee - T1.actual_fee),2) AS diff_amount -- 差额 + ,case when T1.target_fee = 0 then '0%' else concat(ROUND((T1.actual_fee / T1.target_fee)*100,2),'%') end AS implementation_rate -- 执行率 +FROM +( + SELECT + A.yearname AS yearname -- 年 + ,A.monthname AS monthname -- 月 + ,'LC' AS cost_code -- 成本类型编码: LC:行政成本 AC:人力成本 + ,'行政成本' AS cost_name -- 成本类型名称 + ,A.dimsubjectcode AS dimsubjectcode -- 组织机构编码 + ,A.dimsubjectname AS dimsubjectname -- 组织机构名称 + ,A.totalcode AS totalcode -- 组织机构层级编码 + ,A.dimaccountcode AS dimaccountcode -- 预算科目编码 + ,A.dimaccountname AS dimaccountname -- 预算科目名称 + ,A.buget AS buget -- 预算金额 + ,A.occ AS occ -- 已占用金额 + ,A.realfee AS realfee -- 已使用金额 + ,A.available AS available -- 剩余可用金额 + ,A.budgetfee_rate AS budgetfee_rate -- 预算执行率 + ,COALESCE(B.originalcurrency,0) AS originalcurrency -- 调整金额 + ,ROUND((A.buget - COALESCE(B.originalcurrency,0)),2) AS target_fee -- 目标值 + ,A.realfee AS actual_fee -- 实际值 + -- ,'' AS diff_amount -- 差额 + -- ,'' AS implementation_rate -- 执行率 + FROM + ( + SELECT + dimaccountcode -- 预算科目编码 + ,dimaccountname -- 预算科目名称 + ,dimsubjectcode -- 组织机构编码 + ,dimsubjectname -- 组织机构名称 + ,yearname -- 年 + ,totalcode -- 组织机构层级编码 + ,monthname -- 月 + ,buget -- 预算金额 + ,occ -- 已占用金额 + ,realfee -- 已使用金额 + ,available -- 剩余可用金额 + ,budgetfee_rate -- 预算执行率 + FROM dw.dwd_cost_budget_data_d -- 预算金额明细表 + WHERE dimaccountcode IN('WY0402','WY040201','WY040202','WY040203','WY040204','WY040205','WY040206','WY040207','WY040208','WY040209','WY040210','WY040211','WY040212','WY040213','WY040214','WY040215','WY040216') + )A + LEFT JOIN + ( + SELECT + year -- 年 + ,month -- 月 + ,dimsubjectcode -- 调整组织机构编码 + ,dimaccountcode -- 调整预算科目编码 + ,originalcurrency -- 调整金额 + FROM dw.dwd_cost_adjust_data_d -- 调整金额明细表 + WHERE dimaccountcode IN('WY0402','WY040201','WY040202','WY040203','WY040204','WY040205','WY040206','WY040207','WY040208','WY040209','WY040210','WY040211','WY040212','WY040213','WY040214','WY040215','WY040216') + )B + ON A.dimaccountcode = B.dimaccountcode + AND A.dimsubjectcode = B.dimsubjectcode + AND A.yearname = B.year + AND A.monthname = B.month + UNION ALL + SELECT + A.yearname AS yearname -- 年 + ,A.monthname AS monthname -- 月 + ,'AC' AS cost_code -- 成本类型编码: LC:行政成本 AC:人力成本 + ,'人力成本' AS cost_name -- 成本类型名称 + ,A.dimsubjectcode AS dimsubjectcode -- 组织机构编码 + ,A.dimsubjectname AS dimsubjectname -- 组织机构名称 + ,A.totalcode AS totalcode -- 组织机构层级编码 + ,A.dimaccountcode AS dimaccountcode -- 预算科目编码 + ,A.dimaccountname AS dimaccountname -- 预算科目名称 + ,A.buget AS buget -- 预算金额 + ,A.occ AS occ -- 已占用金额 + ,A.realfee AS realfee -- 已使用金额 + ,A.available AS available -- 剩余可用金额 + ,A.budgetfee_rate AS budgetfee_rate -- 预算执行率 + ,COALESCE(B.originalcurrency,0) AS originalcurrency -- 调整金额 + ,ROUND((A.buget - COALESCE(B.originalcurrency,0)),2) AS target_fee -- 目标值 + ,A.realfee AS actual_fee -- 实际值 + -- ,'' AS diff_amount -- 差额 + -- ,'' AS implementation_rate -- 执行率 + FROM + ( + SELECT + dimaccountcode -- 预算科目编码 + ,dimaccountname -- 预算科目名称 + ,dimsubjectcode -- 组织机构编码 + ,dimsubjectname -- 组织机构名称 + ,yearname -- 年 + ,totalcode -- 组织机构层级编码 + ,monthname -- 月 + ,buget -- 预算金额 + ,occ -- 已占用金额 + ,realfee -- 已使用金额 + ,available -- 剩余可用金额 + ,budgetfee_rate -- 预算执行率 + FROM dw.dwd_cost_budget_data_d -- 预算金额明细表 + WHERE dimaccountcode IN('WY0401','WY040101','WY040102','WY040103','WY040104','WY040105','WY040106','WY040107','WY040108','WY040109','WY040110','WY040111','WY040112','WY040113','WY040114') + )A + LEFT JOIN + ( + SELECT + year -- 年 + ,month -- 月 + ,dimsubjectcode -- 调整组织机构编码 + ,dimaccountcode -- 调整预算科目编码 + ,originalcurrency -- 调整金额 + FROM dw.dwd_cost_adjust_data_d -- 调整金额明细表 + WHERE dimaccountcode IN('WY0401','WY040101','WY040102','WY040103','WY040104','WY040105','WY040106','WY040107','WY040108','WY040109','WY040110','WY040111','WY040112','WY040113','WY040114') + )B + ON A.dimaccountcode = B.dimaccountcode + AND A.dimsubjectcode = B.dimsubjectcode + AND A.yearname = B.year + AND A.monthname = B.month +)T1 +LEFT JOIN +( + SELECT + organ_code -- erp片区id + ,organ_name -- erp片区名称 + ,cost_comm_id -- 费控项目id + FROM dw.dim_organ_mapping -- 片区项目映射维度表 + where cost_comm_id is not null + GROUP BY + organ_code -- erp片区id + ,organ_name -- erp片区名称 + ,cost_comm_id -- 费控项目id +)T2 +ON T1.dimsubjectcode = T2.cost_comm_id +; +``` + + + +### 3. 优化SQL查询 + +- 避免使用``select * from xxx``,需要哪些字段,select哪些字段即可; + +- 需要where过滤的的,在关联前进行过滤,避免关联后再进行过滤; + +- 较为复杂的转换加工进行落表; + + + + + + + +--- + + diff --git a/doc/映射表规范.md b/映射表规范.md similarity index 100% rename from doc/映射表规范.md rename to 映射表规范.md