Analyzing Portfolio Performance in Power BI: Returns, Gains, and Asset Growth

To Share 2026 - Content Fb + Web (3)

Analyzing Portfolio Performance in Power BI: Returns, Gains, and Asset Growth

Analyzing portfolio performance Power BI là bước chuyển từ báo cáo số liệu sang phân tích đầu tư thực sự.

Biết tổng AUM là chưa đủ. Portfolio Manager cần biết danh mục sinh lời bao nhiêu phần trăm.

Họ cũng cần biết so với benchmark thì sao. Và tài sản nào đang tăng trưởng tốt nhất.

Bài viết hướng dẫn xây dựng toàn bộ performance analytics bằng DAX trong Power BI.

Từ HPR, TWR, MWR đến benchmark comparison và rolling returns. Tham khảo thêm tại Microsoft DAX Reference.

📌 Đây là bài số 5 trong series Power BI Financial Analytics tại MCNA:


Mục Lục

  1. Các chỉ số performance cốt lõi cần đo lường
  2. Holding Period Return (HPR)
  3. Time-Weighted Return (TWR)
  4. Money-Weighted Return (MWR)
  5. Unrealized và Realized Gains
  6. Benchmark Comparison
  7. Rolling Returns và Moving Average
  8. Asset Growth Analysis
  9. Performance Dashboard — Tổng hợp
  10. 10. Kết luận

1. Các Chỉ Số Performance Cốt Lõi Cần Đo Lường

Tại sao cần nhiều chỉ số khác nhau?

Không có một chỉ số nào đủ để đánh giá toàn diện hiệu suất danh mục.

HPR đo lợi suất tổng thể. TWR loại bỏ ảnh hưởng của dòng tiền vào/ra.

MWR phản ánh trải nghiệm thực tế của nhà đầu tư.

Analyzing portfolio performance Power BI cần kết hợp cả ba — mỗi chỉ số trả lời một câu hỏi khác nhau.

Bảng tổng hợp các chỉ số performance

Chỉ số Câu hỏi trả lời Dùng khi nào
HPR Danh mục lãi/lỗ bao nhiêu %? Đo lường đơn giản, không có dòng tiền
TWR Chiến lược đầu tư hiệu quả ra sao? So sánh fund manager với benchmark
MWR / IRR Nhà đầu tư thực sự thu được bao nhiêu? Có dòng tiền vào/ra không đều
Unrealized PnL Đang lãi/lỗ bao nhiêu chưa chốt? Theo dõi danh mục đang nắm giữ
Realized PnL Đã chốt lãi/lỗ bao nhiêu? Báo cáo thuế, kế toán
Benchmark Delta Vượt/thua benchmark bao nhiêu? Đánh giá chất lượng quản lý danh mục

💡 Nguyên tắc: Dùng TWR để đánh giá fund manager. Dùng MWR để báo cáo cho nhà đầu tư. Hai con số này có thể khác nhau đáng kể.


2. Holding Period Return (HPR)

HPR là gì?

HPR đo lợi suất của danh mục trong một khoảng thời gian cố định.

Đây là chỉ số đơn giản nhất. Nó không tính đến thời điểm dòng tiền vào/ra.

Công thức HPR

-- Công thức: HPR = (Giá cuối - Giá đầu + Cổ tức) / Giá đầu

-- DAX: Simple HPR cho toàn danh mục
Portfolio HPR % =
DIVIDE(
    [Total Market Value] - [Total Cost Value] + [Total Dividend],
    [Total Cost Value]
)

-- DAX: HPR theo từng tài sản
Asset HPR % =
DIVIDE(
    [Market Value] - [Cost Value],
    [Cost Value]
)

-- DAX: Log Return (dùng cho tính toán thống kê)
Log Return =
LN(DIVIDE([Current Price], [Entry Price]))

HPR theo kỳ thời gian

-- HPR so với đầu năm (YTD)
HPR YTD % =
VAR StartValue =
    CALCULATE(
        [Total Market Value],
        STARTOFYEAR(DimDate[Date])
    )
RETURN
    DIVIDE([Total Market Value] - StartValue, StartValue)

-- HPR so với đầu tháng (MTD)
HPR MTD % =
VAR StartValue =
    CALCULATE(
        [Total Market Value],
        STARTOFMONTH(DimDate[Date])
    )
RETURN
    DIVIDE([Total Market Value] - StartValue, StartValue)

-- HPR so với đầu quý (QTD)
HPR QTD % =
VAR StartValue =
    CALCULATE(
        [Total Market Value],
        STARTOFQUARTER(DimDate[Date])
    )
RETURN
    DIVIDE([Total Market Value] - StartValue, StartValue)

✅ Best practice: Luôn tạo cả 3 phiên bản YTD, MTD, QTD. Portfolio Manager cần so sánh hiệu suất theo nhiều kỳ khác nhau trong cùng một báo cáo.


3. Time-Weighted Return (TWR)

TWR khác HPR ở điểm nào?

TWR loại bỏ ảnh hưởng của dòng tiền vào/ra. Nó chỉ đo hiệu quả của chiến lược đầu tư.

Đây là chỉ số chuẩn để đánh giá và so sánh fund manager. CFA Institute khuyến nghị dùng TWR cho báo cáo GIPS.

Tính TWR trong DAX

-- TWR = Tích của (1 + sub-period return) cho mỗi kỳ con
-- Mỗi kỳ con được tính giữa hai lần có dòng tiền vào/ra

-- Bước 1: Sub-period return cho mỗi ngày
Daily Sub-Period Return =
DIVIDE(
    [End of Day Value],
    [Beginning of Day Value] - [Net Cash Flow]
) - 1

-- Bước 2: TWR tích lũy
TWR Cumulative % =
PRODUCTX(
    DATESBETWEEN(
        DimDate[Date],
        [Start Date],
        [End Date]
    ),
    1 + [Daily Sub-Period Return]
) - 1

⚠️ Lưu ý: TWR yêu cầu định giá danh mục mỗi khi có dòng tiền vào/ra. Nếu không có dữ liệu đủ chi tiết, dùng phương pháp Modified Dietz thay thế.


4. Money-Weighted Return (MWR)

MWR phản ánh điều gì?

MWR tính đến thời điểm và quy mô của từng dòng tiền.

Nếu nhà đầu tư nạp tiền đúng lúc thị trường tăng, MWR sẽ cao hơn TWR.

Ngược lại, nạp tiền trước khi thị trường giảm sẽ kéo MWR xuống thấp hơn TWR.

Tính MWR bằng IRR trong DAX

-- MWR = IRR (Internal Rate of Return) của toàn bộ dòng tiền
-- Bao gồm: (-) tiền đầu tư ban đầu, (+/-) dòng tiền vào/ra, (+) giá trị cuối

-- DAX không có hàm IRR built-in
-- Giải pháp: dùng Newton-Raphson iteration

MWR Approx % =
VAR InitialInvestment = [Total Initial Investment]
VAR FinalValue        = [Total Market Value]
VAR Months            = DATEDIFF([Start Date], TODAY(), MONTH)
-- Simplified: Annualized return dùng HPR
RETURN
    POWER(
        DIVIDE(FinalValue, InitialInvestment),
        12 / Months
    ) - 1

💡 Thực tế: Với dữ liệu đơn giản, nhiều Wealth Management team dùng phương pháp Modified Dietz thay IRR. Nó cho kết quả gần đúng và tính toán nhanh hơn nhiều.


5. Unrealized và Realized Gains

Phân biệt Unrealized và Realized

Unrealized Gain là lãi/lỗ đang có nhưng chưa chốt. Tài sản vẫn đang nắm giữ.

Realized Gain là lãi/lỗ đã chốt khi bán tài sản. Số này ảnh hưởng đến thuế và kế toán.

DAX cho Unrealized Gains

-- Unrealized Gain (chưa chốt)
Unrealized Gain =
CALCULATE(
    SUMX(
        FactTrade,
        ([Current Market Price] - [Avg Cost Price])
            * [Quantity Held]
    ),
    FactTrade[TradeStatus] = "OPEN"
)

-- Unrealized Gain %
Unrealized Gain % =
DIVIDE([Unrealized Gain], [Total Cost - Open Positions])

-- Phân loại lãi/lỗ
Gain Status =
IF([Unrealized Gain] > 0, "Lãi",
   IF([Unrealized Gain] < 0, "Lỗ", "Hòa vốn"))

DAX cho Realized Gains

-- Realized Gain (đã chốt)
Realized Gain =
CALCULATE(
    SUMX(
        FactTrade,
        ([Sell Price] - [Avg Cost Price]) * [Quantity Sold]
    ),
    FactTrade[TradeType] = "SELL"
)

-- Realized Gain YTD
Realized Gain YTD =
CALCULATE(
    [Realized Gain],
    DATESYTD(DimDate[Date])
)

6. Benchmark Comparison

Tại sao cần so sánh với benchmark?

Lãi 15% trong một năm nghe có vẻ tốt. Nhưng nếu benchmark tăng 25%, đó là kết quả tệ.

Benchmark comparison là thước đo quan trọng nhất để đánh giá chất lượng quản lý danh mục.

Thiết lập bảng Benchmark

-- FactBenchmark: lưu giá trị benchmark theo ngày
BenchmarkID    INT
DateKey        INT        -- FK → DimDate
BenchmarkCode  VARCHAR(10) -- VN30, VNINDEX, MSCI_EM
CloseValue     DECIMAL(18,4)
DailyReturn    DECIMAL(10,6)

DAX so sánh Portfolio vs Benchmark

-- Benchmark Return YTD
Benchmark YTD % =
VAR BmStart =
    CALCULATE(
        LASTVALUE(FactBenchmark[CloseValue]),
        STARTOFYEAR(DimDate[Date])
    )
VAR BmEnd =
    LASTVALUE(FactBenchmark[CloseValue])
RETURN
    DIVIDE(BmEnd - BmStart, BmStart)

-- Alpha (vượt trội so với benchmark)
Portfolio Alpha % =
[HPR YTD %] - [Benchmark YTD %]

-- Alpha Status
Alpha Status =
IF([Portfolio Alpha %] > 0,
    "✅ Outperform " & FORMAT([Portfolio Alpha %], "+0.00%"),
    "❌ Underperform " & FORMAT([Portfolio Alpha %], "0.00%"))

💡 Thực tế tại Việt Nam: Các benchmark phổ biến là VNINDEX, VN30 cho equity. Với danh mục hỗn hợp, cần tạo composite benchmark theo tỷ trọng từng asset class.


7. Rolling Returns và Moving Average

Rolling Returns là gì?

Rolling Return tính lợi suất của danh mục trong một khoảng thời gian cố định, trượt dần theo ngày.

Ví dụ: Rolling 12M Return ngày hôm nay = lợi suất từ ngày này năm ngoái đến hôm nay.

Chỉ số này giúp thấy được tính ổn định của hiệu suất đầu tư theo thời gian.

DAX cho Rolling Returns

-- Rolling 12-Month Return
Rolling 12M Return % =
VAR EndValue =
    [Total Market Value]
VAR StartValue =
    CALCULATE(
        [Total Market Value],
        DATEADD(DimDate[Date], -12, MONTH)
    )
RETURN
    DIVIDE(EndValue - StartValue, StartValue)

-- Rolling 3-Month Return
Rolling 3M Return % =
VAR EndValue   = [Total Market Value]
VAR StartValue =
    CALCULATE(
        [Total Market Value],
        DATEADD(DimDate[Date], -3, MONTH)
    )
RETURN
    DIVIDE(EndValue - StartValue, StartValue)

-- 30-Day Moving Average AUM
MA 30D AUM =
AVERAGEX(
    DATESINPERIOD(
        DimDate[Date],
        LASTDATE(DimDate[Date]),
        -30, DAY
    ),
    [Total Market Value]
)

8. Asset Growth Analysis

Phân tích tăng trưởng theo tài sản

Asset Growth Analysis trả lời câu hỏi: tài sản nào đang đóng góp nhiều nhất vào tăng trưởng danh mục?

Phân tích này giúp Portfolio Manager ra quyết định tái cơ cấu — tăng tỷ trọng tài sản tốt, giảm tài sản kém hiệu quả.

DAX cho Asset Contribution Analysis

-- Đóng góp của từng tài sản vào tổng return danh mục
Asset Contribution % =
DIVIDE(
    [Asset Unrealized Gain],
    CALCULATE([Total Cost Value], ALL(DimAsset))
)

-- Top performers theo YTD return
-- Dùng trong visual: Table hoặc Bar chart sắp xếp theo HPR YTD %

-- Weight × Return contribution
Weighted Return Contribution =
[Asset Weight %] * [Asset HPR %]

-- Attribution: so sánh weight thực vs weight benchmark
Active Weight =
[Asset Weight %] -
CALCULATE(
    [Benchmark Asset Weight %],
    ALL(DimClient)
)

DAX phân loại tài sản theo hiệu suất

-- Phân loại: Winner / Loser / Neutral
Performance Tier =
SWITCH(
    TRUE(),
    [Asset HPR %] >= 0.15,  "🟢 Top Performer",
    [Asset HPR %] >= 0.05,  "🟡 Performer",
    [Asset HPR %] >= 0,     "⚪ Neutral",
    [Asset HPR %] >= -0.10, "🟠 Underperformer",
                            "🔴 Significant Loss"
)

9. Performance Dashboard — Tổng Hợp

Cấu trúc dashboard performance chuẩn

Một performance dashboard tốt cần trả lời 3 câu hỏi chính ngay khi mở lên.

Câu hỏi 1: Danh mục đang ở đâu so với mục tiêu?

Câu hỏi 2: So với benchmark thì sao?

Câu hỏi 3: Tài sản nào đang kéo lên hoặc kéo xuống?

Layout đề xuất cho Portfolio Performance Dashboard

  • Row 1 — KPI Cards: Total AUM | HPR YTD% | Benchmark YTD% | Alpha% | Unrealized PnL
  • Row 2 — Line Chart: Portfolio vs Benchmark theo thời gian (filterable theo kỳ)
  • Row 3 trái — Bar Chart: Top/Bottom 10 assets theo HPR YTD%
  • Row 3 phải — Waterfall Chart: Attribution phân tích đóng góp từng asset class
  • Row 4 — Table: Chi tiết từng tài sản với HPR, Weight, Contribution, Status

DAX cho KPI Cards

-- Card 1: AUM với trend indicator
AUM Display =
FORMAT([Total AUM] / 1000000000, "₫#,##0.0") & "T"

-- Card 2: Alpha với màu sắc
Alpha Color =
IF([Portfolio Alpha %] >= 0, "#00C896", "#FF4444")

-- Card 3: Win Rate (tỷ lệ tài sản đang lãi)
Win Rate % =
DIVIDE(
    COUNTROWS(
        FILTER(
            VALUES(DimAsset[AssetCode]),
            [Asset HPR %] > 0
        )
    ),
    COUNTROWS(VALUES(DimAsset[AssetCode]))
)

⚠️ Production tip: Thêm slicer Date Range, Client Segment và Asset Class. Portfolio Manager cần xem hiệu suất theo từng nhóm khách hàng riêng biệt.


10. Kết Luận

Từ số liệu sang insight thực sự

Analyzing portfolio performance Power BI không dừng lại ở việc tính toán các con số.

Mục tiêu cuối cùng là giúp Portfolio Manager hiểu tại sao danh mục đang hoạt động như vậy.

Từ đó đưa ra quyết định điều chỉnh dựa trên dữ liệu — không phải cảm tính.

Khi HPR, TWR và benchmark comparison được tích hợp trong một dashboard — đó là lúc Power BI tạo ra giá trị thực sự cho Wealth Management team.

Ba điều cốt lõi cần nhớ

  1. Dùng TWR để đánh giá fund manager. Dùng MWR để báo cáo cho nhà đầu tư. Không nhầm lẫn hai chỉ số này.
  2. Luôn có benchmark comparison. Lợi suất tuyệt đối không có ý nghĩa nếu không so sánh với thị trường.
  3. Rolling returns quan trọng hơn point-in-time returns. Chúng cho thấy tính ổn định thực sự của chiến lược đầu tư.

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