Giải thích về Lineage trong DAX: Nguồn gốc và cách thao tác dữ liệu

Phần mềm29 tháng 5, 2026·4 phút đọc

Lineage là một trong những khái niệm quan trọng nhất trong DAX, liên quan đến thông tin về nguồn gốc của dữ liệu. Bài viết này sẽ khám phá lineage là gì, cách thiết lập, xóa bỏ và thao tác với nó để tối ưu hóa các truy vấn Power BI.

Giải thích về Lineage trong DAX: Nguồn gốc và cách thao tác dữ liệu

Trong DAX (Data Analysis Expressions), Lineage (nguồn gốc dữ liệu) là một khái niệm cốt lõi mà mọi nhà phát triển cần phải nắm vững. Nó về cơ bản là thông tin về nguồn gốc của một giá trị hoặc cột dữ liệu, cho phép công cụ DAX hiểu được mối liên kết giữa dữ liệu được tính toán và các cột gốc trong mô hình dữ liệu. Việc hiểu rõ lineage giúp bạn viết mã hiệu quả hơn và tránh các lỗi khó hiểu khi làm việc với Power BI.

Kết quả truy vấn cơ bản trong DAXKết quả truy vấn cơ bản trong DAX

Thiết lập Lineage với TREATAS

Khi làm việc với các biến trong DAX, đôi khi chúng ta cần chuyển ngữ cảnh của một giá trị này sang một cột khác. Hàm TREATAS là công cụ mạnh mẽ để làm điều này; nó áp dụng lineage của một bảng hoặc cột này cho một cột khác.

Ví dụ, thay vì viết điều kiện lọc trực tiếp như 'Date'[MonthKey] = 202604, chúng ta có thể định nghĩa một biến và sử dụng TREATAS để gán lineage cho nó:

DEFINE
VAR YearMonthFilter = TREATAS({ 202604 }, 'Date'[MonthKey])
EVALUATE
CALCULATETABLE(
    SUMMARIZECOLUMNS(
        'Date'[Year],
        'Date'[MonthShortName],
        'Date'[MonthKey],
        'Product'[ProductCategoryName],
        "Order Count", [Online Order Count]
    ),
    'Product'[BrandName] = "Adventure Works",
    YearMonthFilter
)

Cách tiếp cận này giúp mã gọn gàng hơn và là cách Power BI tự động tạo mã khi chuyển các bộ lọc từ báo cáo sang mô hình ngữ nghĩa.

Sử dụng hàm TREATAS để thiết lập lineageSử dụng hàm TREATAS để thiết lập lineage

Xóa bỏ Lineage

Có những lúc bạn cần loại bỏ lineage khỏi một biến, biến nó thành một giá trị vô hướng (scalar value) đơn thuần không còn liên kết với cột gốc. Điều này thường xảy ra khi bạn thực hiện các phép toán số học hoặc sử dụng các hàm chuyển đổi cụ thể.

Nếu bạn cố gắng sử dụng một biến đã mất lineage làm bộ lọc trực tiếp trong CALCULATETABLE, DAX sẽ báo lỗi vì không biết áp dụng giá trị đó vào cột nào. Để khắc phục, bạn phải sử dụng cú pháp so sánh rõ ràng (ví dụ: 'Date'[MonthKey] = BienDaXoaLineage).

Một cách thú vị để xóa lineage khi làm việc với nhiều giá trị là sử dụng hàm VALUES. Khi áp dụng VALUES lên một biến có lineage, nó sẽ trả về một bảng các giá trị nhưng đã mất kết nối gốc, buộc bạn phải sử dụng toán tử IN trong bộ lọc:

'Date'[MonthKey] IN YearMonthFilter_cleared

Thao tác và chuyển đổi Lineage

Một trong những ứng dụng hữu ích của lineage là khả năng chuyển đổi ngữ cảnh lọc từ bảng này sang bảng khác mà không cần dùng biến trung gian. Giả sử bạn muốn lọc số đơn hàng theo quốc gia của khách hàng, nhưng sau đó áp dụng bộ lọc đó cho bảng cửa hàng (Store) để xem các cửa hàng ở quốc gia đó phục vụ bao nhiêu đơn hàng.

Thay vì lưu quốc gia vào biến rồi lọc lại, bạn có thể dùng TREATAS để chuyển đổi lineage trực tiếp từ cột Customer[RegionCountryName] sang Store[RegionCountryName]:

MEASURE 'All Measures'[Orders served from Country] =
CALCULATE(
    [Online Order Count],
    REMOVEFILTERS(Customer[RegionCountryName]),
    TREATAS(VALUES('Customer'[RegionCountryName]), 'Store'[RegionCountryName])
)

Phương pháp này ngắn gọn hơn nhiều, giúp mã DAX trở nên "sạch" và dễ đọc hơn, mặc dù đòi hỏi người đọc phải hiểu rõ cách TREATAS hoạt động.

Kết quả truy vấn sau khi thao tác lineageKết quả truy vấn sau khi thao tác lineage

Kết luận

Khái niệm Lineage trong DAX có thể trừu tượng và khó nắm bắt lúc đầu, nhưng nó là nền tảng của cách các bộ lọc hoạt động trong Power BI. Việc biết cách thao tác lineage không chỉ giúp bạn viết mã ngắn gọn hơn mà còn quan trọng để tránh các lỗi phụ thuộc vòng tròn (circular dependency) khi tạo bảng bằng DAX.

Mặc dù việc thay đổi cách viết code dựa trên lineage có thể không mang lại cải thiện đáng kể về hiệu suất thực thi, nhưng nó mang lại giá trị lớn trong việc duy trì và đọc hiểu mã nguồn. Hãy thử nghiệm với các kỹ thuật trên để tối ưu hóa các biểu thức DAX của bạn.

Chia sẻ:FacebookX
Nội dung tổng hợp bằng AI, mang tính tham khảo. Xem bài gốc ↗