BI系统用户访问数据分析

news2024/11/24 20:36:55

商业智能(Business Intelligence,简称:BI),又称商业智慧或商务智能,指用现代数据仓库技术、线上分析处理技术、数据挖掘和数据展现技术进行数据分析以实现商业价值。
——百度百科

文章目录

  • 前言
  • 一、痛点梳理
  • 二、案例分享
    • (一)获取BI系统用户访问日志
    • (二)设计开发DWD
    • (三)设计ADS
    • (四)可视化样例
  • 总结


前言

分析BI系统的用户访问数据分析报表设计开发流程及个人的思考,供各位小伙伴参考。


一、痛点梳理

  1. 不清楚BI系统中各报表的访问情况,哪些报表使用率高,哪些报表没人看。
  2. 不清楚哪些部门哪些人员使用报表的频率高,哪些部门哪些人员很少看报表。
  3. 不清楚BI系统中用户的注册激活情况。

二、案例分享

(一)获取BI系统用户访问日志

xxx_log

idmenu_full_pathuser_iduser_emailcreate_datewrite_datept_d
1aa分析表111abcd@111.com2021-01-01 09:35:572022-11-30 09:35:572022-11-30
2aa分析表111abcd@111.com2021-01-01 09:35:572022-11-30 09:42:082022-11-30

(二)设计开发DWD

  1. dwd_xxx_tf_dm (xxx用户操作事务事实表)
    以天为分区,记录每个用户每天在BI系统上的浏览数据。
  2. dwd_xxx_tf_dm_ini (xxx用户操作事务事实表)
    将历史的日志数据利用动态分区形成事实表历史分区数据,案例中dwd直接关联维度表冗余维度,实际生产中可以考虑在下游进行关联。
-- #####################################################
-- name    : dwd_xxx_tf_dm.sql
-- desc    : xxx用户操作事务事实表
-- version : xxx_BI_2.0.1
-- source  : xxx_log; dim_aaa_ds; dim_bbb_ds;
-- create  : zhangliushi 20220101
-- modify  :
-- #####################################################

USE dwd;

SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
SET hive.exec.max.dynamic.partitions = 1000;
SET hive.exec.max.dynamic.partitions.pernode = 1000;

-- 记录BI用户日志数据;
CREATE EXTERNAL TABLE IF NOT EXISTS dwd.dwd_xxx_tf_dm
(
    etl_id            STRING    COMMENT 'ETL代理ID'
   ,bi_user_id        STRING    COMMENT 'BI用户ID'
   ,user_email        STRING    COMMENT '用户邮箱'
   ,employee_code     STRING    COMMENT '雇员代码'
   ,employee_name     STRING    COMMENT '雇员名称'
   ,first_dept        STRING    COMMENT '一级部门'
   ,second_dept       STRING    COMMENT '二级部门'
   ,third_dept        STRING    COMMENT '三级部门'
   ,fourth_dept       STRING    COMMENT '四级部门'
   ,fifth_dept        STRING    COMMENT '五级部门'
   ,visit_time        STRING    COMMENT '访问时间'
   ,menu_full_path    STRING    COMMENT '访问菜单全路径'
   ,etl_time          STRING    COMMENT 'ETL时间'
   ,first_menu        STRING    COMMENT '一级菜单'
   ,second_menu       STRING    COMMENT '二级菜单'
   ,third_menu        STRING    COMMENT '三级菜单'
   ,fourth_menu       STRING    COMMENT '四级菜单'
)
COMMENT 'xxx用户操作事务事实表'
PARTITIONED BY (pt_d VARCHAR(10) COMMENT '天分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS ORC
LOCATION 'cosn://bpit-zzz-123456/dwd/dwd_xxx_tf_dm'
TBLPROPERTIES('orc.compress'='ZLIB')
;

-- 动态分区插入数据;
INSERT OVERWRITE TABLE dwd.dwd_xxx_tf_dm
PARTITION (pt_d)
SELECT
    UUID()                                                                           AS etl_id
   ,t1.user_id                                                                       AS bi_user_id
   ,t1.user_email                                                                    AS user_email
   ,t2.employee_code                                                                 AS employee_code
   ,t2.employee_name                                                                 AS employee_name
   ,t2.first_dept                                                                    AS first_dept
   ,t2.second_dept                                                                   AS second_dept
   ,t2.third_dept                                                                    AS third_dept
   ,t2.fourth_dept                                                                   AS fourth_dept
   ,t2.fifth_dept                                                                    AS fifth_dept
   ,FROM_UTC_TIMESTAMP(DATE_FORMAT(t1.create_date, 'yyyy-MM-dd HH:mm:ss'), 'PRC')    AS visit_time
   ,t1.menu_full_path                                                                AS menu_full_path
   ,DATE_FORMAT(CURRENT_TIMESTAMP,'yyyy-MM-dd HH:mm:ss')                             AS etl_time
   ,t3.first_menu                                                                    AS first_menu
   ,t3.second_menu                                                                   AS second_menu
   ,t3.third_menu                                                                    AS third_menu
   ,t3.fourth_menu                                                                   AS fourth_menu
   ,DATE_FORMAT(FROM_UTC_TIMESTAMP(DATE_FORMAT(t1.create_date, 'yyyy-MM-dd HH:mm:ss'), 'PRC'),'yyyy-MM-dd')    AS pt_d
FROM
(
    SELECT
        menu_full_path
       ,user_id
       ,user_email
       ,create_date
    FROM ods.xxx_log
    WHERE pt_d = '2022-02-16'
    AND user_email != 'admin'
) t1
LEFT OUTER JOIN
(
    SELECT
        employee_code
       ,employee_name
       ,first_dept
       ,second_dept
       ,third_dept
       ,fourth_dept
       ,fifth_dept
       ,employee_email
    FROM dim.dim_aaa_ds
    WHERE pt_d = DATE_SUB('${pt_d}',1)
) t2
ON t1.user_email = t2.employee_email
LEFT OUTER JOIN
(
    SELECT
        menu_full_path
       ,first_menu
       ,second_menu
       ,third_menu
       ,fourth_menu
    FROM dim.dim_bbb_ds
) t3
ON t1.menu_full_path = t3.menu_full_path
;

  1. dwd_xxx_user_login_sf_ds(xx用户登录周期快照事实表)
    案例中dwd直接关联维度表冗余维度,实际生产中可以考虑在下游进行关联。
-- #####################################################
-- name    : dwd_xxx_user_login_sf_ds.sql
-- desc    : xx用户登录周期快照事实表
-- version : xxx_BI_2.0.1
-- source  : ods_xxx_bi_users; dim_xxx_ds;
-- create  : zhangliushi 20220323
-- modify  :
-- #####################################################

USE dwd;

-- 记录BI用户登录情况, 创建和修改时间;
CREATE EXTERNAL TABLE IF NOT EXISTS dwd.dwd_xxx_user_login_sf_ds
(
    etl_id                STRING    COMMENT 'ETL代理ID'
   ,bi_user_id            STRING    COMMENT 'BI用户ID'
   ,user_email            STRING    COMMENT '用户邮箱'
   ,employee_code         STRING    COMMENT '雇员代码'
   ,employee_name         STRING    COMMENT '雇员名称'
   ,first_dept            STRING    COMMENT '一级部门'
   ,second_dept           STRING    COMMENT '二级部门'
   ,third_dept            STRING    COMMENT '三级部门'
   ,fourth_dept           STRING    COMMENT '四级部门'
   ,fifth_dept            STRING    COMMENT '五级部门'
   ,id_activation_flag    STRING    COMMENT '账号激活标志'
   ,id_cancel_flag        STRING    COMMENT '账号注销标志'
   ,last_login_time       STRING    COMMENT '最近一次登录时间'
   ,id_create_time        STRING    COMMENT '账号创建时间'
   ,id_modify_time        STRING    COMMENT '账号修改时间'
   ,etl_time              STRING    COMMENT 'ETL时间'
)
COMMENT 'xx用户登录周期快照事实表'
PARTITIONED BY (pt_d VARCHAR(10) COMMENT '天分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS ORC
LOCATION 'cosn://bpit-zzz-123456/dwd/dwd_xxx_user_login_sf_ds'
TBLPROPERTIES('orc.compress'='ZLIB')
;

INSERT OVERWRITE TABLE dwd.dwd_common_bi_user_login_sf_ds
PARTITION (pt_d = '${pt_d}')
SELECT
    UUID()                                                                               AS etl_id
   ,t1.id                                                                                AS bi_user_id
   ,t1.user_email                                                                        AS user_email
   ,t2.employee_code                                                                     AS employee_code
   ,t2.employee_name                                                                     AS employee_name
   ,t2.first_dept                                                                        AS first_dept
   ,t2.second_dept                                                                       AS second_dept
   ,t2.third_dept                                                                        AS third_dept
   ,t2.fourth_dept                                                                       AS fourth_dept
   ,t2.fifth_dept                                                                        AS fifth_dept
   ,IF(t1.last_login_date IS NULL, '未激活', '已激活')                                   AS id_activation_flag
   ,IF(t1.active IS TRUE, '账号可用', '账号已注销')                                      AS id_cancel_flag
   ,FROM_UTC_TIMESTAMP(DATE_FORMAT(t1.last_login_date, 'yyyy-MM-dd HH:mm:ss'), 'PRC')    AS last_login_time
   ,FROM_UTC_TIMESTAMP(DATE_FORMAT(t1.create_date, 'yyyy-MM-dd HH:mm:ss'), 'PRC')        AS id_create_time
   ,FROM_UTC_TIMESTAMP(DATE_FORMAT(t1.write_date, 'yyyy-MM-dd HH:mm:ss'), 'PRC')         AS id_modify_time
   ,DATE_FORMAT(CURRENT_TIMESTAMP,'yyyy-MM-dd HH:mm:ss')                                 AS etl_time
FROM
(
    SELECT
        id
       ,user_email
       ,active
       ,last_login_date
       ,create_date
       ,write_date
    FROM ods.ods_xxx_bi_users
    WHERE pt_d = DATE_SUB('${pt_d}',1)
) t1
LEFT OUTER JOIN
(
    SELECT
        employee_code
       ,employee_name
       ,first_dept
       ,second_dept
       ,third_dept
       ,fourth_dept
       ,fifth_dept
       ,employee_email
    FROM dim.dim_xxx_ds
    WHERE pt_d = DATE_SUB('${pt_d}',1)
) t2
ON t1.user_email = t2.employee_email
;

(三)设计ADS

  1. 依赖xxx用户操作事务事实表形成用户操作统计表
  2. 依赖xx用户登录周期快照事实表形成用户登录统计表
  3. 依赖xx用户登录周期快照事实表和依赖xxx用户操作事务事实表形成注册用户访问统计表

注:样例中没有建DWS,实际生产可以考虑建DWS表,在DWS关联维度。

(四)可视化样例

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

商业智能的概念在1996年最早由加特纳集团(Gartner Group)提出,加特纳集团将商业智能定义为:商业智能描述了一系列的概念和方法,通过应用基于事实的支持系统来辅助商业决策的制定。商业智能技术提供使企业迅速分析数据的技术和方法,包括收集、管理和分析数据,将这些数据转化为有用的信息,然后分发到企业各处。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52587.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新手入门学传奇开区技术常见问题跟解答

首先,欢迎各位新GM加入传奇爱好者,虽然是新加入,但是GM们对传奇的了解也大相径庭,有的是资深GM,而多数则是纯新人,今天又有坛友提出了疑问,对自己的前进方向很迷茫,所以写一篇新人关…

奇异值分解(SVD)和np.linalg.svd()函数用法

一、简介 奇异值分解是一种十分重要但又难以理解的矩阵处理技术,在机器学习中是最重要的分解没有之一的存在。那么,奇异值分解到底是在干什么呢? 矩阵 A 表示的是高维数据,通常情况下高维数据分布并不是雨露均沾的,而往…

matlab图像的增强

1.灰度变换增强 (1)图像直方图 (2)图像直方图的均衡化 2.频域滤波增强 (1)低通滤波器 (2)高通滤波器 (3)同态滤波器 3.彩色增强 (1)真…

[附源码]JAVA毕业设计高校智能排课系统(系统+LW)

[附源码]JAVA毕业设计高校智能排课系统(系统LW) 目运行 环境项配置: Jdk1.8 Tomcat8.5 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术…

Ubuntu搭建Hadoop环境

本文是在一个全新的Ubuntu 22.04 虚拟机上安装Hadoop 3.3.4。 环境 Ubuntu 22.04JDK 11Hadoop 3.3.4 安装Hadoop 首先安装JDK: # apt install openjdk-11-jdk-headless安装好以后查看: # java -version openjdk version "11.0.17" 2022-…

基于人工神经网络的车牌识别系统的研究(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

用HTTP proxy module配置一个简单反向代理服务器

预备知识 反向代理 反向代理(reverse proxy)方式是指用代理服务器来接受Internet上的连接请求,然后将 请求转发给内部网络中的上游服务器,并将从上游服务器上得到的结果返回给Internet上请求 连接的客户端,此时代理服…

自定义表单、自定义流程、自定义页面、自定义报表应用开发平台

真正的大师,永远都怀着一颗学徒的心! 一、项目简介 Java开发框架,自定义表单、自定义页面、自定义流程、自定义报表应用开发平台 二、实现功能 支持系统文件在线管理 支持代码在线编辑 支持URL 路由 支持黑白名单 支持定时任务 支持在线监控 支持…

Java+JSP+MySQL基于SSM的会议交接平台的设计与实现-计算机毕业设计

项目介绍 随着社会竞争压力的不断加强,企事业单位内部的会议都在不断的增加,有效的会议可以提高企事业内部的沟通,更好的做出符合战略目标的决策,但是传统的会议交接有一定的问题存在,首先就是必须面对面进行传达&…

突破卡脖子技术 AVS3标准在世界杯实现移动端规模化商用

11月25日,在2022卡塔尔世界杯B组第二轮比赛中,亚洲球队又一次脱颖而出,伊朗连进2球,2:0战胜威尔士,双方鏖战至最后时刻,奉上了一场精彩的比赛。 作为2022卡塔尔世界杯持权转播商,中国移动咪咕上线“睛彩视界”独家视角,通过国家自主的AVS3、Audio Vivid编解码标准为用户带来“…

基于51单片机智能IC卡燃气表控制(仿真+源程序+全套资料)

资料编号:199 功能介绍: 采用51单片机作为主控CPU,使用按键进行模拟冲卡(模拟缴费冲卡),通过按键来控制当前是否使用燃气,并且LCD1602实时显示当前燃气可用量剩余多少,当燃气不足时…

ARM-A架构入门基础(三)MMU

14天学习训练营导师课程:周贺贺《ARMv8/ARMv9架构-快速入门》 1. MMU(Memory Management Unit) 内存管理单元,MMU的意义在于将软件程序的虚拟地址转换为真实的物理地址。 2. MMU种类 Secure EL1&0 translation regime, wh…

基于约束关系的图表设计

标准的基于 GUI 的图形设计工具仅支持有限的“对齐向导”风格的定位,具有基本的对象分组系统,并实现对齐或分布对象的原始功能。这些工具没有办法记住对象之间的约束和关系,也没有办法定义和重用抽象。我一直不满意现有的设计工具&#xff0c…

[附源码]Python计算机毕业设计Django二次元信息分享平台的设计及实现

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,我…

短视频不知道怎么定位?教你三个自我商业定位的方法,收藏学习

上一篇内容是我在我赢助手小禾呈序上讲了哪几类产品更适合私域变现,当然我相信有很多做抖音但没想好怎么变现的对吧? 如果说你还停留在我也不知道我可以靠什么赚钱这样的一个状态当中。那我给你三个自我商业定位的方法。 第一个方法,从工作上…

虹科Pico汽车示波器学院 | 第二课直播精彩回顾

直播精彩回顾(11.19) 第二课主题:《为什么使用示波器,可加速技师的技术水平提升?》 11月19日,虹科Pico汽车示波器学院第二课成功开课。第二课中,戈老师向学员们讲解了: 汽车示波器…

【网安神器篇】——LaZagne凭证收集工具

作者名:Demo不是emo 主页面链接:主页传送门 创作初心:舞台再大,你不上台,永远是观众,没人会关心你努不努力,摔的痛不痛,他们只会看你最后站在什么位置,然后羡慕或鄙夷座…

144.二叉树的前序遍历 递归 | 94.二叉树的中序遍历 递归 |145.二叉树的后序遍历 递归

144.二叉树的前序遍历 题目 给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 输入:root [1,null,2,3] 输出:[1,2,3]示例 2: 输入:root [] 输出:[]示例 3: 输入:root …

11月动态|通过PWmat计算的离子浓度自由能相关文献发表在JCTC

11月 11月,龙讯旷腾完成Q-Flow和Q-Studio新版本的升级,完成了40余项功能的更新和上线;签约并行科技在高性能计算领域再下一城;汪林望博士受海河实验室邀请作线上主题报告;通过PWmat计算的离子浓度自由能相关文献发表在…

Unity笔记(15):OnTriggerEnter2D [2D]

1、给玩家标签设为Player 2、给碰撞的物体增加碰撞盒,并勾选isTrigger 3、编写脚本挂载到物体上 实现碰撞后物体会消失。 using System.Collections; using System.Collections.Generic; using UnityEngine;public class luobo : MonoBehaviour {private void OnT…