基于power bi上手业务数据可视化

2023-11-06

分析背景

偶然得到一份关于某连锁火锅品牌在2020年1月-8月的线上平台业务数据(如下图),心想正好利用这份数据,模拟实际业务中基于数据库与bi工具,实践开发可视化图表。一开始考虑用tableau,因为在大学跟刚工作的时候曾系统学习使用过,但想想近年来power bi好像更加流行,于是决定借这个案例上手使用power bi作可视化。

说干就干,第一步是观察字段,可以分成4类:

1. 时间维度(日期)、品牌(品牌ID、品牌名称)、区域维度(门店ID、门店名称

、城市)、平台维度(平台、平台i、平台店铺名称);

2. 结果业务指标有 GMV、商家实收、有效订单、无效订单

3. 过程业务指标有门店曝光量、门店访问量、门店下单量、曝光人数、进店人数、下单人数

4. 营销成本指标:cpc总费用、cpc曝光量、cpc访问量、商户补贴平台补贴

此外,基于上述字段,我们很快可以知道可以计算一些指标使得业务分析更完整,如客单价、单均价、实收率、各营销流程转化率、cpc单次费用、总营销成本(cpc费用+商户补贴+平台补贴)等。

数据检查&可视化思路

因为对数据字段有了的认识,我们可以考虑根据这些数据我们需要呈现什么信息出来。在实际工作中bi图表的目的是快速传递出信息给业务人员与决策者,往往会设计一些general点的图表以展示业务总体情况,并且会根据不同业务/职能需求开发一些更详细、专题的报表。在本例中,我们可先按照结果业务指标、过程业务指标、营销成本指标三个角度的业务需求来初步梳理可视化思路,如下:

注:这是初步思路,与最终呈现不是完全一致,如结果业务指标方面,考虑到信息过载的问题,最终并不未对每个度量的计算年累计、月趋势及环比都作呈现。

从数据库提取数据(MySQL)

在本地数据库创建一个表

为了模拟从数据库提取数据到bi的业务场景,我们需要先为数据建一个数据库表hotpot_stores,该表记录了企业的历史业绩数据。我们这里使用Python的读入数据后,再通过pymysql与mysql交互实现建表,还顺便练习一下Python中与sql的交互~

import pandas as pd
import pymysql

# 数据库连接参数
host="localhost"
port = 3306
user = 'root'
password = '********'
database = 'demo'

#文件路径
excel_file = '连锁火锅店业务数据.xlsx'

#读取Excel表,选中某个sheet
df = pd.read_excel(excel_file,sheet_name='拌客源数据1-8月')

# 连接到MySQL数据库
conn = pymysql.connect(host=host,user=user,passwd=password,db=database,charset='utf8')
cursor = conn.cursor()

#将每列数据格式替换到mysql格式
mysql_dtypes=df.dtypes.astype('str').map({'datetime64[ns]':'DATETIME','int64':'INT','object':'VARCHAR(255)','float64':'FLOAT'})

#建一个表
table_name = 'hotpot_stores'
#利用循环写建表sql语句
create_table_sql=f'CREATE TABLE {table_name} ('
for column,mysql_type in zip(df.columns,mysql_dtypes):
    create_table_sql += f'{column} {mysql_type}, '
create_table_sql=create_table_sql[:-2] + ')'
#执行建表语句
cursor.execute(create_table_sql)

# 获取结果并检查是否包含hotpot_stores表
tables = [table[0] for table in cursor.fetchall()]
if 'hotpot_stores' in tables:
    print('Table hotpot_stores exists.')
else:
    print('Table hotpot_stores does not exist.')

#插入值
for index, row in df.iterrows():
    insert_row_sql=f'INSERT INTO {table_name} VALUES ('
    for value in row:
        if isinstance(value,str):
            value=value.replace('"','\\"')
            #检查它是否为字符串类型。如果是,则使用replace方法将其中所有双引号替换为转义后的双引号
            #(以避免在SQL语句中产生语法错误),然后将其添加到SQL语句中。否则,直接将值添加到SQL语句中。
            insert_row_sql +=f'"{value}",'
        elif isinstance(value, pd.Timestamp):
            value = value.strftime('%Y-%m-%d %H:%M:%S')
            insert_row_sql += f'"{value}", '
        else:
            insert_row_sql +=f'{value},'
    insert_row_sql = insert_row_sql[:-1] + ')'
    #执行每行赋值
    cursor.execute(insert_row_sql)

插入后我们查看一下行数和每列的情况:

select_sql='select * from hotpot_stores '
response=cursor.execute(select_sql)
response
#查看表的每列情况'DESCRIBE hotpot_stores'
cursor.execute('DESCRIBE hotpot_stores')
cursor.fetchall()

在power bi连接数据库

确认数据库没问题后,我们打开power bi desktop,点击获取数据,选择MySQL数据库:

然后输入对应的服务器、数据库及查询语句,我们查询第一个表“历史业绩”

接着同样道理,我们查询一个“今年(2020)以来的业绩”表、以及“维度表”

在power bi的数据视图如下:

然后我们开始进行数据清洗,由于数据比较干净,我们仅需要在power bi内增加一个“时间表”

但随着开始分析,我们发现一些数据的呈现,如最近一个月的GMV环比上月,如果用power bi的M语言来写新表,会很复杂,而且M语言语法相对软件新人来说多少有点不友好,咱们还是通过sql直接把需要的数据从数据库查询出来吧。比如我们需要构建一个含最近一个月及上个月项业务聚合值的表,以计算当前月环比上月情况

#仅含平台、品牌的环比业绩
with t1 as 
(select
month_rank,YearMonth,品牌ID,品牌名称,门店ID,门店名称,城市,平台i as 平台,平台门店名称,
sum(GMV) as GMV,sum(商家实收) as 商家实收,sum(门店曝光量) as 门店曝光量,
sum(门店访问量) as 门店访问量,sum(门店下单量) as 门店下单量,sum(无效订单) as 无效订单,
sum(有效订单) as 有效订单,sum(曝光人数) as 曝光人数,sum(进店人数) as 进店人数,
sum(下单人数) as 下单人数,sum(cpc总费用) as cpc总费用,sum(cpc曝光量) as cpc曝光量,
sum(cpc访问量) as cpc访问量,sum(商户补贴) as 商户补贴,sum(平台补贴) as 平台补贴,
sum(商家实收)/sum(GMV) as 实收率,
sum(门店访问量)/sum(门店曝光量) as 访问曝光转化率,sum(门店下单量)/sum(门店访问量) as 到店下单转化率
from
(select
*,date_format(日期,'%Y%m') as YearMonth,
dense_rank() over(order by date_format(日期,'%Y%m') desc) as month_rank  
from hotpot_stores) t
where month_rank<=2
group by month_rank,YearMonth,品牌ID,品牌名称,门店ID,门店名称,城市,平台,平台门店名称)

select c.*,l.*
from
(select *  from t1 where month_rank=1) c#c menas current_month
left join (select *  from t1 where month_rank=2) l#l means last_month
on c.month_rank=l.month_rank-1

同理,我们就在power bi创建了多个具有关联的表

power bi表关联

接下来对于创建的表,我们需要通过在模型视图“管理关系”来为各表建立关联,可以理解为图形化的sql中的表连接:

创建好管理各表关联关系后可以在模型视图中看到各表关系:

可视化

数据表建好以后,我们还需要针对数据再power bi里创建一些度量如实收率、客单价、单均价、营销费用ROI等,篇幅问题,此过程就不作展示了~

我们直接看最后可视化的三个仪表板:

  1. 汇总分析

  1. 转化分析:

  1. 营销费用分析:

最后我们对可视化结果进行发布:

结语

总结

本次项目模拟真实从数据库取数的流程,并从结果业务指标汇总分析、转化流程分析、营销费用分析三个角度进行可视化,并以城市、平台、品牌、门店作为切片器,方便报表使用者查看具体维度的业务信息。

不足与展望

  1. 在第一页汇总分析时,可以考虑加上累计业绩达成率的度量,方便实时了解达成情况,但考虑到页面空间有限及信息过载的情况,最终只呈现重要指标的累计及环比,当然在实际业务中需要根据使用者的需求来考虑呈现信息;

  1. 切片器中没有时间维度的参数,意味着图表始终是默认以最新时间来呈现的,这也是考虑到页面位置有限。这样设计的假设是使用者最关心的是当下的情况,同时给到一些指标的每月趋势也帮助对比往期情况;

  1. 对于单个业务指标值如环比,没能根据数字正负设置条件颜色,导致环比信息不够突出,后面查了一下资料只能在表格中实现,后续会继续了解改进~

当然本案例只是作为上手之作,还有很多需要改善的地方,也期待后面对工具更深入了解后能不断完善,也期待各位读者阅读完后也能给出见解与建议~谢谢阅读

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于power bi上手业务数据可视化 的相关文章

随机推荐

  • pid是滞后超前校正_超前校正,滞后校正,超前滞后校正三种校正方法的比较

    展开全部 1 超前校正的目的是改善系统的动态性能 实现62616964757a686964616fe59b9ee7ad9431333431353332在系统静态性能不受损的前提下 提高系统的动态性能 通过加入超前校正环节 利用其相位超前特性
  • VuePress

    sidebar auto VuePress Vue 驱动的静态网站生成器 1 4 目录结构 VuePress 遵循 约定优于配置 的原则 推荐的目录结构如下 docs vuepress 可选的 components 可选的 theme 可选
  • 微信小程序之实名认证人脸识别接口-wx.startFacialRecognitionVerify

    小程序前端使用人脸识别功能 绑定用户 开始实名认证的方法 调用摄像头 facialRecognitionVerify function userName userIdCard wx startFacialRecognitionVerify
  • Visual Studio 2017,C++MFC免注册调用大漠插件图文教程,详细版

    Visual Studio 2017 C MFC免注册调用大漠插件图文教程 详细版 前言 提示 这里可以添加本文要记录的大概内容 有很多人都在问C MFC怎么免注册调用 其实这些都有参考但是对于新手来说 编译器对新手的不友好 很多编程新手就
  • ElementUI按需引入各种组件

    ElementUI按需引入各种组件 一 首先按需引入前奏 安装element ui npm i element ui S 安装按需引入必要插件 npm install babel plugin component D 二 修改 babelr
  • VSCode汉化设置中文

    http efonfighting imwork net 欢迎关注微信公众号 一番码客 获取免费下载服务与源码 并及时接收最新文章推送 在VSCode中按下快捷键 Ctrl Shift P 显示命令面板 Show Command Palet
  • SQL Server辅助插件——SQL Prompt

    前言 当我们对某个程序进行维护或者完善时 必不可少的就是跟数据库或者以前开发人员写的sql语句打交道 当我们 对数据库表的结构不熟悉时 修改或者编写sql语句将是一件很痛苦的时间 而且sql server有没有像vs等软件可以提供 强大的智
  • 如何使用 wget 下载一个目录下的所有文件

    今天想要下载编译原理的 虎书 上的资料 使用wget但只是下载了一个index html 如下 于是我就参考资料 写此博客以记录 方法如下 wget r np nH R index html http url including files
  • npm和cnpm下载安装及VUE的创建

    npm和cnpm下载安装及VUE的创建 1 node js下载 node js官网 http nodejs cn download 下载安装后cmd输入以下命令查看版本 2 配置npm 打开node js的安装目录 我这里是D nodejs
  • 毕设-仓库管理的设计与实现

    package com ken wms common controller import com ken wms common service Interface CustomerManageService import com ken w
  • 用js来实现自定义弹框

    前言 个人作业上传 大家可参考但不可转载 实现将弹框的样式统一封装在一个对象中方便后续的修改
  • 开关电源环路稳定性分析(05)-传递函数

    大家好 这里是大话硬件 经过前面4篇文章的梳理 估计很多人已经等不及了 什么时候可以开始环路的分析 为了尽快进入到大家关心的部分 这一讲我们正式进入环路分析的第一部分 传递函数 传递函数 简单的理解就是输入和输出之间的关系 为了方便我们仅仅
  • 【linux】linux 基础正则表达式、字符串截取、比较、分支、while循环

    1 概述 正则表达式用来在文件中匹配符合条件的字符串 正则是包含匹配 grep awk sed等命令可以支持正则表达式 通配符用来匹配符合条件的文件名 通配符是完全匹配 ls find cp这些命令不支持正则表达式 所以只能使用shell自
  • IDEA中设置vue vue3+ts项目的@跳转

    网上基本都是这个方法但是试了对我不适用 idea vue项目通过 跳转 vue设置完 映射路径之后在IDEA中无法跳转 兜兜转转原来只需 在tsconfig json中加入如下配置就行 compilerOptions baseUrl pat
  • leetcode 5749. 邻位交换的最小次数

    邻位交换的最小次数 给你一个表示大整数的字符串 num 和一个整数 k 如果某个整数是 num 中各位数字的一个 排列 且它的 值大于 num 则称这个整数为 妙数 可能存在很多妙数 但是只需要关注 值最小 的那些 例如 num 54893
  • 使用stylecop 规范C#编码

    可直接在VS操作完成 简单易懂 第一步 打开VS 第二步 安装软件 第三步 规则修改 第四步 规则生效 stylecop 是代码静态检查分析的一大利器 可以自定义检查规则 安装操作使用方便 相信很多写C 的朋友都会使用的到 下面详细介绍安装
  • XP下采用DirectShow采集摄像头

    转载请标明是引用于 http blog csdn net chenyujing1234 欢迎大家提出意见 一起讨论 需要示例源码的请独自联系我 前提 摄像头能正常工作 摄像头有创建directshow filter 即 大家可以对比我的另一
  • 数据规约

    主成分的计算步骤 主成分的代码实现 设置工作空间 把 数据及程序 文件夹拷贝到F盘下 再用setwd设置工作空间 setwd F 数据及程序 chapter4 示例程序 数据读取 inputfile lt read csv data pri
  • z系列主板能装服务器系统吗,Intel Z390主板搭配8代酷睿现身:还能安装WIN7系统吗?...

    Intel今年为发烧友带来了最多18核心的Core X系列 搭配X299顶级主板 主流领域则有最多6核心的八代酷睿Coffee Lake S 搭配Z370主板 但坑爹的是 尽管八代和六七代酷睿都是LGA1151接口 但却被故意整成不兼容 因
  • 基于power bi上手业务数据可视化

    分析背景 偶然得到一份关于某连锁火锅品牌在2020年1月 8月的线上平台业务数据 如下图 心想正好利用这份数据 模拟实际业务中基于数据库与bi工具 实践开发可视化图表 一开始考虑用tableau 因为在大学跟刚工作的时候曾系统学习使用过 但