Appearance
🧠 Case Study — Power BI / Tableau: BI Dashboard trong thực tế
Trong buổi học này, chúng ta đã nắm được Power BI / Tableau, data model, DAX, và dashboard design. Bây giờ hãy xem các kỹ năng đó được áp dụng thực tế như thế nào — từ supply chain dashboard của Coca-Cola, đến market intelligence của Unilever, và cuối cùng là hệ thống BI cho 500+ sales tại FPT.
Case Study 1: Coca-Cola — Power BI Dashboard cho Supply Chain & Sales
Bối cảnh
Coca-Cola Bottling Company United (CCBCU) là một trong những công ty đóng chai lớn nhất của hệ thống Coca-Cola tại Mỹ, phân phối hơn 300 sản phẩm tại 6 bang miền Đông Nam. Mỗi ngày, CCBCU xử lý hơn 1 triệu case đồ uống — từ kho hàng đến 60,000+ điểm bán lẻ.
Trước năm 2020, team operations dùng hỗn hợp Excel spreadsheets + báo cáo SAP + email để theo dõi supply chain. Mỗi sáng, quản lý khu vực nhận email PDF báo cáo tồn kho — data đã cũ 12 giờ. Khi cần drill-down theo SKU hoặc route, họ phải gọi nhờ IT team chạy query SAP — mất 2-4 giờ.
Vấn đề
Coca-Cola đối mặt với 4 thách thức cốt lõi:
Data silos — Dữ liệu sales nằm trong SAP, marketing trong Salesforce, delivery tracking trong hệ thống riêng. Không có single source of truth. Quản lý khu vực đến cuộc họp thứ Hai với trung bình 3 phiên bản số liệu khác nhau.
Report lag — Báo cáo PDF gửi email mỗi sáng nhưng data đã cũ 12-24 giờ. Trong ngành FMCG, 1 ngày out-of-stock = mất doanh thu không thể lấy lại (consumer chuyển sang đối thủ).
No interactivity — Khi VP Sales hỏi "tồn kho Coke Zero tại Georgia tuần này?", team phải chạy query SAP, export Excel, format, rồi gửi email. Trung bình 4 giờ cho 1 ad-hoc request.
Scalability — 60,000+ điểm bán, 300+ SKU, 6 bang. Excel không xử lý nổi volume này. File Excel báo cáo tuần nặng 85MB, crash thường xuyên.
Giải pháp — Power BI Enterprise Dashboard
Coca-Cola triển khai Power BI Premium kết hợp với Azure Data Factory pipeline:
Kiến trúc hệ thống:
mermaid
flowchart LR
A["📦 SAP ERP<br/>Sales & Inventory"] --> D["🔧 Azure Data Factory<br/>ETL Pipeline"]
B["📊 Salesforce<br/>Marketing Data"] --> D
C["🚚 Route System<br/>Delivery Tracking"] --> D
D --> E["🏢 Azure SQL Data Warehouse<br/>Centralized"]
E --> F["📱 Power BI Premium<br/>Interactive Dashboards"]
F --> G["👥 200+ Users<br/>VP, Managers, Reps"]Data Model — Star Schema:
| Table | Type | Rows | Key Columns |
|---|---|---|---|
FACT_SALES | Fact | 50M+/year | order_id, product_id, store_id, date, quantity, revenue |
FACT_INVENTORY | Fact | 18M+/year | warehouse_id, product_id, date, stock_level, reorder_point |
DIM_PRODUCT | Dimension | 320 | product_id, brand, category, package_size |
DIM_STORE | Dimension | 60,000+ | store_id, chain, city, state, route_id |
DIM_DATE | Dimension | 3,650 | date_key, year, quarter, month, week, day_type |
DIM_ROUTE | Dimension | 800 | route_id, driver, region, zone |
DAX Measures được triển khai:
dax
// Out-of-Stock Rate — tỷ lệ hết hàng theo SKU
OOS Rate =
DIVIDE(
COUNTROWS(FILTER(FACT_INVENTORY, FACT_INVENTORY[stock_level] = 0)),
COUNTROWS(FACT_INVENTORY),
0
)
// Days of Supply — còn bao nhiêu ngày hàng trong kho
Days of Supply =
DIVIDE(
[Current Stock],
[Avg Daily Sales],
0
)
// Revenue vs Same Period Last Year
Revenue YoY Growth =
VAR RevenuePY = CALCULATE([Total Revenue], SAMEPERIODLASTYEAR(DIM_DATE[date_key]))
RETURN DIVIDE([Total Revenue] - RevenuePY, RevenuePY, 0)Dashboard Pages:
- Executive Summary — 4 KPI cards (Revenue, Volume, OOS Rate, Market Share) + revenue trend + regional heatmap
- Supply Chain — Inventory levels by warehouse, days of supply, reorder alerts, delivery compliance
- Sales Performance — Revenue by brand/store/route, comparison YoY, target achievement
- Route Analytics — Map view, delivery time, store visit frequency, cold drink equipment tracking
Kết quả đo lường
| Metric | Trước (Excel/SAP) | Sau (Power BI) | Cải thiện |
|---|---|---|---|
| Report delivery time | 12-24 giờ (email PDF) | Real-time (< 15 phút refresh) | 96% nhanh hơn |
| Ad-hoc request turnaround | 4 giờ (IT chạy query) | 0 (user tự filter/drill-down) | 100% tự phục vụ |
| Out-of-Stock rate | 8.5% → không phát hiện kịp | 3.2% → alert real-time | Giảm 62% |
| Revenue loss from OOS | ~$12M/year | ~$4.5M/year | Tiết kiệm $7.5M/year |
| Report preparation time | 15 giờ/tuần (team 3 người) | 2 giờ/tuần (maintenance) | Giảm 87% |
| Users accessing data | 15 (IT + senior managers) | 200+ (all levels) | Tăng 13x |
| Data freshness | T+1 (data cũ 1 ngày) | Near real-time (15 min) | Real-time |
📌 Key Takeaway từ Coca-Cola
- Star schema là nền tảng — 5 dimension tables cho 60,000 stores + 300 SKUs = query nhanh
- DAX measures cho supply chain — OOS Rate, Days of Supply, reorder alerts = proactive thay vì reactive
- Self-service BI — 200 users tự filter/drill-down thay vì 15 người chờ IT = democratize data
- ROI rõ ràng — tiết kiệm $7.5M/year từ giảm OOS + 13 giờ/tuần từ automation
Case Study 2: Unilever — Tableau cho Market Intelligence
Bối cảnh
Unilever là tập đoàn FMCG top 3 thế giới, sở hữu 400+ thương hiệu (Dove, OMO, Knorr, Lipton...) bán tại 190 quốc gia. Riêng khu vực Đông Nam Á, Unilever có doanh thu ~$7 tỷ/năm với hàng nghìn SKU.
Team Market Intelligence (MI) tại Unilever Southeast Asia chịu trách nhiệm theo dõi market share, competitor pricing, consumer sentiment, và distribution coverage trên 6 quốc gia. Trước khi chuyển sang Tableau, MI team dùng hỗn hợp Nielsen reports (PDF) + Excel models + PowerPoint slides — quy trình mà team gọi là "the monthly marathon."
Vấn đề
Monthly marathon — Mỗi tháng, MI team dành 80 giờ (2 full-time analysts × 2 tuần) để: nhận data Nielsen → clean trong Excel → build charts → paste vào PowerPoint → gửi cho 12 country teams. Khi 1 country team phát hiện sai số, phải redo từ đầu.
Cross-country comparison khó — Mỗi quốc gia có format data khác nhau (Nielsen Indonesia ≠ Nielsen Thailand). So sánh market share OMO tại VN vs Thái Lan phải merge manual — dễ sai.
Competitor response chậm — Khi đối thủ P&G tung promotion, Unilever cần phản ứng trong 48 giờ. Nhưng report monthly → phát hiện chậm 2-4 tuần.
Attribution gap — Marketing team chi $50M/năm cho quảng cáo ĐNA nhưng không thể liên kết spending → market share change ở granularity week-by-week.
Giải pháp — Tableau + Snowflake Data Platform
Unilever triển khai Tableau Enterprise trên nền tảng Snowflake:
Data Sources được tích hợp:
| Source | Data | Frequency |
|---|---|---|
| Nielsen Retail Audit | Market share, distribution, pricing | Monthly |
| Internal Sales (SAP) | Sell-in by SKU/channel/country | Daily |
| Social Listening (Brandwatch) | Consumer sentiment, mentions | Hourly |
| Digital Marketing (Google/Meta) | Ad spend, impressions, clicks | Daily |
| E-commerce (Shopee/Lazada API) | Online sales, reviews, ratings | Daily |
Tableau Dashboards được xây:
Market Pulse — Market share trend (12 tháng rolling) cho top 10 categories × 6 countries. LOD expression cho weighted share calculation:
// Tableau LOD: Market share weighted by category size {FIXED [Country], [Category], [Month]: SUM([Unilever Revenue]) / SUM([Category Revenue])}Competitor War Room — Real-time competitor pricing & promotion tracking. Alert khi đối thủ giảm giá > 10%.
Brand Health Tracker — Sentiment score from social listening + NPS survey data. Scatter plot: sentiment vs market share by brand.
Marketing ROI — Ad spend vs market share lift, by channel (TV, digital, in-store). Attribution model visualization.
Distribution Coverage — Map view: % stores carrying each SKU, by province. Highlight "white space" opportunities.
Dashboard Design Principles Unilever áp dụng:
| Nguyên tắc | Implementation |
|---|---|
| One dashboard = One decision | Mỗi dashboard trả lời 1 strategic question |
| Country toggle | 1 dashboard, filter by country — không build riêng cho mỗi nước |
| Benchmark always visible | Luôn hiển thị vs Previous Year, vs Plan, vs Competitor |
| Mobile-first | VP Marketing xem trên iPad trong cuộc họp |
| Drill path rõ ràng | Region → Country → Category → Brand → SKU |
Kết quả đo lường
| Metric | Trước (Excel/PPT) | Sau (Tableau) | Cải thiện |
|---|---|---|---|
| Monthly report time | 80 giờ (2 analysts × 2 tuần) | 8 giờ (automated + review) | Giảm 90% |
| Competitor response time | 2-4 tuần (monthly cycle) | 48 giờ (daily data + alerts) | Nhanh hơn 10-20x |
| Cross-country comparison | 2 ngày (merge manual) | Instant (1 filter click) | Real-time |
| Marketing ROI visibility | Quarterly estimate | Weekly actuals | 4x frequency |
| Data consumers | 5 MI analysts | 150+ marketers across 6 countries | 30x reach |
| Market share gain (Year 1) | Baseline | +1.2 pp average across categories | Measurable impact |
| Cost saving | $0 | ~$800K/year (reduced manual work + faster decisions) | $800K/year |
📌 Key Takeaway từ Unilever
- Tableau cho cross-country analysis — 1 dashboard, 6 countries, filter by click = consistency
- LOD Expressions cho weighted calculations — market share weighted by category size = accurate benchmark
- Daily data vs monthly report — competitor response time từ tuần xuống giờ = competitive advantage
- Mobile-first design — VP Marketing xem trên iPad trong meeting = higher adoption rate
- Democratize data — từ 5 MI analysts → 150 marketers tự truy cập = data-driven culture
Case Study 3: FPT — Power BI cho Sales Team 500+ người
Bối cảnh
FPT Corporation là tập đoàn công nghệ lớn nhất Việt Nam, doanh thu ~48,000 tỷ VND (2024), với 3 mảng chính: FPT Software (outsourcing), FPT Telecom (viễn thông), và FPT IS (giải pháp CNTT). Riêng mảng FPT IS có đội ngũ sales 500+ người phụ trách bán giải pháp CNTT cho doanh nghiệp — từ ERP, Cloud, đến AI solutions.
Trước 2022, sales team FPT IS dùng 3 hệ thống riêng biệt:
- Salesforce CRM — quản lý leads, opportunities, pipeline
- SAP — quản lý hợp đồng, doanh thu, thu tiền
- Excel — forecast hàng quý (mỗi sales manager tự làm)
Vấn đề
3 nguồn dữ liệu, 3 con số khác nhau — VP Sales hỏi "pipeline Q4 là bao nhiêu?", nhận 3 câu trả lời: Salesforce nói 850 tỷ, SAP nói 720 tỷ, Excel forecast nói 780 tỷ. Nguyên nhân: definition khác nhau, timing khác nhau, manual input sai.
Forecast accuracy thấp — Mỗi sales manager tự forecast trong Excel riêng. Không có chuẩn chung (weighted pipeline, probability stage). FY2021, forecast accuracy chỉ 55% — ban lãnh đạo không tin forecast để ra quyết định.
Performance visibility kém — Với 500+ sales, VP Sales không thể theo dõi performance cá nhân bằng Excel. Monthly review meeting: mỗi manager present 15 phút, 30 managers = 7.5 giờ họp mỗi tháng.
Ramp-up slow — Sales mới mất 3-6 tháng để hiểu "số liệu ở đâu." Không có dashboard thống nhất để onboard.
Giải pháp — Power BI + Dataverse Integration
FPT IS triển khai Power BI Premium embedded trong Microsoft Teams:
Kiến trúc:
mermaid
flowchart TD
A["Salesforce CRM<br/>Pipeline, Leads"] --> D["Microsoft Dataverse<br/>Unified Data Model"]
B["SAP ERP<br/>Revenue, Contracts"] --> D
C["HRMS<br/>Sales Headcount, KPI"] --> D
D --> E["Power BI Premium<br/>Embedded in Teams"]
E --> F["📱 Sales Rep<br/>My Performance"]
E --> G["👔 Sales Manager<br/>Team Dashboard"]
E --> H["🏢 VP Sales<br/>Executive Dashboard"]Role-based Dashboards (Row-Level Security):
| Role | Dashboard | Thấy data | Key Metrics |
|---|---|---|---|
| Sales Rep | My Performance | Chỉ của mình | Pipeline, quota attainment, activities, forecast |
| Sales Manager | Team Dashboard | Team 15-20 người | Team pipeline, rep comparison, deal stages, coaching needs |
| VP Sales | Executive | Toàn bộ 500+ | Overall pipeline, forecast vs actual, win rate, market segment |
| CFO | Finance View | Revenue + AR | Recognized revenue, cash collection, DSO |
DAX Measures cho Sales Analytics:
dax
// Weighted Pipeline — xác suất theo stage
Weighted Pipeline =
SUMX(
FACT_OPPORTUNITIES,
FACT_OPPORTUNITIES[deal_value] * FACT_OPPORTUNITIES[stage_probability]
)
// Quota Attainment %
Quota Attainment =
DIVIDE(
[Closed Won Revenue],
[Quarterly Quota],
0
)
// Win Rate
Win Rate =
DIVIDE(
COUNTROWS(FILTER(FACT_OPPORTUNITIES, FACT_OPPORTUNITIES[status] = "Won")),
COUNTROWS(FILTER(FACT_OPPORTUNITIES,
FACT_OPPORTUNITIES[status] IN {"Won", "Lost"})),
0
)
// Sales Velocity (days) — trung bình ngày close deal
Sales Velocity =
AVERAGEX(
FILTER(FACT_OPPORTUNITIES, FACT_OPPORTUNITIES[status] = "Won"),
DATEDIFF(FACT_OPPORTUNITIES[created_date],
FACT_OPPORTUNITIES[close_date], DAY)
)
// Forecast Accuracy
Forecast Accuracy =
1 - ABS(DIVIDE([Actual Revenue] - [Forecasted Revenue],
[Forecasted Revenue], 0))Row-Level Security (RLS) implementation:
dax
// RLS Rule — Sales Rep chỉ thấy data của mình
[owner_email] = USERPRINCIPALNAME()
// RLS Rule — Manager thấy data team
[manager_email] = USERPRINCIPALNAME()
|| [owner_email] = USERPRINCIPALNAME()Kết quả đo lường
| Metric | Trước (2021) | Sau (2023) | Cải thiện |
|---|---|---|---|
| "1 source of truth" | 3 hệ thống, 3 con số | 1 dashboard, 1 con số | Single source |
| Forecast accuracy | 55% | 82% | +27 percentage points |
| Monthly review meeting | 7.5 giờ (30 managers × 15 min) | 2 giờ (dashboard review) | Giảm 73% |
| Ad-hoc report time | 4-8 giờ (IT chạy query) | 0 (tự phục vụ) | 100% self-service |
| Sales rep onboarding | 3-6 tháng hiểu "số ở đâu" | 1 tuần (Power BI training) | Giảm 80% |
| Pipeline visibility | Monthly snapshot | Real-time (refresh 4x/day) | Real-time |
| Dashboard adoption | 0 (không có dashboard) | 92% sales login weekly | 92% adoption |
| Win rate | 22% | 28% | +6 pp (insight-driven selling) |
Bài học từ FPT
⚠️ Change Management quan trọng hơn technology
FPT chia sẻ: 70% effort của dự án BI là change management, chỉ 30% là technical.
Challenges:
- Sales không muốn minh bạch — một số sales resist vì dashboard expose performance kém
- Data entry discipline — garbage in, garbage out. Phải train 500 người nhập Salesforce đúng cách
- Manager adoption — nếu manager không dùng dashboard trong 1-on-1 meeting, team cũng không dùng
Solutions:
- Gamification — leaderboard on dashboard, monthly award cho top performers
- Mandatory data entry — Salesforce validation rules, không submit deal nếu thiếu trường bắt buộc
- Manager training first — train manager trước, bắt buộc dùng dashboard trong review meeting
📊 So sánh 3 Case Studies
| Tiêu chí | Coca-Cola | Unilever | FPT |
|---|---|---|---|
| BI Tool | Power BI Premium | Tableau Enterprise | Power BI Premium |
| Users | 200+ | 150+ | 500+ |
| Data sources | SAP + Salesforce + Route | Nielsen + SAP + Social + E-commerce | Salesforce + SAP + HRMS |
| Key use case | Supply chain + Sales | Market intelligence | Sales analytics |
| Data model | Star schema (SQL DW) | Snowflake | Microsoft Dataverse |
| ROI | $7.5M/year saving | $800K/year + 1.2pp share | 27pp forecast accuracy |
| Key success factor | Self-service BI | Cross-country consistency | Change management |
| Time to value | 6 months | 9 months | 12 months |
💡 3 bài học xuyên suốt
- Data model trước, dashboard sau — Cả 3 công ty dành 60-70% effort cho data integration + star schema. Dashboard đẹp mà data sai = vô nghĩa.
- Self-service BI = democratize data — Từ 5-15 power users → 150-500 users tự truy cập. Data không còn bị "gatekeeper" bởi IT team.
- Adoption > Features — FPT dạy: công nghệ tốt nhất mà không ai dùng = thất bại. Change management, training, gamification quyết định thành bại.
📚 Tài liệu tham khảo
| Tài liệu | Link | Ghi chú |
|---|---|---|
| Coca-Cola Power BI Case Study — Microsoft | customers.microsoft.com | Case study chính thức |
| Unilever Data Strategy | unilever.com/digital | Tổng quan chiến lược data |
| Tableau Enterprise Deployment Guide | tableau.com | Hướng dẫn triển khai enterprise |
| FPT Annual Report 2024 | fpt.com.vn | Số liệu doanh thu, nhân sự |
| Power BI Premium Documentation | learn.microsoft.com | Kiến trúc Premium |
| SQLBI — DAX Patterns for Sales | daxpatterns.com | Pipeline, forecast patterns |