基於某餐飲數據的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

相關文章
相關標籤/搜索