助力工业物联网,工业大数据之费用事实指标分析及实现【二十四】
文章目录
- 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的缓存【默认开启】 另一种为针对于全局的缓存【手动开启】 一…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...
前端中slice和splic的区别
1. slice slice 用于从数组中提取一部分元素,返回一个新的数组。 特点: 不修改原数组:slice 不会改变原数组,而是返回一个新的数组。提取数组的部分:slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...
C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...
Java后端检查空条件查询
通过抛出运行异常:throw new RuntimeException("请输入查询条件!");BranchWarehouseServiceImpl.java // 查询试剂交易(入库/出库)记录Overridepublic List<BranchWarehouseTransactions> queryForReagent(Branch…...
XXE漏洞知识
目录 1.XXE简介与危害 XML概念 XML与HTML的区别 1.pom.xml 主要作用 2.web.xml 3.mybatis 2.XXE概念与危害 案例:文件读取(需要Apache >5.4版本) 案例:内网探测(鸡肋) 案例:执行命…...
