餐饮汇总表mysql_基于某餐饮数据的mysql+powerBI综合案列

一、关于本次案列的概述

相关资料与结果:

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

433d505a3d9353c2eeca4e028ff64f54.png

该问题的难点还是在于表之间的逻辑关系,以及相关业务知识。总之大致的效果要做成如下:

9c6da38d19df75a68ed5934e0417d17e.png

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

他们的表结构如下:

f4cc247b41ed799bdb030b5d86d0885e.png

d540382c80d96d95175961c32dd25b66.png

18bd5382128f8a2969165add3f62aa83.png

而我们的目的是获得不同店面的数据情况,上面的三张表是不能满足这样情况的,所以我选择先在MySQL中进行数据加工,再用Excel中利用power pivot生成数据透视表和数据透视图,

当然还有其他一些操作,整体动态图的展现等。

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

(1)建表与数据导入

在MySQL中先建立 库   MySQL_powerBI

create databasemysql_powerbi;usemysql_powerbi;--Bill table

create tableBill(

billdate datenot null,

billnumbervarchar(20) not null default '-',

shopnamevarchar(20) not null default '-',

billdiscountfloat not null default 0,

paytime timenot null,

tablenumberint not null default 0,

peoplecountint not null default 0);

#导入数据load data local infile 'D:/mysql_powerBI/data/-bill.csv'

into tableBill

fields terminatedby ',';select * from Bill;

表 Bill 的情况如下图,一共有 682 行

dd085372fd7d73850078e0d7aa0b31df.png

--OrderDetail table

create tableOrderDetail(

billnumbervarchar(20) not null default '-',

detailvarchar(20) not null default '-',

payint not null default 0);

#导入数据load data local infile 'D:/mysql_powerBI/data/-order.csv'

into tableOrderDetail

fields terminatedby ',';select * from OrderDetail;

表   OrderDetail  共有 3410 行,如下:

3c45c3d75ecedcba3191f706276c7132.png

--ShopDetail table

create tableShopDetail(

ShopNamevarchar(20) not null default '-',

twotableint not null default 0,

threetableint not null default 0,

fourtableint not null default 0,

alltableint not null default 0);

#导入数据load data local infile 'D:/mysql_powerBI/data/-shop.csv'

into tableShopDetail

fields terminatedby ',';select * from ShopDetail;

表  ShopDetail 共有 5 行,如下:

82211619fe223a40472ba80068831802.png

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

(2)数据加工

在进行数据加工之前必须要非常清楚的理解各表结构信息,不然根本没有办法做!一般来说,我都会画一个表之间的连接关系来帮助自己进行数据处理,看看每个表是怎么来的

3c1501b53563693618456869efda8d6c.png

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

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

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

--数据加工--创建单汇总金额表

Create tableOrderGroup(select billnumber, sum(pay) as pay fromOrderDetailgroup bybillnumber

);select * from OrderGroup;

结果共682行,如下:

c83d12da8394f95b0ff77003fe412f42.png

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

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

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

计算逻辑:Rebate = pay * billdiscount

--创建新单号详细表

Create tableNewBill(select b.*,o.pay,b.billdiscount * o.pay as rebate from bill as b left join ordergroup asoon b.billnumber =o.billnumber);select * from NewBill;

结果共682行 ,如下:

3ec4335e2c4301e350bc17937dad9a71.png

(c)用Shopdetail表创建新店面情况表(NewShopDetail)

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

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

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

--创建新店面情况表

create tableNewShopDetail(select *, (twotable * 2 + threetable * 3 + fourtable * 6) asallseatsfrom shopdetail ass);select * from NewShopDetail;

结果共有5行,如下:

99323aaeaa1cdc68f6a626554a241273.png

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

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

新表字段:shopname(店名)、OrderDetail表中的所有字段

--创建新点菜明细表

create tableneworderdetail(select b.shopname,o.* from orderdetail as o left join bill asbon o.billnumber =b.billnumber

);select * from neworderdetail;

结果共有3410行,如下:

2a15f58a869397864312ddfe1df392c2.png

(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 tableShopTotal(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.alltableas总台数,

s.allseatsas总座位数,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 asson b.shopname =s.shopnamegroup byb.shopname);select * from shoptotal;

结果共 5 行,完整如下:

2d0196eb4737bd64e8136504969e7f8e.png

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

三、用powerBI进行数据透视

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

fffe71eb9f788cf59a31a5f016de5672.png

确定,弹出以下窗口,选择newbill  neworderdetail shoptotal三张表

5e7c58cf1c8fd5ba2ceda337c8bfbf22.png

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

8281307a864c045208030e1f687c8e68.png

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

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

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

616a0449ef47fb0816a22f6c8ffb3ac5.png

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

0fdfa606d242857c509cc542a0dc8a09.png

c53d2f69c5769a169cc1b63168e92709.png

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

cb980eaa6c8c36ba63f3c830a31aa7c3.png

接下来创建数据透视表,数据透视表下拉,选中数据透视表,创建如下数据透视表

f1d6a50b9bb9cfe58dd48bbe33f0c7af.png

a78eeff005498ddbc96be6164e67e3ff.png

在利用 复制,粘贴为图片连接到另一张工作表,如下:

48576d0e3542d1fa56a6a99dde3922f6.png

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

0b1d509a4f4dc45618e0f5ca29f38e80.png

c289bfd4b610261c29ddc766bff70618.png

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

a43edf3562e0ab5b37de6a1fa7ad5f99.png

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

039c3a035df4f6eb430dc5c321c6f116.png

最后插入切片器,选着 shoptotal[店名],连接所有的数据透视表 数据透视图

ae75b0d63c190286f82f739985aee068.png

e9929b452e99410bba9d7ae19e734154.png

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

b58c08f873e87a427df9ceee0f26c022.png

在点击 亚运村店, 结果如下:

20f689f18df27e4f56e36bf13707353d.png

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

相关资料与结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值