一、项目背景
餐饮行业属于快消行业,快消行业的特点就在一个快字上,决策者需要对各门店的每一天的销售情况进行实时的观测,才可以非常快速的了解当天的销售状况,寻找销售密码,从而快速发现问题,解决问题,响应市场的变化,对市场的需求进行快速的判断和决策。
现在我们根据某餐饮企业北京各店铺的日销售相关数据来制作一个超级简单的分析仪,以便决策者能够清晰迅速的了解各店面每一天的销售情况。
二、思路搭建
三、指标解读
四、理解数据
本次日销售情况分析仪的搭建共使用3张数据表,这三张数据表的表结构信息如下:
五、数据的整理与分析
1.数据整理
- 下面的过程可以直接在MySQL中完成也可以在Navicat客户端中完成。
- 由于本次数据源本身就特别规范,故无需进行数据清洗。
- 数据源表无标题行,故导入数据过程中无需忽略第一行。
1)新建数据库
-- 新建名为cateringcase(餐饮案例)的数据库
create database Cateringcase;
2)新建Bill表并导入数据
根据-bill表的表结构信息新建Bill表并导入数据。
use Cateringcase;
-- 新建bill表
create table Bill (
billdate date not null,
billnumber varchar() not null default '-',
shopname varchar() 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
);
-- 导入数据(注意地址中的是左斜杠/哦,而且文件位置信息要写到要导入文件的略缩名-bill.csv)
load data local infile 'D:/.lessons/1.data analysis/data analyst(Excel+MySQL)/.source material/1.1data/data/-bill.csv'
into table Bill
fields terminated by ',';
-- 查看Bill表数据导入情况
select * from Bill;
select count(*) from Bill;
3)创建OrderDetail 表并导入数据
-- 创建shopdetail表并导入数据
create table ShopDetail(
shopname varchar() 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:/.lessons/1.data analysis/data analyst(Excel+MySQL)/.source material/1.1data/data/-shop.csv'
into table ShopDetail
fields terminated by ',';
-- 查看ShopDetail表数据导入情况
select * from Shopdetail;
select count(*) from shopdetail;
4)创建ShopDetail表并导入数据
-- 创建shopdetail表并导入数据
create table ShopDetail(
shopname varchar() 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:/.lessons/1.data analysis/data analyst(Excel+MySQL)/.source material/1.1data/data/-shop.csv'
into table ShopDetail
fields terminated by ',';
-- 查看ShopDetail表数据导入情况
select * from Shopdetail;
select count(*) from shopdetail;
2.数据分析
1)用orderdetail表创建单汇总金额表(OrderGroup)
- 以orderdetail表的billnumber字段为汇总依据,求出每条billnumber下pay的加总值。
- 新表字段:billnumber(单号)、pay(金额)
-- 创建单汇总金额表(OrderGroup)
create table OrderGroup(
select billnumber ,sum(pay)as pay
from orderdetail
group by billnumber
);
select * from ordergroup;
2)用Bill表与OrderGroup表创建新单号详细表(NewBill)
- 以billnumber为关键字段关联两表,将OrderGroup表中的pay字段合并到Bill表中,并使用pay与billdiscount字段计算出折扣金额。
- 新表字段:所有Bill表中的字段、pay(金额)、rebate(折扣金额)
- 计算逻辑:Rebate = pay * billdiscount
-- 用Bill表与OrderGroup表创建新单号详细表(NewBill)
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;
3)用Shopdetail表创建新店面情况表(NewShopDetail)
- 在原有shopdetail表字段基础上计算并添加allseats字段。
- 新表字段:所有ShopDetail表中的字段、allseats(总座位数)。
- 计算逻辑:allseats = twotable * 2 + three * 3 + fourtable * 6(其中四人及以上台数的每台平均座位数为6)。
-- 用Shopdetail表创建新店面情况表(NewShopDetail)
create table NewShopDetail(
select *, twotable*2+threetable*3+fourtable*6 as allseats
from shopdetail
);
select * from NewShopDetail;
4)用OrderDetail表与Bill表创建新点菜明细表(NewOrderDetail)
- 以billnumber为关键字段关联两表,并用Bill表中的shopname与OrderDetail表中的所有字段组成新表
- 新表字段:shopname(店名)、OrderDetail表中的所有字段
-- OrderDetail表与Bill表创建新点菜明细表(NewOrderDetail)
create table NewOrderDetail(
select b.shopname,o.*
from OrderDetail as o left join bill as b on o.billnumber = b.billnumber
);
select * from neworderdetail;
5)用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的合计值。
-- 用NewBill表与NewShopDetail表创建店汇总信息表(ShopTotal)
create table ShopTotal(
select nb.shopname as 店名,count(nb.billnumber) as 单数,
sum(nb.peoplecount) as 人数, sum(nb.pay) as 店汇总金额,
sum(nb.pay)/count(nb.billnumber) as 单均消费,
sum(nb.pay)/sum(nb.peoplecount) as 人均消费,
ns.alltable as 总台数,ns.allseats as 总座位数,
count(nb.billnumber)/ns.alltable as 翻台率,
sum(nb.peoplecount)/ns.allseats as 上座率,
sum(nb.rebate)/sum(nb.pay) as 折扣率
from NewBill as nb left join newshopdetail as ns on nb.shopname = ns.shopname
group by nb.shopname);
select * from shoptotal;
六、数据可视化
该过程可以在Excel(power pivot、power view 及powerquery加载项)中完成,也可直接在PowerBI客户端中完成,下面以PowerBI为例完成可视化。
1.将MySQL中处理好的数据表导入PowerBI。
1)用PowerBI连接数据库
2)将需要的数据表导入PowerBI
①选中需要导入的数据表,点击加载即可。
②点击‘转换数据’进入查询编辑器,对各表各字段的数据类型进行调整。
newbill表
shoptotal
2.数据建模
3)KPI指标展现
销售额:
这里面我们用每家店的平均销售金额/所有店的总平均销售金额来衡量这家店的销售KPI指标是否达标(即是否高于平均水平,不及格红色,绿色为优秀,黄色为及格)。
(1)新建度量值
各门店销售额平均值 = AVERAGE('cateringcase shoptotal'[店汇总金额]) 所有店总平均销售金额 = CALCULATE(AVERAGE('cateringcase shoptotal'[店汇总金额]),ALL('cateringcase shoptotal')) 店面销售情况 = [各门店销售额平均值]/[所有店总平均销售金额]
2)建立销售额KPI指标
利用之前建立的度量值及可视化中的KPI模块,进行销售额KPI部分的可视化。
颜色设置规则:
- [店面销售情况]在~之间为绿色
- [店面销售情况]在~之间为黄色
- [店面销售情况]在<之间为红色
其他KPI指标:
运用可视化功能中卡片模块进行设置。
最后KPI部分如下图所示:
4)店铺不同时段总体运营情况
以折线及柱形组合图来展现不同时段销售额及订单量的变化趋势。
5.各类菜品销售情况