Go to file
2024-11-27 11:15:49 +08:00
.idea modified: .idea/sqldialects.xml 2024-11-27 11:15:49 +08:00
doc 冲突 2024-11-27 11:07:58 +08:00
dw 冲突 2024-11-27 11:07:58 +08:00
finereport 冲突 2024-11-27 11:07:58 +08:00
leading-project.iml 初始化仓库 2024-07-21 22:06:45 +08:00
README.md 冲突 2024-11-27 11:07:58 +08:00
映射表规范.md 冲突 2024-11-27 11:07:58 +08:00
看板上线后修改记录-杨坤安.md 冲突 2024-11-27 11:07:58 +08:00

领悦看板项目代码库


一、代码范围说明

1.数仓dw

  • dim层表加工逻辑: dw/dim
  • dwd层表加工逻辑: dw/dwd
  • dws层表加工逻辑: dw/dws

2.帆软报表后台逻辑finereport

  • 明细表加工逻辑
  • 大屏关键指标加工逻辑
  • 填报表目标库表及校验规则

二、SQL开发规范分享

1. 建表脚本DDL

【建表语句】

命名规则示例: create_dwd_cost_budget_data_d.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

-- *****************************************
-- 开发人员:  杨坤安
-- 修改日期:  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主要的功能是什么

字段注释: 每个字段必写字段的中文名称,方便理解

复杂功能注释: 如果有较复杂的加工逻辑,简要注释写一下该段的加工说明

【其他】

字段分割符,放到第一列,批量修改比较容易

注释间隔、缩进怎么整齐怎么来

【示例】

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过滤的的在关联前进行过滤避免关联后再进行过滤

  • 较为复杂的转换加工进行落表;