基於某餐飲數據的mysql+powerBI綜合案列


一、關於本次案列的概述 

相關資料與結果:

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

本次案列的數據是來自某餐飲數據的日銷售情況,基於已經提供的數據,需要在excel中做一個各個店面的分析儀,其KPI 指標相關如下:

該問題的難點還是在於表之間的邏輯關系,以及相關業務知識。總之大致的效果要做成如下

 

數據表一共有三張,包括:bill    orderdetail     shopdetail

他們的表結構如下:

 

 

而我們的目的是獲得不同店面的數據情況,上面的三張表是不能滿足這樣情況的,所以我選擇先在MySQL中進行數據加工,再用Excel中利用power pivot生成數據透視表和數據透視圖,

當然還有其他一些操作,整體動態圖的展現等。

二 、數據預處理 —基於MySQL5.7 +workbench 6.3 

(1)建表與數據導入

 在MySQL中先建立 庫   MySQL_powerBI       

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進行數據透視表和數據透視圖的制作。

三、用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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM