Asset allocation visualizations Power BI là bước biến data model thành insight trực quan.
Số liệu trong bảng không nói lên được tỷ trọng danh mục. Nhưng một Donut Chart đúng chuẩn thì có thể.
Bài viết hướng dẫn xây dựng 6 loại visualization phổ biến nhất cho portfolio analysis.
Tất cả đều kết nối trực tiếp với DAX measures từ bài trước. Tham khảo thêm tại Microsoft Power BI Visualization Types.
📌 Đây là bài số 6 trong series Power BI Financial Analytics tại MCNA:
- Bài 3: Cleaning and Preparing Investment Data
- Bài 4: Designing a Financial Data Model in Power BI
- Bài 5: Analyzing Portfolio Performance in Power BI
- Bài 6: Asset Allocation Visualizations Power BI ← Bạn đang đọc
- Bài 7: Risk Analysis Dashboard — sắp ra mắt
1. Tại Sao Visualization Quan Trọng Trong Portfolio Analysis?
Từ số liệu sang quyết định
Portfolio Manager không đọc bảng số — họ đọc chart.
Một bảng 50 dòng mã chứng khoán không cho thấy gì. Một Treemap cùng dữ liệu đó cho thấy ngay tài sản nào đang chiếm tỷ trọng lớn nhất.
Asset allocation visualizations Power BI là cầu nối giữa data model và insight thực sự.
Chọn đúng chart cho đúng câu hỏi
| Câu hỏi | Chart phù hợp | Lý do |
|---|---|---|
| Tỷ trọng từng asset class là bao nhiêu? | Donut Chart | Thể hiện phần/tổng rõ ràng |
| Tài sản nào chiếm giá trị lớn nhất? | Treemap | So sánh kích thước trực quan |
| Đạt bao nhiêu % mục tiêu phân bổ? | Waffle Chart | Tiến độ dạng grid dễ đọc |
| Yếu tố nào đóng góp vào tổng return? | Waterfall Chart | Phân tích tăng/giảm từng bước |
| Allocation thay đổi thế nào theo thời gian? | Stacked Bar | Xu hướng + cấu trúc song song |
| Risk vs Return của từng tài sản? | Scatter Plot | Hai chiều dữ liệu cùng lúc |
💡 Nguyên tắc: Mỗi chart trả lời một câu hỏi duy nhất. Đừng cố nhét nhiều thông tin vào một visual.
2. Donut Chart — Tỷ Trọng Asset Class
Khi nào dùng Donut Chart?
Donut Chart phù hợp khi cần thể hiện tỷ trọng của 3–6 phần tử.
Quá nhiều phần tử (7+) sẽ khiến chart khó đọc. Lúc đó dùng Treemap thay thế.
Cấu hình Donut Chart trong Power BI
-- Bước 1: Tạo measure Weight cho từng Asset Class
Asset Class Weight % =
DIVIDE(
[Total Market Value],
CALCULATE([Total Market Value], ALL(DimAsset[AssetClass]))
)
-- Bước 2: Cấu hình visual
-- Field: Legend = DimAsset[AssetClass]
-- Field: Values = [Asset Class Weight %]
-- Format: Inner radius = 50% (tạo donut hole)
-- Format: Detail labels = Percent + Category
Màu sắc chuẩn cho Asset Allocation
-- Gán màu cố định theo Asset Class (tránh màu đổi khi filter)
-- Vào Format → Data colors → Conditional formatting → Field value
-- Bảng màu gợi ý:
Equities → #3C9AFF (xanh dương)
Bonds → #64DCB4 (xanh lá nhạt)
Cash → #FFC83D (vàng)
Alt Assets → #C864FF (tím)
Real Estate→ #FF6464 (đỏ cam)
✅ Best practice: Luôn gán màu cố định cho từng asset class. Màu thay đổi khi filter làm người đọc nhầm lẫn.
3. Treemap — Phân Bổ Theo Giá Trị
Treemap thể hiện điều gì?
Treemap dùng diện tích ô để thể hiện giá trị.
Ô càng lớn = tài sản càng chiếm nhiều trong danh mục. Người đọc nhận ra ngay tài sản trọng tâm mà không cần đọc số.
Cấu hình Treemap cho Portfolio
-- Field: Category = DimAsset[AssetCode]
-- Field: Details = DimAsset[AssetClass]
-- Field: Values = [Total Market Value]
-- Drill-down hierarchy:
-- Level 1: Asset Class (Equities, Bonds, Cash...)
-- Level 2: Individual Stock/Bond
-- DAX: Thêm label hiển thị cả tên lẫn %
Asset Label =
DimAsset[AssetCode]
& " | "
& FORMAT([Asset Class Weight %], "0.0%")
Thêm màu theo hiệu suất
-- Tô màu ô theo YTD return (xanh = lãi, đỏ = lỗ)
-- Format → Data colors → Conditional formatting:
Performance Color =
IF([Asset HPR YTD %] >= 0.10, "#00AA66", -- Xanh đậm: lãi tốt
IF([Asset HPR YTD %] >= 0, "#66CC99", -- Xanh nhạt: lãi nhẹ
IF([Asset HPR YTD %] >= -0.05, "#FFAA44", -- Cam: lỗ nhẹ
"#FF4444"))) -- Đỏ: lỗ nặng
4. Waffle Chart — Tỷ Lệ % Trực Quan
Waffle Chart là gì?
Waffle Chart là lưới 10×10 ô. Mỗi ô = 1%.
Đây là cách trực quan nhất để thể hiện mức độ đạt được mục tiêu phân bổ. Người đọc không cần đọc số — nhìn màu là hiểu ngay.
Tạo Waffle Chart bằng SVG trong Power BI
-- Power BI không có Waffle Chart built-in
-- Dùng HTML Content visual (custom visual) hoặc SVG measure
Waffle SVG =
VAR Pct = ROUND([Asset Class Weight %] * 100, 0)
VAR Target = 45 -- Target allocation %
VAR Filled = Pct
VAR Color = IF(ABS(Pct - Target) <= 5, "#3C9AFF", "#FF6464")
RETURN
""
-- Gợi ý: Dùng AppSource visual "Waffle Chart" miễn phí
-- Hoặc Charticulator cho tùy chỉnh cao hơn
💡 Thực tế: Waffle Chart phù hợp nhất cho Executive Summary — nơi cần truyền đạt thông tin nhanh trong 3 giây. Không dùng cho phân tích chi tiết.
5. Waterfall Chart — Attribution Analysis
Waterfall Chart giải thích điều gì?
Waterfall Chart cho thấy từng yếu tố đóng góp vào tổng thay đổi.
Ví dụ: AUM tháng này tăng 2.3% — do Equities +4.1%, Bonds -0.8%, Cash flat, và dòng tiền mới vào +0.5%.
Cấu hình Waterfall Chart cho Portfolio
-- Field: Category = Asset Class hoặc Factor
-- Field: Values = Contribution measure
-- DAX: Đóng góp của từng Asset Class vào tổng return
Asset Class Contribution % =
VAR AssetReturn = [Asset Class HPR %]
VAR AssetWeight = [Asset Class Weight % - Prior Period]
RETURN
AssetReturn * AssetWeight
-- Format: Sentinel value để phân biệt tăng/giảm/tổng
-- Subtotal = Total Portfolio Return
Attribution breakdown chuẩn
-- 4 tầng attribution thường dùng:
-- 1. Allocation Effect: chọn đúng asset class không?
-- 2. Selection Effect: chọn đúng cổ phiếu trong class không?
-- 3. Currency Effect: tỷ giá ảnh hưởng thế nào?
-- 4. Interaction Effect: kết hợp allocation + selection
Allocation Effect =
([Asset Class Weight %] - [Benchmark Weight %])
* ([Benchmark Class Return %] - [Total Benchmark Return %])
⚠️ Lưu ý: Waterfall Chart trong Power BI mặc định không hỗ trợ negative waterfall đẹp. Cần cấu hình thêm Breakdown field để phân biệt tăng/giảm đúng màu.
6. Stacked Bar — Allocation Theo Thời Gian
Khi nào dùng Stacked Bar?
Stacked Bar kết hợp hai thông tin cùng lúc: tổng giá trị và cơ cấu bên trong.
Dùng khi cần theo dõi allocation drift — tỷ trọng danh mục trôi dần khỏi target theo thời gian.
100% Stacked Bar vs Regular Stacked Bar
-- 100% Stacked Bar: thấy được cơ cấu % thay đổi theo thời gian
-- Regular Stacked Bar: thấy được cả tổng AUM lẫn cơ cấu
-- Khi nào dùng 100%:
-- → Muốn so sánh tỷ trọng giữa các tháng
-- → AUM thay đổi nhiều làm distort biểu đồ thường
-- Field setup:
-- X-axis: DimDate[Month]
-- Y-axis: [Total Market Value] hoặc [Asset Class Weight %]
-- Legend: DimAsset[AssetClass]
-- Small multiples: DimClient[Segment]
Thêm Target Line vào Stacked Bar
-- Thêm constant line để thể hiện target allocation
-- Analytics pane → Constant line → Value = target %
-- Hoặc dùng DAX measure:
Target Line Equities =
0.45 -- 45% target
-- Overlay lên chart dưới dạng Line chart
-- Dùng combo chart: Stacked Bar + Line
7. Scatter Plot — Risk vs Return
Scatter Plot thể hiện gì trong portfolio?
Scatter Plot đặt mỗi tài sản lên một điểm. Trục X là risk (volatility), trục Y là return.
Một cái nhìn cho thấy ngay tài sản nào có return tốt với risk thấp — và tài sản nào đang “đắt” về risk.
Cấu hình Scatter Plot chuẩn
-- Field setup:
-- X-axis: [Asset Volatility %] -- Standard deviation return
-- Y-axis: [Asset HPR YTD %] -- YTD return
-- Size: [Total Market Value] -- Bong bóng lớn = tỷ trọng cao
-- Legend: DimAsset[AssetClass] -- Màu theo asset class
-- Details: DimAsset[AssetCode] -- Mỗi điểm = 1 mã CK
-- DAX: Volatility (30-day rolling std dev)
Asset Volatility % =
VAR DailyReturns =
CALCULATETABLE(
ADDCOLUMNS(
DATESINPERIOD(DimDate[Date], LASTDATE(DimDate[Date]), -30, DAY),
"DailyReturn", [Daily Asset Return %]
)
)
RETURN
STDEVX.P(DailyReturns, [DailyReturn])
Thêm quadrant lines để phân vùng
-- Chia scatter plot thành 4 vùng:
-- Góc trên trái: Low Risk, High Return → IDEAL
-- Góc trên phải: High Risk, High Return → Speculative
-- Góc dưới trái: Low Risk, Low Return → Defensive
-- Góc dưới phải: High Risk, Low Return → AVOID
-- Thêm 2 constant lines:
-- X: Benchmark volatility (vertical line)
-- Y: Benchmark return (horizontal line)
-- Analytics pane → Constant line
8. DAX Measures Cho Visualization
Measures hỗ trợ tất cả các chart
-- Weight % (dùng cho Donut, Treemap, Stacked Bar)
Asset Weight % =
DIVIDE(
[Total Market Value],
CALCULATE([Total Market Value], ALL(DimAsset))
)
-- Weight vs Target (dùng cho Waffle, Gauge)
Allocation Drift % =
[Asset Class Weight %] - [Target Weight %]
Drift Status =
IF(ABS([Allocation Drift %]) <= 0.05, "✅ On Target",
IF([Allocation Drift %] > 0, "⬆️ Overweight",
"⬇️ Underweight"))
-- Contribution to Return (dùng cho Waterfall)
Return Contribution % =
[Asset Weight % Prior] * [Asset HPR %]
-- Running Total (dùng cho Stacked Area)
Cumulative AUM =
CALCULATE(
[Total Market Value],
FILTER(
ALL(DimDate[Date]),
DimDate[Date] <= MAX(DimDate[Date])
)
)
Dynamic title cho chart
-- Title tự động cập nhật theo filter
Chart Title =
"Portfolio Allocation — "
& SELECTEDVALUE(DimClient[Segment], "All Segments")
& " | "
& FORMAT(MAX(DimDate[Date]), "MMM YYYY")
-- Gán vào: Format → Title → fx → Field value
9. Best Practices Cho Financial Dashboard
Nguyên tắc thiết kế
- Màu nhất quán: Mỗi asset class luôn một màu cố định trong toàn bộ dashboard.
- Tối đa 3 chart mỗi trang: Nhiều hơn thì người đọc không biết nhìn vào đâu trước.
- Chart title mô tả insight: Không dùng "Asset Allocation Chart". Dùng "Equities đang overweight 8% so với target".
- Tooltip chi tiết: Hover vào điểm dữ liệu phải cho thấy đủ context để ra quyết định.
- Mobile-first layout: Portfolio Manager đọc báo cáo trên điện thoại. Test layout 375px trước.
Checklist trước khi publish dashboard
| Hạng mục | Kiểm tra |
|---|---|
| Màu sắc | Nhất quán, contrast đủ cho người mù màu |
| Label | Không bị cắt, không overlap |
| Slicer | Hoạt động đúng với mọi visual trên trang |
| Tooltip | Hiển thị đủ thông tin context |
| Mobile | Đã test trên điện thoại |
| Performance | Load dưới 3 giây với filter mặc định |
| Drill-through | Hoạt động từ summary sang detail |
10. Kết Luận
Visualization là ngôn ngữ của Portfolio Manager
Asset allocation visualizations Power BI không phải trang trí.
Chúng là công cụ ra quyết định. Chart đúng giúp Portfolio Manager nhận ra vấn đề trong 3 giây.
Chart sai khiến họ mất 30 phút vẫn không ra quyết định được.
Ba điều cốt lõi cần nhớ
- Chọn chart theo câu hỏi, không theo sở thích. Donut cho tỷ trọng. Scatter cho risk/return. Waterfall cho attribution.
- Màu sắc nhất quán xuyên suốt dashboard. Người đọc không nên phải nhìn legend mỗi lần chuyển trang.
- Mỗi chart title phải là một insight. Không phải tên chart.
Tài liệu tham khảo
- 📘 Power BI Visualization Types — Microsoft Docs
- 📘 Conditional Formatting in Power BI
- 📘 Waterfall Charts in Power BI — Microsoft Docs
- 📘 DAX Studio — tối ưu measures miễn phí
Bài viết liên quan tại MCNA
- 👉 Analyzing Portfolio Performance in Power BI
- 👉 Designing a Financial Data Model in Power BI
- 👉 Connecting Financial Data Sources in Power BI
- 👉 Khóa học Power BI & Business Intelligence tại MCNA
- 👉 Blog Data Analytics MCNA
Về tác giả
Triều Đặng — Middle Data Analyst tại MCNA Technology School. Chuyên về financial data analytics, Power BI và automated reporting trong Wealth Management.
MCNA Technology School là đơn vị tiên phong đào tạo AI, Big Data, Business Intelligence, Power BI, Python, SQL tại Việt Nam.
Đối tác đào tạo của 300+ doanh nghiệp: Viettel Global, Masan Group, Techcombank, VPBank, Daikin.
- 🌐 mcna.vn
- 📘 facebook.com/mcnatechnologyschool
- ▶️ youtube.com/@mcna.technology.school
- 💼 linkedin.com/company/mcna-vn
- 📞 0939.866.825 (Mr. Minh Khang)
- 📍 30 Trung Liệt, Đống Đa, Hà Nội
- 📍 Liền kề 44B, TT2, Văn Quán, Hà Đông, Hà Nội
- 📍 The BIB Space, 50B Phan Tây Hồ, Cầu Kiệu, TPHCM

