【大数据开发必看】可视化BI神器---FineBI

数据可视化分析平台FineBI

【大数据开发必看】可视化BI神器---FineBI_第1张图片

1. 可视化的应用

1.1 数据可视化

  • 可视化分析平台:不用写代码,直接对原始数据通过图形化操作实现分析和构建报表平台
    • 主要用于提供给业务人员快速上手实现数据分析
  • 构建可视化报表
    • 通过图的形式来展示对应的数据,实现信息的传递
    • 传递信息的方式
      • 文字:不太适合表达数据的信息结果
      • 图片:简单直观
        • 体现数据走势
        • 体现数据大小
        • 体现数据比例
      • 声音:不太适合数据的表达
      • 视频:太笨重,不太方便

1.2 目的

  • 通过图片来展示数据的结果,从图中可以发现数据的规律、数据中存在的问题、价值等
  • 柱状图:用于体现数据的大小
  • 饼状图:用于体现数据的比例
  • 曲线图:用于体现数据的走势
  • 地图:用于体现不同区域的数据分布

1.3 工具

  • 第一种:商业化可视化产品
    • 功能最全面,使用非常简单
    • 非常适合业务人员快速上手
    • 很短的时间内快速的构建数据分析报表平台
  • 第二种:开源化的可视化产品
    • 功能相对不是特别的全面
    • 使用相对需要定制化开发(写代码)
  • 第三种:通过代码自己开发
    • 定制化程度最高
    • 成本最高,需要大量的时间和人力来开发这个平台

2. 商业可视化平台FineBI

2.1 介绍

  • FineBI是定位于自助大数据分析的BI工具,能够帮助企业的业务人员和数据分析师,开展以问题导向的探索式分析

2.2 优势

  • 通过多人协作来实现最终的可视化构建
  • FineBI不需要通过复杂代码来实现开发,通过可视化操作实现开发
  • 功能非常的强大
    • 适合各种数据可视化的应用场景
    • 各种常见的分析图表
    • 支持各种各样的数据源
    • 支持处理大数据

2.3 部署

  • 傻瓜式安装~~~

3. 订单分析案例背景

3.1 电商业务

  • 用户行为
    • 浏览商品
    • 登录注册
    • 添加购物车
    • 收藏商品
    • 下订单购买
  • 产生数据
    • ip地址
    • 用户id
    • 客户端信息(浏览器名称、版本、操作系统名称、版本)
    • 正在访问的商品id
    • 正在访问的页面url
    • 从哪个页面url进入的
    • 订单id
    • 支付方式,金额…
  • 电商后台分析
    • 用户分析
      • 总用户个数
      • 新增用户个数
      • 用户的来源比例
      • 用户的客户端比例
      • 流失用户
      • 回流用户
      • 跳出用户
    • 访问分析
      • 访问量最多的网页,前10名
      • 商品销量的前10名
      • 商品浏览的前10名
      • 商品收藏的前10名
    • 分析作用
      • 用于发现用户的喜好,给用户提供更好的服务
      • 用于发现整个平台存在的问题,改善平台的流程、设计、让更多的用户喜欢这个平台

3.2 订单分析

  • 订单数据的生成
    • 用户在平台上下订单 => 订单存储在这个平台的数据库中
    • 订单业务数据库:专门用于提供对于用户的订单的提交和查询
  • 订单中包含的数据
    • orderid:订单id
    • userid:用户id
    • productid:商品id
    • 商品名称
    • 商品分类
    • 订单金额
    • 商品个数
    • 支付方式
    • 配送地址
    • 订单生成时间
  • 实现订单分析
    • 订单的总金额
    • 订单的总个数
    • 不同省份订单的比例
    • 退款订单的个数
    • 发货订单的个数

4. 案例架构及数据准备

4.1 整体架构

  • 业务订单数据
    • MySQL数据库:sl_shop
    • 用于对外支撑业务:下订单
  • ETL
    • Kettle:过滤、转换、补全
  • 待分析数据
    • MySQL数据库:sl_shop_bi
    • 用于实现数据分析:订单分析
  • 分析的结果:
    • MySQL实现分析:sl_shop_bi
    • FineBI:实现可视化报表构建

4.2 数据准备

  • 将业务订单数据导入到MySQL当中
    • step1:找到数据对应的SQL文件
    • step2:将这个文件拖入DataGrip中
    • step3:运行这个文件
  • 全部的表
    • sl_areas:用于存储地址:省份、城市、地区【区、县】
      • areaId:地区id
      • parentId:这个地区的上一个级别的地区id
      • areaName:地区名称
      • areaType:地区的级别(0省 1市 2县或区)
    • sl_goods:商品表,记录了所有商品信息:id、名称、价格、上架时间、三级分类
      • goodsId:商品的唯一编号id
      • goodsName:商品名称
      • goodsCatId:商品最后一级分类id
      • saleTime:销售时间
      • createTime:上架时间
    • sl_goods_cats:商品分类:商品一级、二级、三级
      • catId:分类id
      • parentId:父分类的id
        • 一级分类:水果
        • 二级分类:进口水果
        • 三级分类:橙子
      • catName:分类名称
      • cat_level:分类级别(1 2 3)
    • sl_orders:订单表,记录了所有订单信息:订单id、用户id、订单金额
      • orderId:订单id
      • userId:用户id
      • realTotalMoney:实际价格
      • payType:支付方式
      • createTime:订单时间
    • sl_order_goods:订单商品表,记录了订单与商品的关系:订单id、商品id
      • orderId:订单id
      • goodsId:商品id
      • goodsNumber:个数
      • goodsPrice:价格
      • payPrice:支付价格
    • sl_users:用户表,记录了所有用户的信息:用户id、用户名称
      • userId:用户id
      • loginName:登录的昵称

4.3 Kettle实现ETL

  • 需求:将sl_shop数据库中每张表的最新数据同步到sl_shop_bi中,每天同步一次
    • 每天分析昨天的数据
      • 昨天的最新数据存储sl_shop数据库中
      • 将最新的数据同步到sl_shop_bi中用于Fenix
    • 每天在分析之前,先同步一次
    • 用Kettle实现:每天自动同步sl_shop中最新的数据存入到sl_shop_bi中
  • 演示:以订单表为例
    • step1:先构建一个转换任务:读取sl_shop中订单表的数据,写入sl_shop_bi中ods_sl_orders
    • step2:配置输入,构建输入数据库连接
    • step3:配置输出
    • step4:测试运行
    • step5:构建作业,每天执行一次
      • 先创建一个作业
      • 配置转换
      • 配置定时运行

4.4 直接导入ETL以后的数据

  • 删除sl_shop_bi中的表

    drop table sl_shop_bi.ods_sl_orders;
    
  • 找到对应的SQL文件并执行即可

5. MySQL分析开发

5.1 每日订单总额/总笔数分析

  • 需求:统计每天的订单总额和总个数

  • 分析:对订单表的数据进行统计

    • id:订单id
    • dt:日期
    • total_money:总金额
    • total_cnt:总个数
  • 创建结果表:app_order_total

    create table app_order_total(
        id          int primary key auto_increment,
        df          date,
        total_money double,
        total_cnt   int
    );
    
  • 实现分析:

    • substring(str,pos,len):从pos【这个不是从0开始,而是从1】开始,截取len长度的字符串
    • round(column, decimals):把column这一列的数字四舍五入为decimals位小数
  • 保存结果

    insert into app_order_total
    select null,
           substring(createTime, 1, 10)  as dt,
           round(sum(realTotalMoney), 2) as total_money,
           count(orderId)                as total_cnt
    from ods_sl_orders
    # where substring(createTime, 1, 10) = '2019-09-05'
    group by substring(createTime, 1, 10);
    

5.2 下订单用户总数分析

  • 需求:统计所有下订单的用户的总个数

  • 分析:

    • 基于订单表进行分析
    • 订单表中:订单对应的用户id
    • 对订单表中的用户id去重统计个数
    select substring(createTime,1,10) as dt,count(distinct userId) as total_user_cnt
    from ods_sl_orders
    group by substring(createTime,1,10);
    

5.3 热门商品top10

  • 需求:统计所有订单中哪些商品被购买的次数最多的前10名

  • 分析:

    • 统计每个商品对应的订单个数
    • 按照个数降序排序
    • 取前10
    • 结果:
      • 商品名称 订单个数
    • 订单商品表中:订单id、商品id
    • 商品表:商品id、商品名称
    use sl_shop_bi;
    create table app_goods_top10(
        id int primary key auto_increment,
        dt date,
        goodsName varchar(100),
        cnt int
    );
    
    insert into app_goods_top10
    select null,
           substring(a.createtime, 1, 10),
           b.goodsName,
           count(*) as cnt
    from ods_sl_order_goods a
             join ods_sl_goods b
                  on a.goodsId = b.goodsId
    group by b.goodsName, substring(a.createtime, 1, 10)
    order by cnt desc
    limit 10;
    

5.4 每小时上架商品个数

  • 需求:统计每天每个小时上架的商品个数

  • 分析:根据商品上架时间进行分组统计

    • 商品表
    use sl_shop_bi;
    create table app_hour_goods(
        id int primary key auto_increment,
        daystr date,
        hourstr varchar(10),
        cnt int
    );
    insert into app_hour_goods
    select null,
           substring(createTime, 1, 10) as daystr,
           substring(createTime, 12, 2) as hourstr,
           count(*) cnt
    from ods_sl_goods
    group by substring(createTime, 1, 10), substring(createTime, 12, 2)
    order by daystr,hourstr;
    

5.5 每小时订单笔数

  • 需求:统计每天每小时订单的个数

  • 分析:统计订单表

    • 对天和小时进行分组
    • 统计订单id的个数
    use sl_shop_bi;
    create table app_hour_orders(
        id int primary key auto_increment,
        daystr date,
        hourstr varchar(10),
        cnt int
    );
    insert into app_hour_orders
    select null,
           substring(createTime, 1, 10) as daystr,
           substring(createTime, 12, 2) as hourstr,
           count(*) cnt
    from ods_sl_orders
    group by substring(createTime, 1, 10), substring(createTime, 12, 2)
    order by daystr,hourstr;
    

5.6 不同支付方式订单总额/订单笔数

  • 需求:统计每天不同的支付方式对应的订单总金额以及订单总笔数

  • 分析:

    • 按照日期和支付方式分组统计总金额以及订单总笔数
      • 现金
      • 支付宝
      • 微信
  • 实现:

    • case … when:做判断,根据这一列的值不同,可以显示不同的内容

      • 语法:

        case 列
        	when v1 then r1
        	when v2 then r2
        	...
        	else rN
        	end
        
    use sl_shop_bi;
    create table app_order_payType
    (
        id      int primary key auto_increment,
        dt  date,
        pay_type varchar(10),
        total_money double,
        total_cnt     int
    );
    insert into app_order_payType
    select null, substring(createTime, 1, 10)  as dt,
           case payType
               when 1 then '支付宝'
               when 2 then '微信'
               when 3 then '现金'
               else '其他'
               end
            ,
           round(sum(realTotalMoney), 2) as total_money,
           count(orderId)                as total_cnt
    from ods_sl_orders
    group by substring(createTime, 1, 10),
             payType
    

5.7 各省份订单总金额、订单总笔数

  • 需求:统计每天每个省份的订单总金额以及订单总个数

  • 分析:需要按照天和省份分组统计订单总金额和个数

    • 订单表:订单金额、订单id、订单日期、areaId
    • 地区表:地区id、地区名称
    • join
    use sl_shop_bi;
    create table app_oder_province
    (
        id      int primary key auto_increment,
        dt  date,
        province varchar(10),
        total_money double,
        total_cnt     int
    );
    insert into app_oder_province
    select null,
           substring(a.createTime,1,10) as dt,
           b.areaName,
           round(sum(realTotalMoney),2) as total_money,
           count(orderId) as total_cnt
    from ods_sl_orders a
    join ods_sl_area b on a.areaId = b.areaId
    group by substring(a.createTime,1,10), b.areaName
    

5.8 不同商品分类订单个数统计

  • 需求:统计每天不同商品分类订单的个数

  • 分析:

    • 订单商品表:订单id、商品id => 订单个数
    • 商品表:商品id、商品分类id
    • 商品分类表:商品分类id、商品分类名称
    use sl_shop_bi;
    create table app_cat_cnt
    (
        id          int primary key auto_increment,
        dt          date,
        catName    varchar(100),
        cnt   int
    );
    insert into app_cat_cnt
    select null,substring(a.createtime, 1, 10) as dt,
           c.catName,
           count(*) as cnt
    from ods_sl_order_goods a
             join ods_sl_goods b
                  on a.goodsId = b.goodsId
             join ods_sl_good_cats c on b.goodsCatId = c.catId
    group by substring(a.createtime, 1, 10), c.catName
    

6. FineBI实现可视化

6.1 启动登录

6.2 构建连接

  • 管理系统

6.3 配置数据

注意在数据准备好之后,必须同步数据【业务包更新】

  • 数据准备

6.4 构建仪表盘

  • 仪表板

6.5 添加图表

  • 添加标题
  • 每日订单总个数
  • 每日订单总金额
  • 每日订单用户数

你可能感兴趣的:(bigdata,mysql,数据库,大数据,hive,hadoop)