Building Asset Allocation Visualizations in Power BI for Investment Insights

To Share 2026 - Content Fb + Web (4)

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:


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
""
& [SVG Grid Cells]  -- Loop 100 cells, fill theo Pct
& ""

-- 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ớ

  1. 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.
  2. 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.
  3. Mỗi chart title phải là một insight. Không phải tên chart.

Tài liệu tham khảo

Bài viết liên quan tại 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.

Chỉ mục