一、關於本次案列的概述
相關資料與結果:
鏈接: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