基于某餐饮数据的mysql+powerBI综合案列

1、关于本次案列的概述 

相关资料与结果:mysql

连接:https://pan.baidu.com/s/1bUKxYVmm1x5mpjpwetR2dQ

sql

本次案列的数据是来自某餐饮数据的日销售状况,基于已经提供的数据,须要在excel中作一个各个店面的分析仪,其KPI 指标相关以下:数据库

该问题的难点仍是在于表之间的逻辑关系,以及相关业务知识。总之大体的效果要作成以下spa

 

数据表一共有三张,包括:bill    orderdetail     shopdetail3d

他们的表结构以下:excel

 

 

而咱们的目的是得到不一样店面的数据状况,上面的三张表是不能知足这样状况的,因此我选择先在MySQL中进行数据加工,再用Excel中利用power pivot生成数据透视表和数据透视图,code

固然还有其余一些操做,总体动态图的展示等。blog

二 、数据预处理 —基于MySQL5.7 +workbench 6.3 

(1)建表与数据导入

 在MySQL中先创建 库   MySQL_powerBI       three

create database mysql_powerbi; use mysql_powerbi; -- Bill table
create table Bill( billdate date not null, billnumber varchar(20) not null default '-', shopname varchar(20) not null default '-', billdiscount float not null default 0, paytime time not null, tablenumber int not null default 0, peoplecount int not null default 0 ); #导入数据 load data local infile 'D:/mysql_powerBI/data/-bill.csv' 
    into table Bill fields terminated by ','; select * from Bill;

表 Bill 的状况以下图,一共有 682 行

  

-- OrderDetail table
create table OrderDetail( billnumber varchar(20) not null default '-', detail varchar(20) not null default '-', pay int not null default 0 ); #导入数据 load data local infile 'D:/mysql_powerBI/data/-order.csv' 
    into table OrderDetail fields terminated by ','; select * from OrderDetail;

表   OrderDetail  共有 3410 行,以下:图片

 

-- ShopDetail table
create table ShopDetail( ShopName varchar(20) not null default '-', twotable int not null default 0, threetable int not null default 0, fourtable int not null default 0, alltable int not null default 0 ); #导入数据 load data local infile 'D:/mysql_powerBI/data/-shop.csv' 
    into table ShopDetail fields terminated by ','; select * from ShopDetail;

表  ShopDetail 共有 5 行,以下:

 

在确保上面的步骤无误后,接下来进入数据加工阶段,获得咱们想要的数据

(2)数据加工

在进行数据加工以前必需要很是清楚的理解各表结构信息,否则根本没有办法作!通常来讲,我都会画一个表之间的链接关系来帮助本身进行数据处理,看看每一个表是怎么来的

 

  (a)  用orderdetail表建立单汇总金额表(OrderGroup

以orderdetail表的billnumber字段为汇总依据,求出每条billnumber下pay的加总值。

新表字段:billnumber(单号)、pay(金额)

-- 数据加工 -- 建立单汇总金额表
Create table OrderGroup( select billnumber, sum(pay) as pay from OrderDetail group by billnumber ); select * from OrderGroup;

结果共682行,以下:

 

(b)用Bill表与OrderGroup表建立新单号详细表(NewBill

以billnumber为关键字段关联两表,将OrderGroup表中的pay字段合并到Bill表中,并使用pay与billdiscount字段计算出折扣金额。

新表字段:全部Bill表中的字段、pay(金额)、rebate(折扣金额)

计算逻辑:Rebate = pay * billdiscount

-- 建立新单号详细表
Create table NewBill( select b.*,o.pay,b.billdiscount * o.pay as rebate from bill as b left join ordergroup as o on b.billnumber = o.billnumber); select * from NewBill;

结果共682行 ,以下:

 

(c)用Shopdetail表建立新店面状况表(NewShopDetail)

在原有shopdetail表字段基础上计算并添加allseats字段

新表字段:全部ShopDetail表中的字段、allseats(总座位数)

计算逻辑:allseats = twotable * 2 + three * 3 + fourtable * 6 (这里四人桌(含)都乘以6,你能够理解为过道也能够坐人....)

-- 建立新店面状况表
create table NewShopDetail( select *, (twotable * 2 + threetable * 3 + fourtable * 6) as allseats from shopdetail as s); select * from NewShopDetail;

结果共有5行,以下:

 

(d)用OrderDetail表与Bill表建立新点菜明细表(NewOrderDetail)

以billnumber为关键字段关联两表,并用Bill表中的shopname与OrderDetail表中的全部字段组成新表

新表字段:shopname(店名)、OrderDetail表中的全部字段

-- 建立新点菜明细表
create table neworderdetail( select b.shopname,o.* from orderdetail as o left join bill as b on o.billnumber = b.billnumber ); select * from neworderdetail;

结果共有3410行,以下:

 

(e) 用NewBill表与NewShopDetail表建立店汇总信息表(ShopTotal

以shopname字段为关键字段关联两表,并以shopname字段为汇总条件,建立如下字段

新表字段:

店名: b.shopname

单数: b.billnumber的计数

人数: b.peoplecount的加总

折扣总金额: b.rebate的加总

店汇总金额: b.pay的加总

单均消费: b.pay的合计值/b.billnumber的计数值

人均消费: b.pay的合计值/b.peoplecount的合计值

总台数: s.alltable

总座位数: s.allseats

翻台率: b.billnumber的计数值/s.alltable

上座率: b.peoplecount的合计值/s.allseats

折扣率: b.rebate的合计值/b.pay的合计值

-- 建立店汇总信息表
create table ShopTotal( select b.shopname as 店名, count(b.billnumber) as 单数, sum(b.peoplecount) as 人数,sum(b.rebate) as 折扣总金额,sum(b.pay) as 店汇总金额, sum(b.pay)/count(b.billnumber) as 单均消费, sum(b.pay)/sum(b.peoplecount) as 人均消费, s.alltable as 总台数, s.allseats as 总座位数, count(b.billnumber)/s.alltable as 翻台率, sum(b.peoplecount)/s.allseats as 上座率, sum(b.rebate)/sum(b.pay) as 折扣率 from newbill as b left join newshopdetail as s on b.shopname = s.shopname group by b.shopname); select * from shoptotal;

结果共 5 行,完整以下:

 

基于mysql 的数据加工到这里就完成了,在保证上面没有问题的状况下,接下来利用Excel 链接MySQL,将数据表导入power pivot进行数据透视表和数据透视图的制做。

3、用powerBI进行数据透视

新建空白表格——数据——新建链接——从数据库——从MySQL数据库,在弹出的窗口中这样填

 

肯定,弹出如下窗口,选择 newbill  neworderdetail shoptotal 三张表

 

在 加载 出下拉,选着 加载到

 

加载   完成后进入excel界面,点击 power pivot——管理数据模型——关系图视图

    a:   newbill 的 shopname 链接到 shoptotal 的 店名

    b:  neworderdetail de shopname 链接到  shoptotal 的 店名

 

返回到 数据视图,在表 shoptotail 里,计算以下两个式子,目的是为了创建 门店各自销售金额与总的平均销售金额的KPI

选中 门店各自销售金额 ——建立kpi——度量值(门店总的平均销售金额)———修改数值——肯定

 

接下来建立数据透视表,数据透视表下拉,选中数据透视表,建立以下数据透视表

 

 

在利用 复制,粘贴为图片链接到另外一张工做表,以下:

 

再来建立一个数据透视表,这里以detail 分组,值为 pay  更名 销售额billnumber 更名 销量

 

建立数据透视图:在newbill 表里,以paytime小时分组,值是pay和billnumber,选择组合图,billnumber 用折线图,添加第二坐标,我是比较喜欢黑色,整理以下:

再把上面的第二个数据透视表,作成饼状的数据透视图

 

最后插入 切片器,选着 shoptotal[店名],链接全部的数据透视表 数据透视图

 最后检验一下,在切片器里点击 北新桥店, 结果以下:

在点击 亚运村店, 结果以下

 

经检验,没有问题,到此保存,结束!

相关资料与结果:

连接:https://pan.baidu.com/s/1bUKxYVmm1x5mpjpwetR2dQ

相关文章
相关标签/搜索