목표 : SCM Process 별 모니터링용 Power BI 대시보드 만들기
- 구매 데이터 : Vendor별 실적 모니터링
- 재고 데이터 : 기초재고와 기말재고 Gap 모니터링
- 고객 판매 데이터 : 날짜, 요일별 판매 트렌드 모니터링
SCM 이란? (Supply Chain Management)
- 공급망 관리
생산자, 공급자, 고객에 이르는 물류의 흐름을 하나의 가치사슬 관점에서 파악하고
공급망의 구성요소들 간에 이루어지는 전체 프로세스 최적화를 달성 하고자 하는 경영 혁신 기법
우리가 현재 가지고 있는 csv파일
구매 관련 데이터
재고 관련 데이터
고객판매 관련 데이타
csv파일 가져오기
데이터끼리 컬럼타입과 컬럼이름이 동일할 경우 Power BI에서 자동으로 key로 인식해 연결하는 경우가 있음
이를 방지하고 싶다면 설정을 바꿔주면 됨
파일 -> 옵션 및 설정 -> 데이터 설정
Invoice Purchases에는 PONumber의 값이 고유한 개수로 들어있고
Purchase는 동일하게 PONumber가 들어있지만 중복되어 들어가 있다
이를 봤을 때 Invoice Purchases 와 Purchase는 1대 다로 연결 가능
판매자별 PO개수, 총 매출, 총 운임비, 총 상품개수, 평균 가격을 확인할 테이블 생성
VendorNumber의 경우 숫자계산될 일이 없으니 텍스트로 변경해주는 편이 편함
Vendorname으로 만든 슬라이이서 생성
옵션 -> 드롭다운 / 선택 -> 모두선택 으로 다중선택이 가능하도록 설정
추가적으로 검색옵션을 추가해서 검색을 통해 찾을 수 있게 할 수 있음
점3개 클릭 -> 검색
Vendor Count
V1_Vendor Count = DISTINCTCOUNT(InvoicePurchases[VendorName])
PO Count
V2_PO Count = DISTINCTCOUNT(InvoicePurchases[PONumber])
Brand Count
V3_Brand Count = DISTINCTCOUNT(InvoicePurchases[Brand])
AVG Qty per PO (총수량 / PO Count)
V4_AVG Qty per PO = DIVIDE(sum(InvoicePurchases[Quantity]),[V2_PO Count])
AVG Amount per PO (총 Amount / PO Count)
V5_Amount per PO = DIVIDE(sum(InvoicePurchases[Dollars]),[V2_PO Count])
AVG Freight per PO (총 Freight / PO Count)
V5_Freight per PO = DIVIDE(sum(InvoicePurchases[Freight]),[V2_PO Count])
카드(신규) 이용해서 주요지표 표시하기
판매액 기준 Top3 판매자 이름 표시하기
(Top N 필터 사용)
판매자 이름, 총판매액(Dollars의 합), PO개수(PO Number 개수) 를 이용해 여러행카드 생성
판매자 이름이 필터링되서 나오게 보고싶은것이므로 필터를 Vendorname에 걸어준다
판매액이 필터의 기준이 됨으로 값에는 총판매액(합계 Dollars개)
Purchaseㄴ 테이블에는 Invooice Purchases에는 없는 RecievingDate컬럼이 존재
PO Date : Price of Order 날짜
RecivingDate : (정확하지 않음) 주문 받은 날짜?
InvoiceDate : 송장생성날짜
PayDate : 결제날짜
각 단계의 날짜들 순서별로 걸리는 날을 계산해서 보여주는 테이블을 만들어보자
DateDiff Dax함수 사용 DATEDIFF(<Date1>, <Date2>, <Interval>)
( Interval - SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, QUARTER, YEAR )
일수로 차이를 구해 새열로 추가해준다
PO_RCV_datediff = DATEDIFF(Purchases[PODate],Purchases[ReceivingDate],DAY)
RCV_Invoice_datediff = DATEDIFF(Purchases[ReceivingDate],Purchases[InvoiceDate],DAY)
Invoice_Pay_datediff = DATEDIFF(Purchases[InvoiceDate],Purchases[PayDate],DAY)
PO_Pay_datediff = DATEDIFF(Purchases[PODate],Purchases[PayDate],DAY)
[대시보드 결과]
해서 두개의 쿼리를 합칠 것
두개의 쿼리를 합칠 때는 반드시 컬럼의 개수와 이름이 완벽히 동일해야 함
그러므로 StartDate와 EndDate의 컬럼명을 둘다 Date로 변경해준다
새로 만들어준 Inventoy 테이블을 확인해보니 46번 가게가 Begin에는 도시이름이있으나 End에는 없음
도시이름이 누락된 것으로 보인다
적용 및 닫기 선택
결측치가 잘 보강되었다
Store Count
Inv1_Store Count = DISTINCTCOUNT(Inventory[Store])
Inventory Quantity
Inv2_Inventory Quantity = SUM(Inventory[Quantity])
Inventory Amount
Inv3_Amount = SUM(Inventory[Amount])
(Amount = Inventory[Quantity] * Inventory[Price]
계산식으로 매출열을 먼저 만들었음)
Waterfall Chart 란?
- 비교하고자 하는 Column 이 어떠한 요인으로 Gap이 나게 되는지 표현하는 데이터 시각화
- X 축에는 Gap의 요인이 되는 항목 (시계열, 카테고리 등)
- 순차적인 양수 또는 음수 Gap 의 누적 효과를 이해하는데 효과적
- Waterfall Chart 또는 Bridge Chart 라고 불리움
Bridge의 시작점과 종료점이 Begin_Inv와 End_Inv로 나타날 것이므로 범주에 필드를 넣는다
재고량의 차이를 볼것이기 때문에 Y축에 Inventory Quantity
그안에서 city가 차이의 요인이 될 것이므로 분석결과에 City를 넣으면 된다
만약 재고량의 차이만 보고싶은 것이 아니라 매출액의 차이 또는 가게수의 차이까지 보고 싶다면?
매개변수를 설정해서 선택하는 값에 따라 그래프의 y축값이 변동하도록 설정해보자
상단에 모델링 -> 새 매개변수 -> 필드
[대시보드 결과]