在開始動手制作案例之前,大家首先跟随小黎子來一起了解商品銷售中的ABC分析的定義。
1.商品銷售ABC分析法是以商品銷售為主線将商品劃分為A、B、C類,商品銷售從高到低,累計占比0至50%為A類商品,50%-90%為B類商品,90%-100%為C類商品
2.商品銷售ABC分析法又稱巴雷托分析法,它是根據事物在技術或經濟方面的主要特征,進行分類排隊,厘清重點和一般,進而有差別地确定管理方式的一種分析方法。由于它把被分析的對象分成A、B、C三類,是以又稱為ABC分析法。
3. 商品銷售ABC分析法可以完成整體宏觀分析要求,也可以滿足單品的銷售、毛利、成本、筆數等的分析和操作需求。
該模型是基于KSOA時空醫藥軟體的資料庫建立的銷售ABC分析模型,本案例中無法提供給大家醫藥資料源。大家可以通過小黎子資料分析公衆号回複【銷售】擷取銷售資料源進行學習了解。我們首先來看一下商品動态ABC分析中的構成元素:
1、分析名額、分析次元、元素名稱都是我們可以自由選擇的要被分析的對象,可以動态選擇在右下角顯示分析曲線
2、動态設定ABC參數的相對大小,可以通過調節ABC的參數大小來結合企業實際的分類占比進行分析商品
3、ABC分類總價值占比和全動态ABC分析都是展現最終結果的圖表
接下來我們來看看是如何制作的。
一、處理需要的次元表和事實表
1、次元表:商品檔案、日期
2、事實表:銷售資料
二、處理需要分析的次元和名額公式資訊
- 商品檔案次元:商品類型、商品一級分類、商品二級分類、劑型、生産廠商、主治功能
- 銷售名額:銷售筆數、銷售成本、銷售金額、銷售毛利
- 動态設定ABC參數
- ABC元素價值名額處理
1、商品檔案次元資訊處理
實作動态ABC分析,就需要從商品檔案中動态提取ABC元素。具體公式如下:
次元_ABC元素 =
VAR Products1 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '次元_商品檔案'[主治功能] ) , "元素類型" , "主治功能" ) , "元素名稱" , [主治功能] , "元素類型" , [元素類型] )
VAR Products2 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '次元_商品檔案'[商品一級分類] ) , "元素類型" , "商品一級分類" ) , "元素名稱" , [商品一級分類] , "元素類型" , [元素類型] )
VAR Products3 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '次元_商品檔案'[商品二級分類] ) , "元素類型" , "商品二級分類" ) , "元素名稱" , [商品二級分類] , "元素類型" , [元素類型] )
VAR Products4 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '次元_商品檔案'[商品類型] ) , "元素類型" , "商品類型" ) , "元素名稱" , [商品類型] , "元素類型" , [元素類型] )
VAR Products5 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '次元_商品檔案'[劑型] ) , "元素類型" , "劑型" ) , "元素名稱" , [劑型] , "元素類型" , [元素類型] )
VAR Products6 = SELECTCOLUMNS( ADDCOLUMNS( DISTINCT( '次元_商品檔案'[生産廠商] ) , "元素類型" , "生産廠商" ) , "元素名稱" , [生産廠商] , "元素類型" , [元素類型] )
RETURN UNION( Products1,Products2,Products3,Products4,Products5,Products6 )
2、銷售名額資訊處理
銷售名額是直接填寫的ABC名額分類,在表中直接輸入名額資訊和排序即可
- 銷售金額公式:銷售金額 = SUM('事實_銷售資料'[實收金額])
- 銷售毛利公式:銷售毛利 = SUM('事實_銷售資料'[毛利])
- 銷售筆數公式:銷售筆數 = DISTINCTCOUNT('事實_銷售資料'[單據編号])
- 銷售成本公式:銷售成本 = SUM('事實_銷售資料'[成本金額])
銷售名額自動選擇切換
銷售 名額 自動 =
SWITCH( TRUE() ,
SELECTEDVALUE( '次元_ABC名額分類'[名額名稱] ) = "銷售金額" , [銷售金額] ,
SELECTEDVALUE( '次元_ABC名額分類'[名額名稱] ) = "銷售毛利" , [銷售毛利] ,
SELECTEDVALUE( '次元_ABC名額分類'[名額名稱] ) = "銷售筆數" , [銷售筆數] ,
SELECTEDVALUE( '次元_ABC名額分類'[名額名稱] ) = "銷售成本" , [銷售成本] ,
[銷售金額] // as default
)
3、動态ABC參數設定
首先我們需要輸入ABC分類表
在通過公式生成參數A\B\C
參數 ABC A = GENERATESERIES(0, 100, 1)
參數 ABC B = GENERATESERIES(0, 100, 1)
參數 ABC C = GENERATESERIES(0, 100, 1)
4、ABC元素名額價值處理
ABC 元素 價值 =
VAR ItemRelationOfCustomer1 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_會員'[性别] )
VAR ItemRelationOfCustomer2 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_會員'[年齡 (組)] )
VAR ItemRelationOfProduct = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_商品檔案'[商品類型] )
VAR ItemRelationOfProduct2 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_商品檔案'[主治功能] )
VAR ItemRelationOfProduct3 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_商品檔案'[商品一級分類] )
VAR ItemRelationOfProduct4 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_商品檔案'[商品二級分類] )
VAR ItemRelationOfProduct5 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_商品檔案'[劑型] )
VAR ItemRelationOfProduct6 = TREATAS( VALUES( '次元_ABC元素'[元素名稱] ) , '次元_商品檔案'[生産廠商] )
RETURN
SWITCH( TRUE() ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "性别" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfCustomer1 ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "年齡 (組)" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfCustomer2 ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "商品類型" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfProduct ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "主治功能" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfProduct2 ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "商品一級分類" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfProduct3 ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "商品二級分類" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfProduct4 ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "劑型" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfProduct5 ) ,
SELECTEDVALUE( '次元_ABC元素'[元素類型] ) = "生産廠商" ,
CALCULATE( [銷售 名額 自動] , ItemRelationOfProduct6 ) ,
BLANK()
)
ABC 元素 價值 占比 =
VAR Items = CALCULATETABLE( DISTINCT( '次元_ABC元素'[元素名稱] ) , ALLSELECTED( '次元_ABC元素'[元素名稱] ) )
VAR Total = CALCULATE( [ABC 元素 價值] , Items )
VAR CurrentItemValue = [ABC 元素 價值]
RETURN DIVIDE( CurrentItemValue , Total )
ABC 元素 價值 占比 按分類 =
IF( SELECTEDVALUE( '次元_ABC分類'[ABC分類名稱] ) = [ABC 元素 所屬分類] , [ABC 元素 價值 占比] , BLANK() )
ABC 元素 價值 累計占比位 =
VAR Items = CALCULATETABLE( DISTINCT( '次元_ABC元素'[元素名稱] ) , ALLSELECTED( '次元_ABC元素'[元素名稱] ) )
VAR Total = CALCULATE( [ABC 元素 價值] , Items )
VAR CurrentItemValue = [ABC 元素 價值]
VAR CumulativeValue = CALCULATE(
[ABC 元素 價值] , FILTER( Items , [ABC 元素 價值] >= CurrentItemValue )
)
RETURN DIVIDE( CumulativeValue , Total )
ABC 元素 價值 累計占比位 按分類 =
IF( SELECTEDVALUE( '次元_ABC分類'[ABC分類名稱] ) = [ABC 元素 所屬分類] , [ABC 元素 價值 累計占比位] , BLANK() )
ABC 參數 A = [參數 ABC A 值] / ( [參數 ABC A 值] + [參數 ABC B 值] + [參數 ABC C 值] )
ABC 參數 B = ( [參數 ABC A 值] + [參數 ABC B 值] ) / ( [參數 ABC A 值] + [參數 ABC B 值] + [參數 ABC C 值] )
ABC 參數 占比 =
SWITCH( TRUE() ,
SELECTEDVALUE( '次元_ABC分類'[ABC分類名稱] ) = "A" , [參數 ABC A 值] / ( [參數 ABC A 值] + [參數 ABC B 值] + [參數 ABC C 值] ) ,
SELECTEDVALUE( '次元_ABC分類'[ABC分類名稱] ) = "B" , [參數 ABC B 值] / ( [參數 ABC A 值] + [參數 ABC B 值] + [參數 ABC C 值] ) ,
SELECTEDVALUE( '次元_ABC分類'[ABC分類名稱] ) = "C" , [參數 ABC C 值] / ( [參數 ABC A 值] + [參數 ABC B 值] + [參數 ABC C 值] ) ,
BLANK()
)
ABC 元素 所屬分類 =
VAR CurrentItemCumulativePrecent = [ABC 元素 價值 累計占比位]
RETURN SWITCH( TRUE() ,
CurrentItemCumulativePrecent >= [ABC 參數 B] , "C" ,
CurrentItemCumulativePrecent >= [ABC 參數 A] , "B" ,
"A"
)
ABC 類别 價值 =
VAR CurrentABCCategory = SELECTEDVALUE( '次元_ABC分類'[ABC分類名稱] )
VAR Items = CALCULATETABLE( DISTINCT( '次元_ABC元素'[元素名稱] ) , ALLSELECTED( '次元_ABC元素'[元素名稱] ) )
RETURN CALCULATE( [ABC 元素 價值] , FILTER( Items , [ABC 元素 所屬分類] = CurrentABCCategory ) )
ABC 類别 價值 占比 = DIVIDE( [ABC 類别 價值] , CALCULATE( [ABC 元素 價值] , ALLSELECTED( '次元_ABC元素'[元素名稱] ) ) )
三、制作前端可視化報告
1、分析名額切片器:直接勾選次元_ABC名額分類中的名額名稱即可,切片器樣式選擇下拉
2、動态設定ABC參數的相對大小切片器:直接分别勾選參數ABC A、參數ABC B或者參數ABC C。切片器樣式上開啟滑塊
3、分析次元切片器:直接勾選次元_ABC元素中的元素類型,切片器樣式選擇下拉
4、元素名稱切片器:直接勾選次元_ABC元素中的元素名稱,切片器樣式選擇清單
5、ABC分類總價值占比:選擇條形圖,勾選次元_ABC分類中的ABC分類名稱
6、全動态ABC分析是本文核心的展現區域,它主要通過折線和柱狀圖來實作的效果。
四、總結
本文中制作商品動态銷售ABC分析法的關鍵就是在于滾動計算要分析的名額,也可以靈活的使用要分析的次元資訊。當然本文中還缺少了時間次元的切片設定,大家可以根據實際的情況進行加上時間切片器即可。文中的小黎子并沒有非常仔細的去描述細節,對于學習的新手來說可能比較複雜一點。當然大家在制作過程中遇到任何問題歡迎聯系小黎子,我們一起成長。該項目使用的用友時空的資料源,涉及使用者資訊不友善分享。大家如果手上沒有資料源可以通過回複客戶分析報告擷取示例資料源練手。最終我們實作的效果如下: