助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
文章目录
- 1:费用事实指标分析及实现
- 2:差旅事实指标分析及实现
- 3:网点物料事实指标分析及实现
1:费用事实指标分析及实现
-
目标:实现DWB层费用报销事实指标表的构建
-
路径
- step1:目标需求
- step2:数据来源
- step3:目标实现
-
实施
-
目标需求:基于费用报销数据统计费用报销金额等指标
-
数据来源
-
ciss_service_expense_report:费用信息表
selectid,--报销单idcreate_user_id,--创建人idsubmoney5, --报销金额create_org_id --创建部门id from ciss_service_expense_report;
-
ciss_base_servicestation:服务网点信息表
selectid,--服务网点idorg_id --部门id from ciss_base_servicestation;
-
ciss_service_exp_report_dtl:费用明细表
selectexp_report_id,--报销单idsubmoney5,--项目报销实际金额item_id --费用项目id from ciss_service_exp_report_dtl;
-
tmp_dict:数据字典表
selectdictid, --项目iddictname --项目名称 from one_make_dwb.tmp_dict where dicttypename = '费用报销项目';
-
-
目标实现
-
建表
drop table if exists one_make_dwb.fact_regular_exp; create table if not exists one_make_dwb.fact_regular_exp(exp_id string comment '费用报销id', ss_id string comment '服务网点id', srv_user_id string comment '服务人员id', actual_exp_money decimal(20,1) comment '费用实际报销金额', exp_item string comment '费用项目id', exp_item_name string comment '费用项目名称', exp_item_money decimal(20,1) comment '费用项目实际金额' ) partitioned by (dt string) stored as orc location '/data/dw/dwb/one_make/fact_regular_exp';
-
抽取
insert overwrite table one_make_dwb.fact_regular_exp partition(dt = '20210101') select/*+repartitions(1) */exp.id as exp_id --费用报销id, ss.id as ss_id --服务网点id, exp.create_user_id as srv_user_id --创建人id, exp.submoney5 as actual_exp_money --实际报销金额, dict.dictid as exp_item --费用项目id, dict.dictname as exp_item_name --费用项目名称, exp_dtl.submoney5 as exp_item_money --费用项目金额 from --费用信息表 (select*from one_make_dwd.ciss_service_expense_reportwhere dt = '20210101' and status = 9 --只取制证会计已审状态 ) exp --服务网点信息表 left join one_make_dwd.ciss_base_servicestation ss on ss.dt = '20210101' and ss.org_id = exp.create_org_id --报销明细表 left join one_make_dwd.ciss_service_exp_report_dtl exp_dtl on exp_dtl.dt = '20210101' and exp.id = exp_dtl.exp_report_id --数据字典表 left join one_make_dwb.tmp_dict dict on dict.dicttypename = '费用报销项目' and dict.dictid = exp_dtl.item_id ;
-
-
-
小结
- 实现DWB层费用报销事实指标表的构建
2:差旅事实指标分析及实现
-
目标:实现DWB层差旅报销事实指标表的构建
-
路径
- step1:目标需求
- step2:数据来源
- step3:目标实现
-
实施
-
目标需求:基于差率报销信息统计交通费用、住宿费用、油费金额等报销费用指标
-
数据来源
-
ciss_service_trvl_exp_sum:差旅报销汇总信息表
selectid,--汇总报销单iduser_id,--报销人id【工程师id】status,--汇总单状态:15表示审核通过submoney5 --应收报销总金额 from ciss_service_trvl_exp_sum;
-
ciss_s_exp_report_wo_payment:汇总报销单与工单费用单对照表
selectexp_report_id,--汇总报销单idworkorder_travel_exp_id --工单费用单id from ciss_s_exp_report_wo_payment;
-
ciss_service_travel_expense:差旅报销单信息表
selectid,--差旅报销单idwork_order_id --工单id from ciss_service_travel_expense;
-
ciss_service_workorder:工单信息表
selectid,--工单idservice_station_id --服务网点id from ciss_service_workorder;
-
ciss_service_trvl_exp_dtl:差旅费用明细表
selecttravel_expense_id,--费用单iditem,--费用项目名称submoney5 --费用金额 from ciss_service_trvl_exp_dtl;
-
-
目标实现
-
建表
drop table if exists one_make_dwb.fact_trvl_exp; create table if not exists one_make_dwb.fact_trvl_exp(trvl_exp_id string comment '差旅报销单id', ss_id string comment '服务网点id', srv_user_id string comment '服务人员id', biz_trip_money decimal(20,1) comment '外出差旅费用金额总计', in_city_traffic_money decimal(20,1) comment '市内交通费用金额总计', hotel_money decimal(20,1) comment '住宿费费用金额总计', fars_money decimal(20,1) comment '车船费用金额总计', subsidy_money decimal(20,1) comment '补助费用金额总计', road_toll_money decimal(20,1) comment '过桥过路费用金额总计', oil_money decimal(20,1) comment '油费金额总计', secondary_money decimal(20,1) comment '二单补助费用总计', third_money decimal(20,1) comment '三单补助费用总计', actual_total_money decimal(20,1) comment '费用报销总计' ) partitioned by (dt string) stored as orc location '/data/dw/dwb/one_make/fact_trvl_exp';
-
-
抽取
insert overwrite table one_make_dwb.fact_trvl_exp partition(dt = '20210101') select--差旅费汇总单idexp_sum.id as trvl_exp_id--服务网点id, wrk_odr.service_station_id as ss_id--服务人员id, exp_sum.user_id as srv_user_id--外出差旅费用金额总计, sum(case when trvl_dtl_sum.item = 1 then trvl_dtl_sum.item_money else 0 end) as biz_trip_money--市内交通费用金额总计, sum(case when trvl_dtl_sum.item = 2 then trvl_dtl_sum.item_money else 0 end) as in_city_traffic_money--住宿费费用金额总计, sum(case when trvl_dtl_sum.item = 3 then trvl_dtl_sum.item_money else 0 end) as hotel_money--车船费用金额总计, sum(case when trvl_dtl_sum.item = 4 then trvl_dtl_sum.item_money else 0 end) as fars_money--补助费用金额总计, sum(case when trvl_dtl_sum.item = 5 then trvl_dtl_sum.item_money else 0 end) as subsidy_money--过桥过路费用金额总计, sum(case when trvl_dtl_sum.item = 6 then trvl_dtl_sum.item_money else 0 end) as road_toll_money--油费金额总计, sum(case when trvl_dtl_sum.item = 7 then trvl_dtl_sum.item_money else 0 end) as oil_money--二单补助费用总计, sum(case when trvl_dtl_sum.item = 8 then trvl_dtl_sum.item_money else 0 end) as secondary_money--三单补助费用总计, sum(case when trvl_dtl_sum.item = 9 then trvl_dtl_sum.item_money else 0 end) as third_money--费用报销总计, max(exp_sum.submoney5) as actual_total_money --差旅报销汇总单 from one_make_dwd.ciss_service_trvl_exp_sum exp_sum --汇总报销单与工单费用单对照表 inner join one_make_dwd.ciss_s_exp_report_wo_payment r on exp_sum.dt = '20210101' and r.dt = '20210101' and exp_sum.id = r.exp_report_id and exp_sum.status = 15 --差旅报销单信息表 inner join one_make_dwd.ciss_service_travel_expense exp on exp.dt = '20210101' and exp.id = r.workorder_travel_exp_id --工单信息表 inner join one_make_dwd.ciss_service_workorder wrk_odr on wrk_odr.dt = '20210101' and wrk_odr.id = exp.work_order_id --获取每种费用项目总金额 inner join (selecttravel_expense_id, item, sum(submoney5) as item_moneyfrom one_make_dwd.ciss_service_trvl_exp_dtlwhere dt = '20210101'group by travel_expense_id, item) as trvl_dtl_sumon trvl_dtl_sum.travel_expense_id = exp.id group by exp_sum.id, wrk_odr.service_station_id, exp_sum.user_id ;
-
-
小结
- 实现DWB层差旅报销事实指标表的构建
3:网点物料事实指标分析及实现
-
目标:实现DWB层网点物料事实指标表的构建
-
路径
- step1:目标需求
- step2:数据来源
- step3:目标实现
-
差旅报销汇总信息表实施
-
目标需求:基于物料申请单的信息统计物料申请数量、物料申请金额等指标
-
数据来源
-
ciss_material_wdwl_sqd:物料申请信息表
selectid,--申请单idcode,--申请单编号service_station_code,--网点编号logistics_type,--物流公司类型logistics_company,--物流公司名称warehouse_code --仓库id from ciss_material_wdwl_sqd;
-
ciss_base_servicestation:服务网点信息表
selectid,--服务网点idcode --服务网点编号 from ciss_base_servicestation;
-
ciss_material_wdwl_sqd_dtl:物料申请明细表
selectwdwl_sqd_id,--申请单idapplication_reason,--申请理由count_approve,--审核数量price,--单价count --个数 from ciss_material_wdwl_sqd_dtl;
-
-
目标实现
-
建表
create table if not exists one_make_dwb.fact_srv_stn_ma(ma_id string comment '申请单id', ma_code string comment '申请单编码', ss_id string comment '服务网点id', logi_id string comment '物流类型id', logi_cmp_id string comment '物流公司id', warehouse_id string comment '仓库id', total_m_num decimal(10,0) comment '申请物料总数量', total_m_money decimal(10,1) comment '申请物料总金额', ma_form_num decimal(10,0) comment '申请单数量', inst_m_num decimal(10,0) comment '安装申请物料数量', inst_m_money decimal(10,1) comment '安装申请物料金额', bn_m_num decimal(10,0) comment '保内申请物料数量', bn_m_money decimal(10,1) comment '保内申请物料金额', rmd_m_num decimal(10,0) comment '改造申请物料数量', rmd_m_money decimal(10,1) comment '改造申请物料金额', rpr_m_num decimal(10,0) comment '维修申请物料数量', rpr_m_money decimal(10,1) comment '维修申请物料金额', sales_m_num decimal(10,0) comment '销售申请物料数量', sales_m_money decimal(10,1) comment '销售申请物料金额', insp_m_num decimal(10,0) comment '巡检申请物料数量', insp_m_money decimal(10,1) comment '巡检申请物料金额' ) partitioned by (dt string) stored as orc location '/data/dw/dwb/one_make/fact_srv_stn_ma';
-
抽取
insert overwrite table one_make_dwb.fact_srv_stn_ma partition(dt = '20210101') select /*+repartition(1) */ ma.id as ma_id, --物料申请单idma.code as ma_code, --申请单编号stn.id as ss_id, --服务网点idma.logistics_type as logi_id, --物流类型idma.logistics_company as logi_cmp_id, --物流公司idma.warehouse_code as warehouse_id, --仓库idsum(m_smry.cnt) as total_m_num , --申请物料总数量sum(m_smry.money) as total_m_money, --申请物料总金额count(1) as ma_form_num, --申请单数量sum(case when m_smry.ma_rsn = 1 then m_smry.cnt else 0 end) as inst_m_num, --安装申请物料数量 sum(case when m_smry.ma_rsn = 1 then m_smry.money else 0 end) as inst_m_money, --安装申请物料金额sum(case when m_smry.ma_rsn = 2 then m_smry.cnt else 0 end) as bn_m_num, --保内申请物料数量sum(case when m_smry.ma_rsn = 2 then m_smry.money else 0 end) as bn_m_money, --保内申请物料金额sum(case when m_smry.ma_rsn = 3 then m_smry.cnt else 0 end) as rmd_m_num, --改造申请物料数量sum(case when m_smry.ma_rsn = 3 then m_smry.money else 0 end) as rmd_m_money, --改造申请物料金额sum(case when m_smry.ma_rsn = 4 then m_smry.cnt else 0 end) as rpr_m_num, --维修申请物料数量sum(case when m_smry.ma_rsn = 4 then m_smry.money else 0 end) as rpr_m_money, --维修申请物料金额sum(case when m_smry.ma_rsn = 5 then m_smry.cnt else 0 end) as sales_m_num, --销售申请物料数量sum(case when m_smry.ma_rsn = 5 then m_smry.money else 0 end) as sales_m_money, --销售申请物料金额sum(case when m_smry.ma_rsn = 6 then m_smry.cnt else 0 end) as insp_m_num, --巡检申请物料数量sum(case when m_smry.ma_rsn = 6 then m_smry.money else 0 end) as insp_m_money --巡检申请物料金额 --物料申请信息表:8为审核通过 from (select * from one_make_dwd.ciss_material_wdwl_sqd where dt = '20210101' and status = 8 ) ma --关联站点信息表,获取站点id left join one_make_dwd.ciss_base_servicestation stn on stn.dt = '20210101' and ma.service_station_code = stn.code --关联物料申请费用明细 left join (select dtl.wdwl_sqd_id as wdwl_sqd_id, dtl.application_reason as ma_rsn, sum(dtl.count_approve) as cnt,sum(dtl.price * dtl.count) as moneyfrom one_make_dwd.ciss_material_wdwl_sqd_dtl dtlwhere dtl.dt = '20210101'group by dtl.wdwl_sqd_id, dtl.application_reason) m_smry on m_smry.wdwl_sqd_id = ma.id group by ma.id, ma.code, stn.id, ma.logistics_type, ma.logistics_company, ma.warehouse_code ;
-
-
-
小结
- 实现DWB层网点物料事实指标表的构建
相关文章:

助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
文章目录 1:费用事实指标分析及实现2:差旅事实指标分析及实现3:网点物料事实指标分析及实现 1:费用事实指标分析及实现 目标:实现DWB层费用报销事实指标表的构建 路径 step1:目标需求step2:数据…...

Istio 安全 mTLS认证 PeerAuthentication
这里定义了访问www.ck8s.com可以使用http也可以使用https访问,两种方式都可以访问。 那么是否可以强制使用mtls方式去访问? mTLS认证 PeerAuthentication PeerAuthentication的主要作用是别人在和网格里的pod进行通信的时候,是否要求mTLS mTL…...

【MySQL】数据库基本使用
文章目录 一、数据库介绍二、数据库使用2.1 登录MySQL2.2 基本使用2.2.1 显示当前 MySQL 实例中所有的数据库列表2.2.2 创建数据库2.2.3 创建数据库表2.2.4 在表中插入数据2.2.5 在表中查询数据 三、服务器、数据库、表之间的关系四、SQL语句分类五、存储引擎 一、数据库介绍 …...
计算shell脚本执行的时间
我们在使用shell脚本进行一些批量活动的时候,在有的场景下会需要知道脚本执行用了多长的时间,一谈到这个话题,我们一般的想法就是记录时间再开始阶段,执行完成后再记录时间,然后求时间差,这样是可以的&…...
无网络环境下,如何部署Docker镜像
无网络环境下,如何部署Docker镜像 什么是Docker镜像 Docker镜像是Docker容器的基础构建块。它是一个轻量级、独立且可执行的软件包,其中包含了运行应用程序所需的所有文件系统、代码、依赖关系和配置。 Docker镜像由一系列只读层(Layers&a…...

瑞吉外卖项目----(2)缓存优化
1 缓存优化 1.0 问题说明 1.1 环境搭建 将项目推送到远程仓库里,教程在git 提交远程仓库前建议取消代码检查 创建新的分支v1.0(用于实现缓存优化)并推送到远程仓库 1.1.1 maven坐标 导入spring-data-redis的maven坐标: &l…...
c++ http url encode decode
在C++中,可以使用以下方法对URL进行编码和解码: URL编码:#include <iostream> #include <string> #include <sstream> #include <iomanip>std::string urlEncode...
@vue/composition-api功能介绍
前言 vue/composition-api 是通过一个插件的方式,为 Vue2(2.7自带,2.6及以下可用) 提供类似 Vue3 composition API 的函数式编程能力。它的实现思路主要有: 1、提供组合式函数,在函数内部追踪响应性依赖。 2、将组合产生的响应式状态保存到…...
WebSocket整合直播
由于浏览器不支持对于rtmp协议推拉流,所以需要后台对传输的数据进行处理,将数据转接,为了实现其实时性,使用websocket将数据传输 先使用obs和vlc测试正常的推拉流是否正常 然后在跑本地后台传输视频 使用JavaCV技术传输音视频 …...

【Linux】IO 篇:文件调用原理,文件描述符,FILE的内涵,解析重定向,理解缓冲区
文章目录 一、系统调用接口二、文件调用1. 文件描述符 fd2. 文件调用原理3. FILE 三、重定向dup2 四、缓冲区简易 FILE 的代码实现 文件被加载之前,被存在磁盘上,操作文件,文件的部分内容则会被调度到 内存中。 要分析文件,我们也…...
力扣:47. 全排列 II(Python3)
题目: 给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。 来源:力扣(LeetCode) 链接:力扣 示例: 示例 1: 输入:nums [1,1,2] 输出:[…...
Android uart-修改串口节点名
需求: 应客户软件的需求,需要将Android系统里面的/dev/ttyS3节点名称修改为/dev/ttyS9; 实现: 1、判断 driver->name是否为"ttyS",index是否为3,如果是的话替换为ttyS9; diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c old mode 100644 new …...

【HarmonyOS】键盘遮挡输入框时,实现输入框显示在键盘上方
【关键字】 harmonyOS、键盘遮挡input,键盘高度监听 【写在前面】 在使用API6、API7开发HarmonyOS应用时,常出现页面中需要输入input,但是若input位置在页面下方,在input获取焦点的时候,会出现软键盘挡住input情况&a…...
day19-二叉树的最大最小深度
二叉树的最大/最小深度 给定一个二叉树 root ,返回其最大/小深度。 二叉树的 最大/小深度 是指从根节点到最远/近叶子节点的最长路径上的节点数。 思路 求最大深度比较简单,我们先解决最大深度。 最大深度 递归 class Solution { public:int maxD…...
Ansible-roles
Ansible-roles 一、roles作用 把playbook剧本里的各个play看作为角色,将各个角色的tasks任务、vars变量、templates模板、files文件等内容放置到角色的目录中统一管理,需要的时候可在playbook中直接使用roles调用,所以roles可以实现playboo…...

NullPointerException导致手机重启案例分析
和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、 Framework 层对象 空指针导致手机重启。二、解决方案,规避空指针三、Telecom APK 控制导致的重启举例 一、 Framework 层对象 空指针导…...

JAVA 反编译工具
Releases deathmarine/Luyten GitHub 安装exe 打开拖入文件即可...
(AcWing)分组背包问题
有 N 组物品和一个容量是 V 的背包。 每组物品有若干个,同一组内的物品最多只能选一个。 每件物品的体积是 vij,价值是 wij,其中 i 是组号,j 是组内编号。 求解将哪些物品装入背包,可使物品总体积不超过背包容量&…...

JSP项目国际化词条统计
国际化字条匹配并导出为excel格式 需求 将jsp页面里的key值,就是<spring:message code"gsyezer_Single_crystal"/>里的gsyezer_Single_crystal。和对应的字条对应上,并以excel表格形式输出。 jsp页面key值示例 <label for"&…...

Java课题笔记~ MyBatis缓存
为了减少重复查询给数据库带来的压力,MyBatis提供了缓存机制,这种机制能够缓存查询的结果,避免重复的查询。 MyBatis提供了两种缓存方式: 一种为针对于SqlSession的缓存【默认开启】 另一种为针对于全局的缓存【手动开启】 一…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
uniapp中使用aixos 报错
问题: 在uniapp中使用aixos,运行后报如下错误: AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

在 Spring Boot 中使用 JSP
jsp? 好多年没用了。重新整一下 还费了点时间,记录一下。 项目结构: pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
游戏开发中常见的战斗数值英文缩写对照表
游戏开发中常见的战斗数值英文缩写对照表 基础属性(Basic Attributes) 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...
学习 Hooks【Plan - June - Week 2】
一、React API React 提供了丰富的核心 API,用于创建组件、管理状态、处理副作用、优化性能等。本文档总结 React 常用的 API 方法和组件。 1. React 核心 API React.createElement(type, props, …children) 用于创建 React 元素,JSX 会被编译成该函数…...

第2课 SiC MOSFET与 Si IGBT 静态特性对比
2.1 输出特性对比 2.2 转移特性对比 2.1 输出特性对比 器件的输出特性描述了当温度和栅源电压(栅射电压)为某一具体数值时,漏极电流(集电极电流...
第21节 Node.js 多进程
Node.js本身是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout和child.stderr。他们可能会共享…...