adventure案例——小結(jié)

前言:

本文是對adventure work案例的一個整體小結(jié)窝稿,描述在做的過程中收獲到的東西。
BI鏈接

image.png

目錄如下:
一凿掂、業(yè)務(wù)背景介紹
二伴榔、需求實(shí)現(xiàn)步驟
三、個人思考步驟

一庄萎、業(yè)務(wù)背景介紹

Adventure Works Cycles是AdventureWorks樣本數(shù)據(jù)庫所虛構(gòu)的公司踪少,這是一家大型跨國制造公司。該公司生產(chǎn)和銷售金屬和復(fù)合材料自行車到北美糠涛,歐洲和亞洲的商業(yè)市場援奢。

Adventure Works Cycle這家公司的客戶主要有兩種:
個體:這些客戶購買商品是通過網(wǎng)上零售店鋪
商店。 這些是從Adventure Works Cycles銷售代表處購買轉(zhuǎn)售產(chǎn)品的零售店或批發(fā)店忍捡。

這家公司主要有下面四個產(chǎn)品線:
? Adventure Works Cycles 生產(chǎn)的自行車
? 自行車部件集漾,例如車輪,踏板或制動組件
? 從供應(yīng)商處購買的自行車服裝砸脊,用于轉(zhuǎn)售給Adventure Works Cycles的客戶具篇。
? 從供應(yīng)商處購買的自行車配件,用于轉(zhuǎn)售給Adventure Works Cycles客戶凌埂。

二栽连、需求實(shí)現(xiàn)步驟

  1. 將數(shù)據(jù)導(dǎo)入Hive數(shù)據(jù)庫
  2. 探索數(shù)據(jù)庫并羅列分析指標(biāo)
  3. 匯總數(shù)據(jù)建立數(shù)據(jù)倉庫(Sales主題)
    4.powerbi可視化

三、個人思考步驟

1.將數(shù)據(jù)導(dǎo)入Hive數(shù)據(jù)庫

1.1Hive數(shù)據(jù)庫是什么?

Hive就是在Hadoop上架了一層SQL接口秒紧,可以將SQL翻譯成MapReduce去Hadoop上執(zhí)行


image.png

Hive是基于Hadoop的一個 數(shù)據(jù)倉庫工具,可以將結(jié)構(gòu)化的數(shù)據(jù)文件映射
成一張表挨下,并提供類SQL查詢功能熔恢;
Hive是構(gòu)建在Hadoop 之上的數(shù)據(jù)倉庫;
使用HQL作為查詢接口臭笆;
使用HDFS存儲叙淌;
使用MapReduce計算;

Hadoop是一個能夠?qū)Υ罅繑?shù)據(jù)進(jìn)行分布式處理的軟件框架愁铺。 Hadoop 以一種可靠鹰霍、高效、可伸縮的方式進(jìn)行數(shù)據(jù)處理茵乱。

Hadoop的框架最核心的設(shè)計就是:HDFS和MapReduce茂洒。
HDFS為海量的數(shù)據(jù)提供了存儲,則MapReduce為海量的數(shù)據(jù)提供了計算瓶竭。

1.2為何要用HIVE督勺?

hive優(yōu)缺點(diǎn)
優(yōu)點(diǎn): 入門簡單,避免了去寫MapReduce斤贰,減少開發(fā)人員的學(xué)習(xí)成本智哀;
統(tǒng)一的元數(shù)據(jù)管理,可與impala/spark等共享元數(shù)據(jù)荧恍;
靈活性和擴(kuò)展性比較好:支持UDF瓷叫,自定義存儲格式等;
適合離線數(shù)據(jù)處理
缺點(diǎn): Hive的效率比較低送巡,由于hive是基于hadoop摹菠,Hadoop本身是一個批處理,高延遲的計算框架
其計算是通過MapReduce來作業(yè)授艰,具有高延遲性
Hive適合對非實(shí)時的辨嗽、離線的、對響應(yīng)及時性要求不高的海量數(shù)據(jù)批量計算淮腾,即查詢糟需,統(tǒng)計分析

1.3有什么數(shù)據(jù)需要導(dǎo)入谷朝?

存在29份CSV文件洲押,里面的分隔符是“|”,沒有表頭圆凰。
有一份SQL文件杈帐,是Oracle導(dǎo)出的建表語句。
如圖:


image.png

image.png

存在問題:

1.3.1.Hive導(dǎo)入數(shù)據(jù)分隔符默認(rèn)為“,”,所以需要將csv文件中的“|”改為“,”

簡單方法是:將csv文件打開挑童,利用查找替換累铅,重復(fù)操作29次
復(fù)雜方法是:利用python循環(huán)讀取文件,再重新 輸出為csv文件
步驟如下:
1)用df.read_csv("文件名",sep="|")進(jìn)行讀取

2)文件名獲取利用os.walk("文件路徑的文件夾")站叼,
分別會出現(xiàn) 文件絕對路徑娃兽、文件夾、文件尽楔,利用for root,dirs,files in os.walk("文件路徑的文件夾")的for file in files 循環(huán)文件名
(當(dāng)然 利用 os.listdir(路徑)直接可獲得文件列表

3)在循環(huán)內(nèi)部進(jìn)行步驟一投储,避免出錯而終止循環(huán),使用

try:
  df.read_csv()
except Exception as e:
   print(e)
   continue

4)輸出csv阔馋,df.to_csv("文件路徑+文件名")玛荞,文件路徑和文件名則利用步驟二獲取的路徑+名字。利用os.path.join(路徑,文件名)可實(shí)現(xiàn)呕寝。

1.3.2.csv文件中無表頭(字段)勋眯,表頭需要在SQL語句中提煉出來:

利用python的正則表達(dá)式(import re)篩選出"[]"中所需要的值,搭配成字典形式壁涎,例如:

 if "CREATE TABLE" in content.upper():
            se0bj = re.search(r"\[(.*?)\].\[(.*?)\]",content,re.I) #re.I對大小寫不敏感 (.*凡恍?)用于分組,默認(rèn)返回括號內(nèi)匹配內(nèi)容 
            if se0bj:
                table_name = se0bj.group(2)
        matOjb = re.search(r"\[(.*?)\] \[(.*?)\].*",content.lstrip(),re.I)

獲得字典table_info


image.png

然后利用讀取文件函數(shù)怔球,進(jìn)行寫入嚼酝、輸出,用到函數(shù)有

shell_file = open("文件名","w") #w為寫入模式
shell_file.writelines("寫入文字") 按一行寫入
shell_file.write("寫入文字") 不限制行
shell_file.close() 關(guān)閉

以試錯方式進(jìn)行竟坛,先按一個表進(jìn)行操作闽巩,實(shí)現(xiàn)需求成功后,再進(jìn)行循環(huán)遍歷担汤。

導(dǎo)入csv文件到hive中的語句也是同樣利用python循環(huán)讀寫進(jìn)行輸出涎跨。

輸出文件應(yīng)該為 .sh shell后綴文件,在linux系統(tǒng)中 shell腳本可以進(jìn)行執(zhí)行崭歧。

1.4 linux系統(tǒng)中的hive

本次案例進(jìn)行的hive是在云端的linux服務(wù)器上進(jìn)行隅很,所以必須掌握了linux的基本使用。

1.4.1 linux的文件系統(tǒng):

它的文件是按照類型分類進(jìn)行儲存率碾,然后可按需求擺放在不同路徑叔营,但文件本身依舊在根目錄下。

1.4.2linux的bash 和 shell 認(rèn)識:

bash是啟動器所宰、shell是解釋器
bash類似于開啟一個虛擬登錄的用戶绒尊,然后該用戶對文件進(jìn)行讀取認(rèn)識、輸出等即shell仔粥。
腳本的本質(zhì)是開啟了一個子bash婴谱,然后執(zhí)行腳本蟹但,再退出子bash。
一般后綴為.sh的就是shell谭羔,讀取方式兩種:
當(dāng)前Shell:. file.sh 或者 source file.sh
新建子Shell:/bin/bash file 或者 ./file.sh
將.sh變?yōu)榭蓤?zhí)行文件 :chmod +x file.sh

1.4.3linux系統(tǒng)的文件讀然恰:

cat 只看不編
vi 可編寫

2.探索數(shù)據(jù)庫并羅列分析指標(biāo)

2.1首先了解有什么

有 維度表(Dim開頭) 和 事實(shí)表(Fact開頭)
維度表:固定標(biāo)簽信息,比如地理維度表中有地理id口糕、國家缅阳、省份、城市景描、經(jīng)緯度等信息,那么在別的表中有地理id字段秀撇,連接則獲得相應(yīng)其他字段超棺,節(jié)約表的空間。

事實(shí)表:實(shí)際業(yè)務(wù)發(fā)生過程的存儲表呵燕。比如淘寶用戶每日下單的記錄棠绘,買家可獲得其匯總信息,包括有userid再扭、訂單號氧苍、支付時間、支付鏈接等等泛范。

image.png

2.2目的及問題:

1)存在一份adventure的數(shù)據(jù)倉庫让虐,需要對其加工為可視化界面,減少數(shù)據(jù)加工的花費(fèi)時間罢荡。
2)以銷售情況為主題赡突,給老板、員工提供公司業(yè)務(wù)情況的基本信息区赵。
3)結(jié)合數(shù)據(jù)倉庫情況惭缰,分析基本信息的指標(biāo)應(yīng)有哪些。
4)搭建指標(biāo)框架結(jié)構(gòu)笼才,設(shè)計可視化界面的布局漱受。

2.3數(shù)據(jù)了解及整理:

由于主題為銷售情況,所以重點(diǎn)放在銷售表中骡送。
事實(shí)表:
存在FactInternetSales(線上銷售)和FactResellerSales(線下銷售)表昂羡,
里面存在字段差異有:
FactResellerSales存在員工主鍵和經(jīng)銷商主鍵,而FactInternetSales無各谚。

維度表:
事實(shí)表中的主鍵Key存在有:ProductKey紧憾、promotionKey、OrderDateKey昌渤、SalesTerritoryKey赴穗、(EmployeeKey、ResellerKey)

ER關(guān)系圖如下:


image.png

2.4羅列可分析的指標(biāo)和維度:

維度:
        產(chǎn)品維度:產(chǎn)品分類、產(chǎn)品子分類
        時間維度:年般眉、季了赵、月
        地區(qū)維度:銷售地區(qū)
        推廣維度:推廣方式
    可分析的指標(biāo):
        1.總銷售額=銷售量*客單價
        2.總成本=產(chǎn)品標(biāo)準(zhǔn)成本*銷售量+每筆訂單的稅收+運(yùn)費(fèi)
        3.利潤情況=銷售額-總成本
        4.銷售指標(biāo)達(dá)成情況
        5.銷售量最佳的產(chǎn)品Top10
        6.各維度下搭配,如時間維度下的銷售情況甸赃、銷售區(qū)域變化情況
                                         地區(qū)情況下的銷售額柿汛、推廣情況
                                         產(chǎn)品分類下的銷售情況

3.相應(yīng)SQL語句及步驟:

3.1聚合產(chǎn)品表:

image.png

通過Productkey獲得分類和子分類

    
    drop table if exists adventure_dw_hjf.dimproduct_hjf;
    
    create table adventure_dw_hjf.dimproduct_hjf as 
    select a.ProductKey,EnglishProductName,EnglishProductSubcategoryName,EnglishProductCategoryName from 
    (select ProductKey,ProductSubcategoryKey,EnglishProductName from adventure_ods_hjf.dimproduct) a left join
    (select ProductSubcategoryKey,ProductCategoryKey,EnglishProductSubcategoryName from adventure_ods_hjf.dimproductsubcategory) b 
    on a.ProductSubcategoryKey=b.ProductSubcategoryKey
    left join
    (select ProductCategoryKey,EnglishProductCategoryName from adventure_ods_hjf.dimproductcategory) c 
    on b.ProductCategoryKey=c.ProductCategoryKey;
    
    select * from adventure_dw_hjf.dimproduct_hjf;
image.png

3.2連接 事實(shí)表 新增銷售方式 字段,將線下銷售和線上銷售表合并

image.png
連接事實(shí)表為一個埠对,新增字段 saletype(銷售方式:internet,reseller)

第一步:
將factinternetsales的維度變與factresellersales相同

select ProductKey,PromotionKey,SalesTerritoryKey,OrderQuantity,TotalProductCost,
SalesAmount,TaxAmt,Freight,OrderDate,DueDate,ShipDate,
null as "EmployeeKey",null as "ResellerKey" 
from  adventure_ods_hjf.factinternetsales;
select ProductKey,PromotionKey,SalesTerritoryKey,OrderQuantity,TotalProductCost,
SalesAmount,TaxAmt,Freight,OrderDate,DueDate,ShipDate,EmployeeKey,
ResellerKey from  adventure_ods_hjf.factresellersales;

第二步:分別給予factinternetsales 和 factresellersales增加saletype字段

  • Factinternetsales
select ProductKey,PromotionKey,SalesTerritoryKey,OrderQuantity,TotalProductCost,
SalesAmount,TaxAmt,Freight,OrderDate,DueDate,ShipDate,
null as "EmployeeKey",null as "ResellerKey","internet" as "saletype" 
from  adventure_ods_hjf.factinternetsales;
  • Factresellersales
select ProductKey,PromotionKey,SalesTerritoryKey,OrderQuantity,TotalProductCost,
SalesAmount,TaxAmt,Freight,OrderDate,DueDate,ShipDate,EmployeeKey,
ResellerKey,"reseller" as "saletype" from  dventure_ods_hjf.factresellersales;

第三步:上述兩表結(jié)合union

drop table if exists adventure_dw_hjf.fact_sale_hjf;

create table adventure_dw_hjf.fact_sale_hjf as

(select 
ProductKey,PromotionKey,SalesTerritoryKey,OrderQuantity,TotalProductCost,
SalesAmount,TaxAmt,Freight,OrderDate,DueDate,ShipDate,
null as "EmployeeKey",null as "ResellerKey","internet" as "saletype" 
from  adventure_ods_hjf.factinternetsales where OrderDate<current_date()) 

union all

(select 
ProductKey,PromotionKey,SalesTerritoryKey,OrderQuantity,TotalProductCost,
SalesAmount,TaxAmt,Freight,OrderDate,DueDate,ShipDate,EmployeeKey,
ResellerKey,"reseller" as "saletype" from  adventure_ods_hjf.factresellersales 
where OrderDate<current_date()) ;

3.3將事實(shí)表通過key與各維度表相連(這一步可在BI或者SQL中實(shí)現(xiàn))

可以將維度表需要字段提取到匯總數(shù)據(jù)庫中
- 梳理所需維度表

  • 1)DimSalesTerritory
    select SalesTerritoryKey,SalesTerritoryRegion,SalesTerritoryCountry,
SalesTerritoryGroup from adventure_ods_hjf.dimsalesterritory;
  • 2)Dimpromotion
    select PromotionKey,EnglishPromotionName,EnglishPromotionCategory 
from adventure_ods_hjf.dimpromotion;
  • 3)dimemployee
    select EmployeeKey,concat(" ",FirstName," ",MiddleName," ",LastName)
 as employee_name from adventure_ods_hjf.dimemployee;
  • 4)dimreseller
    select ResellerKey,ResellerName from adventure_ods_hjf.dimreseller;

3.4上述事實(shí)表最好通過一條語句實(shí)現(xiàn)络断,不要有過度表,為后期更新每日數(shù)據(jù)方便项玛。

image.png

4.Power BI 可視化

4.1數(shù)據(jù)清洗:

導(dǎo)入BI后發(fā)現(xiàn)格式不正確的貌笨,在HIVE中重新清洗正確。

BI只是輔助手段襟沮,里面需要的相減獲得利潤字段锥惋,或者相除獲得的客單價字段等,在BI進(jìn)行模擬時开伏,后續(xù)回到HIVE中添加相應(yīng)語句膀跌。

4.2書簽:

書簽類似導(dǎo)航欄,在“視圖”——“書簽窗格”打開固灵,新建的書簽是以當(dāng)前狀態(tài)為保存的捅伤,可以選擇是否關(guān)聯(lián)“數(shù)據(jù)、顯示怎虫、當(dāng)前頁”等暑认。


image.png

可以結(jié)合“選擇窗格”使用書簽,在不同書簽下大审,選擇窗格可自行選擇“顯示”或者“隱藏窗格”蘸际。


image.png

4.3布局原則:

貼合場景、主次分明徒扶、指標(biāo)清晰粮彤。
一般5~6圖表即可。
核心指標(biāo)顯示大姜骡、指標(biāo)構(gòu)成的其余信息科適當(dāng)減小导坟。
頁面以維度為劃分,探討該維度下的不同信息圈澈。

4.4 最終成果:

主頁: 基本銷售指標(biāo)情況
image.png

(1) 基本指標(biāo)情況(總銷售額惫周、目標(biāo)達(dá)成金額、總訂貨量康栈、平均運(yùn)費(fèi)递递、平均稅費(fèi))
(2) 產(chǎn)品分類下的銷售情況
(3) 不同渠道下的銷售情況
(4)不同地區(qū)下的銷售情況

趨勢:時間維度下的不同趨勢
image.png

(1)基本季度喷橙、月份、總的銷售金額
(2)不同地區(qū)登舞、不同渠道贰逾、不同產(chǎn)品類型的切片器
(3)銷售金額與目標(biāo)達(dá)成金額的比較
(4)稅費(fèi)、運(yùn)費(fèi)菠秒、單件成本情況

地區(qū):不同地區(qū)的銷售情況
image.png

(1)按地區(qū)劃分的銷售金額疙剑、目標(biāo)金額、訂單量践叠、客單價情況
(2)按地區(qū)劃分的不同產(chǎn)品分類的訂單量
(3)月份切片器
(4)地區(qū)圖及堆積卡片圖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末言缤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子禁灼,更是在濱河造成了極大的恐慌轧简,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匾二,死亡現(xiàn)場離奇詭異,居然都是意外死亡拳芙,警方通過查閱死者的電腦和手機(jī)察藐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舟扎,“玉大人分飞,你說我怎么就攤上這事《孟蓿” “怎么了譬猫?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長羡疗。 經(jīng)常有香客問我染服,道長,這世上最難降的妖魔是什么叨恨? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任柳刮,我火速辦了婚禮,結(jié)果婚禮上痒钝,老公的妹妹穿的比我還像新娘秉颗。我一直安慰自己,他們只是感情好送矩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布蚕甥。 她就那樣靜靜地躺著,像睡著了一般栋荸。 火紅的嫁衣襯著肌膚如雪始苇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天故响,我揣著相機(jī)與錄音熙卡,去河邊找鬼。 笑死产阱,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播义屏,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜂大!你這毒婦竟也來了闽铐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤奶浦,失蹤者是張志新(化名)和其女友劉穎兄墅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體澳叉,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡隙咸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了成洗。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片五督。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖瓶殃,靈堂內(nèi)的尸體忽然破棺而出充包,到底是詐尸還是另有隱情,我是刑警寧澤遥椿,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布基矮,位于F島的核電站,受9級特大地震影響冠场,放射性物質(zhì)發(fā)生泄漏家浇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一慈鸠、第九天 我趴在偏房一處隱蔽的房頂上張望蓝谨。 院中可真熱鬧,春花似錦青团、人聲如沸譬巫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芦昔。三九已至,卻和暖如春娃肿,著一層夾襖步出監(jiān)牢的瞬間咕缎,已是汗流浹背珠十。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留凭豪,地道東北人焙蹭。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像嫂伞,于是被迫代替她去往敵國和親孔厉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容