本文是对Adventure Works案例的一个总结,记录了整个项目需求分析与实现的过程,主要任务是使用Hive SQL完成ETL过程,并且连接到PowerBI实现可视化。


可视化报表链接

文章目录

  • 一、背景介绍
  • 二、需求分析与实现
    • 2.1 使用sqoop+shell导入数据到 hive 数据库
    • 2.2 指标体系
    • 2.3 建立数据仓库汇总层
  • 三、制作报表
    • 3.1 数据清洗
    • 3.2 核心操作
    • 3.3 报表展示

一、背景介绍

Adventure Works Cycles是Adventure Works样本数据库所虚构的公司,这是一家大型跨国制造公司。该公司生产和销售自行车到北美,欧洲和亚洲的商业市场。虽然其基地业务位于华盛顿州博塞尔,拥有290名员工,但几个区域销售团队遍布整个市场。

产品介绍

这家公司主要有下面三个产品线:
Adventure Works Cycles生产的自行车;
自行车部件,例如车轮,踏板或制动组件;
从供应商处购买的自行车服装,用于转售给Adventure Works Cycles的客户;

二、需求分析与实现

项目目标:通过现有数据监控商品的线上和线下销售情况,并且获取最新的商品销售趋势,以及区域分布情况,为公司的制造和销售提供指导性建议,以增加公司的收益。

项目任务:

将数据导入Hive数据库
探索数据库并罗列分析指标
汇总数据建立数据仓库(Sales主题)

2.1 使用sqoop+shell导入数据到 hive 数据库

表不存在创建并复制数据
表存在则追加数据

sqoop import \
--hive-import \
--connect jdbc:mysql://127.0.0.1:3306/数据库名 \
--table 表名 \
--username 数据库用户名 \
--password 数据库密码 \
--hive-database hive数据库名 \
--hive-overwrite \
--m 1--hive-overwrite \  覆盖hive表数据

使用sqoop部分导入数据到 hive 数据库:query 查询要导入的数据集

sqoop import \
--hive-import \
--connect jdbc:mysql://127.0.0.1:3306/数据库名 \
--username 数据库用户名 \
--password 数据库密码 \
--query 'select * from course where 条件 and $CONDITIONS' \
--hive-overwrite \
--hive-table ods.表名 \
--target-dir /tmp/lantest \
--delete-target-dir \
--m 1

表不存在创建并复制数据
表存在则追加数据

使用query sql语句来进行查找不能加参数 --table,必须要添加 where 条件。
并且where 条件后面必须带一个 $CONDITIONS 这个字符串,

2.2 指标体系

分析维度:

时间维度——年、季度、月、日
地区维度——国家、州/省、城市
产品维度——产品类别、产品子类
客户味道
分析指标:

总销售额
总订单量
客单价=总销售额/客户总数
销售额、销量目标达成率
不同维度(时间、地区、产品)下的销售额、订单量

2.3 建立数据仓库汇总层

目的:根据实际业务需要,对已经建立好的基础层数据进行加工,并存放到数据仓库汇总层。

数据仓库的设计分为两层,一个是 ODS 基础层,一个是 DW 汇总层 。基础层用来存放基础数据,即前面使用shell脚本导入的数据,而汇总层用来存放我们使用基础层加工生成的数据。

这里为什么要对维度表进行加工呢?虽然不经加工、直接导入PowerBI也可以,但是数据表较多、数据量较大,加载速度会很慢。而且字段太多,不是每一个字段都会用到。所以这里的加工包括两个层面,一个是对相同类型的维度表做连接,减少表的数量;另一个是筛选过滤,提取需要分析的关键字段。

三、制作报表

选择合适的可视化工具,从多个维度展示销售情况。

3.1 数据清洗

数据格式:hive数据库中的数据导入后,可能需要进行格式转换。比如文本格式转换为日期格式,文本格式转换为整数格式,文本格式转换为小数格式,小数格式转换为百分比格式。虽然在汇总层中已经将日期处理成yyyy-mm-dd格式,但是在Power BI中默认是文本格式,要进行设置。这里想说明一点,虽然Power BI中可以设置格式,但是最好还是回到hive中进行数据清洗,否则刷新数据时可能会出现格式不匹配。
新建度量值:对于新增的客单价、销售额目标完成率目标等指标,可以通过新建度量值的方式进行处理。当然,最好还是在hive中创建字段,这样代码对其他项目做销售数据分析更有借鉴意义。

3.2 核心操作

可视化工具:这里用到的可视化工具有折线图、柱形图、折线-柱形组合图、仪表、卡片、柱状图、切片器、地图等。可以根据需要选择图例、轴、列,以及设置数据处理方式,求和、平均值、最大值、最小值等。
筛选器:有三种筛选器:视觉对象、此页、所有页面。这里用于日期、区域等字段的筛选。
书签窗格:这里将按钮和书签结合使用,用于制作导航栏和动态图表。
选择窗格:可以选择显示/隐藏视觉对象。

3.3 报表展示

报表一共有3页,包括主页、时间趋势图、区域分布图。

a. 主页展示内容:

  • 基本销售指标,包括销售额、订单量、客单价、销售额目标完成率等
  • 从时间维度分析年度、季度、月度、日销售情况
  • 从地区维度分析在各国的销售情况
  • 从产品类别及子类维度分析各类商品的销售情况,以及占主要销售额的自行车类销售情况

b. 时间趋势图展示内容:

  • 按照季度、月份展示销售额、订单量、销售目标完成率、客单价等指标
  • 区域切片器
  • 当然,这里还可以增加更多的时间维度,比如年、周、日。

c. 区域分布图展示内容:

  • 按照国家、州/省、城市,逐级展示销售额和订单量等指标
  • 区域、商品类型切片器

Adventure Works Cycles案例分析相关推荐

  1. pandas案例分析

    pandas案例分析 1 需求 现在我们有一组从2006年到2016年1000部最流行的电影数据 数据来源:https://www.kaggle.com/damianpanek/sunday-eda/ ...

  2. Week1.3-金融会计指标案例分析

    这个案例解释盈利能力指标和现金流量指标的主要区别. A case study to illustrate the critical difference between profitability m ...

  3. 深度学习之LSTM案例分析(三)

    #背景 来自GitHub上<tensorflow_cookbook>[https://github.com/nfmcclure/tensorflow_cookbook/tree/maste ...

  4. Java多线程:线程8锁案例分析

    线程8锁案例分析 通过分析代码,推测打印结果,并运行代码进行验证 1.两个线程调用同一个对象的两个同步方法 被synchronized修饰的方法,锁的对象是方法的调用者.因为两个方法的调用者是同一个, ...

  5. R语言Logistic回归模型案例:分析吸烟、饮酒与食管癌的关系

    R语言Logistic回归模型案例:分析吸烟.饮酒与食管癌的关系 目录 R语言Logistic回归模型案例分析吸烟.饮酒与食管癌的关系 #样例数据

  6. 计算机两个硬盘无法重启,双硬盘电脑非系统盘硬盘盘符重启丢失的案例分析

    原标题:双硬盘电脑非系统盘硬盘盘符重启丢失的案例分析 昨晚,小编在工作了一段时间之后,重新启动计算机,突然发现两个数据盘分区没了,从计算机的磁盘管理里面看,硬盘分区还在,盘符没了.如下图所示: 我的计 ...

  7. 案例分析 | SAP如何帮助企业实现端到端的数字化供应链管理

    https://www.toutiao.com/a6687387597922107916/ 在我之前的一篇 <收藏 | 供应链管理最佳实践之S&OP> 文章中,为大家介绍了关于S& ...

  8. 免费教材丨第56期:《深度学习导论及案例分析》、《谷歌黑板报-数学之美》

    小编说  离春节更近了!  本期教材        本期为大家发放的教材为:<深度学习导论及案例分析>.<谷歌黑板报-数学之美>两本书,大家可以根据自己的需要阅读哦! < ...

  9. 河北省重大系统征集系统案例分析

    网站的可用性描述网站可有效访问的特性,相比于网络的其他非功能的特性,网站的可用性更能牵动人们的神经.因为,大型网站如果发生不可用的事故,将直接的影响公司的形象及利益,所以,网站的可用性及其重要.正如& ...

最新文章

  1. BZOJ 2141 排队(块套树,分块,树状数组)【BZOJ修复工程】
  2. 淮阴工学院计算机期末考选择题题库,淮阴工学院计算机导论题库.doc
  3. 【模型解读】network in network中的1*1卷积,你懂了吗
  4. WPF开发的实用小工具 - 快捷悬浮菜单
  5. windows_study_2
  6. java 两层while_java – while while循环满足2个条件之一
  7. mysql参数积累 持续更新。。。
  8. lambda 函数或者匿名函数(C++11)
  9. matlab GUI画图实例——手动输入函数画图
  10. SSO单点登录Java实现实例
  11. 编译疑问: Warning: Backslash and Newline separated by space
  12. 空间,线性空间,赋范空间,内积空间和希尔伯特空间的区别
  13. 运用阿里云地图实现经纬度转换为省市县
  14. 关于卫星定位,你想知道的一切
  15. View 5应用之五:iPad与Android携带虚拟桌面
  16. [sharepoint]文档库,文件夹授权
  17. 机器学习——概率分类(三)高斯概率密度与混合高斯模型
  18. 基于matlab小波变换的突变检测识别
  19. 【mysql】字符集与比较规则
  20. Quartus中仿真时出现no simulation input file assignment specify 解决方法 (转载)

热门文章

  1. 80386 内存寻址机制
  2. 通过制定合理的激励制度来调动员工积极性
  3. java gridfs_如何在GridFS中执行更新操作(使用Java)?
  4. Android弹幕实现:基于B站弹幕开源系统(1)
  5. EI会议:移动互联网、云计算和信息安全国际学术会议(MICCIS 2023)
  6. 上市公司股权激励方法的实施与改进
  7. 网站的标题如何优化比较好?
  8. Arduino使用金属触摸传感器
  9. 如何走出软件作坊成为开发正规军
  10. vscode自动补全代码