Chuyển đến nội dung chính

Hướng dẫn toàn diện về DAX LOOKUPVALUE

Làm chủ hàm LOOKUPVALUE trong Power BI với các ví dụ đơn giản và cách kết hợp nâng cao với các hàm DAX khác.
· 9 phút đọc

Khám phá cùng AI

LOOKUPVALUE là một hàm DAX hữu ích để tìm và truy xuất giá trị trong các bảng khác.

Tuy không thay thế cho các thực hành mô hình dữ liệu tốt trong báo cáo Power BI của bạn, LOOKUPVALUE mang lại nhiều linh hoạt khi viết các biểu thức phức tạp với nhiều điều kiện, đặc biệt nếu bạn muốn kết hợp LOOKUPVALUE với các hàm DAX khác.

Trong hướng dẫn này, chúng tôi sẽ giới thiệu những điều cơ bản về hàm LOOKUPVALUE, cách nó hoạt động, cách sử dụng (đặc biệt khi kết hợp với các hàm DAX khác), cùng một số lưu ý về hiệu năng và thực hành tốt khi dùng LOOKUPVALUE trong các báo cáo Power BI.

LOOKUPVALUE trong Power BI rất giống với VLOOKUP trong Microsoft Excel. Tuy nhiên, bạn nên làm quen với DAX và Power BI trước khi bắt đầu với LOOKUPVALUE. Lộ trình kỹ năng Nền tảng Power BI sẽ giúp bạn bắt kịp nhanh chóng, và cheat sheet DAX là tài liệu tham khảo tuyệt vời để bạn luôn có sẵn khi làm việc với các hàm DAX.

Power BI DAX Cheat Sheet

Những điều cơ bản về LOOKUPVALUE

Với hàm LOOKUPVALUE, chúng ta có thể truy xuất một giá trị duy nhất từ một cột ở bảng khác dựa trên một hoặc nhiều điều kiện tìm kiếm.

Cú pháp tiêu chuẩn như sau:

LOOKUPVALUE (
    <result_columnName>,
    <search_columnName>,
    <search_value>
    [, <search2_columnName>, <search2_value>]…
    [, <alternateResult>]
)

Nếu bạn còn mới với DAX và cú pháp, hãy xem khóa học Giới thiệu về DAX hoặc đọc nhanh qua hướng dẫn DAX cho người mới bắt đầu. Bạn cũng có thể nâng cao kiến thức DAX với khóa DAX trung cấp của chúng tôi.

Hãy cùng đi sâu hơn vào các tham số của LOOKUPVALUE:

  • result_column: Đây là cột bạn muốn truy xuất từ bảng đích.
  • search_column1: Đây là cột trong bảng đích chứa tiêu chí bạn muốn khớp.
  • search_value1: Đây là giá trị cần tìm trong search_column1. Nó có thể là một giá trị cố định, như một đoạn văn bản, hoặc kết quả của một biểu thức (như min hay max), hoặc có thể là một cột trong bảng nguồn mà LOOKUPVALUE sẽ dùng để đối sánh.
  • [search_column2, search_value2, ...]: Đây là các cặp cột và giá trị tìm kiếm bổ sung tùy chọn. Bạn có thể chỉ định nhiều cặp để tạo điều kiện tìm kiếm phức tạp hơn.
  • [alternateResult]: Đây là kết quả mặc định hoặc thay thế. Nếu LOOKUPVALUE không tìm thấy đối sánh phù hợp, nó sẽ trả về giá trị này.

Mỗi lần LOOKUPVALUE thực hiện tìm kiếm trong bảng đích, nó chỉ nên tìm thấy duy nhất một đối sánh. Nếu có nhiều đối sánh khả dĩ, bạn cần xác định thêm các cặp tìm kiếm cho đến khi LOOKUPVALUE có thể tìm được một đối sánh duy nhất.

Để rõ hơn, chúng ta sẽ bàn về ví dụ này ở phần tiếp theo.

Ví dụ đơn giản về LOOKUPVALUE

Cách dùng cơ bản

Giả sử bạn có một bảng sản phẩm với các cột ProductID và ProductName. Bạn muốn tìm tên của sản phẩm có ID 101.

Product_Name = LOOKUPVALUE(Products[ProductName], Products[ProductID], 101)

Nhiều điều kiện tìm kiếm

Trong trường hợp này, giả sử bạn có bảng Sales với các cột ProductID, Region và Revenue. Bạn muốn tìm doanh thu cho một sản phẩm cụ thể (ID 101) ở một khu vực nhất định (East).

Product_Revenue = LOOKUPVALUE(Sales[Revenue], Sales[ProductID], 101, Sales[Region], "East")

Xử lý giá trị trống

Khi các điều kiện tìm kiếm không trả về đối sánh nào, LOOKUPVALUE sẽ trả về trống.

Dưới đây là hai cách để xử lý các giá trị trống này:

  • Dùng tham số kết quả thay thế của LOOKUPVALUE.
  • Dùng hàm COALESCE để chỉ định một kết quả thay thế nếu LOOKUPVALUE trả về trống.

Cách 1: Kết quả thay thế

Bạn có thể chỉ định một giá trị mặc định hoặc kết quả thay thế trong hàm LOOKUPVALUE. Đây là tham số tùy chọn đặt ở cuối biểu thức LOOKUPVALUE.

Product_Name = LOOKUPVALUE(Products[ProductName], Products[ProductID], 101, "Not Found")

Cách 2: COALESCE

Thứ hai, bạn có thể dùng hàm COALESCE, hoạt động gần như giống hệt với việc chỉ định kết quả thay thế trong hàm LOOKUPVALUE.

Tuy nhiên, tùy vào trường hợp sử dụng và tập dữ liệu của bạn, COALESCE có thể cho hiệu năng tốt hơn. Nếu tốc độ và hiệu năng quan trọng với báo cáo Power BI của bạn, thì đáng để xem xét COALESCE.

Commission Rate = 
COALESCE( 
     LOOKUPVALUE(
          'CommissionRates'[Rate],
          'CommissionRates'[SalespersonID], SELECTEDVALUE('Sales'[SalespersonID])
     ), 
     0.05 
)

Xác định mối quan hệ giữa các bảng của bạn luôn là thực hành mô hình dữ liệu tốt. Nó nhanh hơn so với dùng hàm DAX LOOKUPVALUE, và giúp mô hình ngữ nghĩa của bạn dễ hiểu hơn cả hiện tại lẫn tương lai.

Khi bạn tạo mối quan hệ giữa các bảng, bạn có thể dùng hàm RELATED. Trong hầu hết trường hợp, hàm RELATED đơn giản và trực tiếp hơn LOOKUPVALUE.

Hàm RELATED lý tưởng khi bạn cần lấy một giá trị từ bảng khác có mối quan hệ trực tiếp với bảng nguồn của bạn.

Ví dụ, nếu bạn muốn thêm tên khách hàng vào bảng sales, và có mối quan hệ trực tiếp giữa bảng sales và bảng customers qua CustomerID, bạn có thể dùng:

Customer Name = RELATED(Customers[CustomerName])

Tuy nhiên, `LOOKUPVALUE` linh hoạt hơn `RELATED` và phù hợp nhất khi bạn cần tra cứu mà không có mối quan hệ trực tiếp sẵn có trong mô hình của mình hoặc cần tra cứu dựa trên tiêu chí phức tạp hay nhiều tiêu chí. Nó rất linh hoạt, nhưng hãy cẩn trọng để không lạm dụng vì có thể ảnh hưởng tới hiệu năng.

Kết hợp LOOKUPVALUE với các hàm DAX khác

Chúng ta đã thấy cách bạn có thể kết hợp LOOKUPVALUE với COALESCE để cung cấp kết quả thay thế khi không tìm thấy đối sánh.

Có những hàm DAX khác kết hợp tốt với LOOKUPVALUE, chẳng hạn như CALCULATE và SWITCH.

Chúng ta sẽ đi qua các ví dụ về chúng trong phần này.

LOOKUPVALUE & CALCULATE

Kết hợp hàm LOOKUPVALUE với hàm CALCULATE hữu ích trong các tình huống bạn cần truy xuất giá trị từ bảng khác dựa trên bối cảnh tính toán hoặc lọc không thể truy cập trực tiếp qua một mối quan hệ đơn giản hay một tra cứu trực tiếp.

Cách này thường được dùng để áp dụng bộ lọc hoặc thay đổi mức độ chi tiết của phép tính. Khi kết hợp với LOOKUPVALUE, bạn có thể điều chỉnh động tiêu chí tra cứu dựa trên kết quả của các phép tính.

Ví dụ: Giả sử bạn có danh sách sản phẩm và chỉ tiêu doanh số cho một năm cụ thể trong một bảng. Với một ProductID nhất định, bạn muốn lấy chỉ tiêu doanh số cho năm hiện tại.

Hãy cùng xem cách bạn có thể làm điều này bằng cách kết hợp các hàm CALCULATE và LOOKUPVALUE.

Product Sales Target = 
VAR SpecificProductID = 123
VAR CurrentYear = YEAR(TODAY())
RETURN
    CALCULATE(
        LOOKUPVALUE(
             SalesTargets[SalesTarget], 
             SalesTargets[ProductID], 
             SpecificProductID, 
             SalesTargets[Year], 
             CurrentYear
        ),
        ALL(SalesTargets)
    )

LOOKUPVALUE & SWITCH

Kết hợp hàm LOOKUPVALUE với hàm SWITCH rất phù hợp khi bạn cần tra cứu động các giá trị từ bảng khác và trả về kết quả khác nhau dựa trên nhiều đối sánh tiềm năng.

Nếu bạn chưa quen với hàm SWITCH, chúng tôi có một hướng dẫn sẽ dẫn bạn qua chi tiết.

Ví dụ: Giả sử bạn có bộ dữ liệu doanh số và một bảng tỷ lệ hoa hồng riêng. Tỷ lệ hoa hồng mà nhân viên nhận được được quyết định bởi hạng doanh số của họ, điều này không được lưu trực tiếp mà có thể tính từ tổng doanh số.

Bạn muốn tạo một cột tính trong bảng Sales, chỉ ra tỷ lệ hoa hồng cho mỗi giao dịch dựa trên hạng doanh số.

Commission Rate = 
VAR SalesAmount = Sales[TotalSalesAmount]
VAR SalesTier = 
    SWITCH(
        TRUE(),
        SalesAmount <= 500, "Low",
        SalesAmount <= 2000, "Medium",
        "High"
    )
RETURN 
    LOOKUPVALUE(
        CommissionRates[CommissionRate],
        CommissionRates[SalesTier], 
        SalesTier
    )

Trong biểu thức DAX này, chúng ta dùng hàm SWITCH để xác định hạng doanh số rồi sử dụng kết quả này trong LOOKUPVALUE để truy xuất tỷ lệ hoa hồng tương ứng với hạng đó.

Lưu ý về hiệu năng và thực hành tốt

1. Ưu tiên dùng quan hệ khi có thể

Nên ưu tiên dùng các mối quan hệ trực tiếp giữa các bảng bất cứ khi nào có thể. Các mối quan hệ được tối ưu cho hiệu năng trong Power BI, và các hàm như RELATED thường hiệu quả hơn nhiều so với LOOKUPVALUE.

Cách tiếp cận này cũng tận dụng các tối ưu hóa nội bộ của Power BI, điều quan trọng nếu bạn muốn giảm thời gian tải báo cáo.

2. Giảm thiểu sử dụng trong cột tính

Mặc dù có thể dùng LOOKUPVALUE trong các cột tính, nhìn chung không nên lạm dụng. Cột tính được tính trong quá trình làm mới dữ liệu và có thể làm chậm quá trình, đặc biệt với tập dữ liệu lớn.

Hãy cân nhắc dùng LOOKUPVALUE trong measure thay thế, nơi phép tính được thực hiện tại thời điểm truy vấn và có thể hưởng lợi từ các tối ưu hóa truy vấn.

3. Xử lý kết quả trống cẩn thận

LOOKUPVALUE trả về kết quả trống nếu không tìm thấy đối sánh. Như đã bàn ở trên, điều quan trọng là chọn phương pháp phù hợp để xử lý điều này trong báo cáo của bạn. Bạn có thể cân nhắc dùng hàm như COALESCE hoặc tham số kết quả thay thế tùy chọn của LOOKUPVALUE để cung cấp giá trị mặc định khi LOOKUPVALUE trả về trống.

4. Kiểu dữ liệu và phân biệt chữ hoa/thường

Đảm bảo giá trị tìm kiếm và cột được tìm có kiểu dữ liệu tương ứng, và lưu ý đến việc phân biệt chữ hoa/thường. Không khớp kiểu dữ liệu hoặc khác biệt về chữ hoa/thường có thể dẫn tới kết quả không mong muốn hoặc lỗi trong hàm LOOKUPVALUE.

Kết luận

Tóm lại, LOOKUPVALUE mang đến cho bạn nhiều lựa chọn hơn khi tìm và truy xuất giá trị từ các bảng khác. Nó đặc biệt mạnh khi bạn kết hợp với các hàm DAX khác. Tuy nhiên, nó không thay thế cho các thực hành mô hình dữ liệu tốt, và bạn nên ưu tiên xác định mối quan hệ giữa các bảng trong các báo cáo Power BI của mình trước.

Nếu bạn đang cân nhắc theo đuổi sự nghiệp nhà phát triển Power BI, hãy xem hướng dẫn từng bước để trở thành nhà phát triển Power BI. Chúng tôi khuyến khích bạn tiếp tục học Power BI bằng cách khám phá trọn bộ lộ trình nghề nghiệp Data Analyst in Power BI, nơi sẽ dạy bạn mọi thứ cần biết để bắt đầu sử dụng Power BI trong thực tế.

Joleen Bothma

Tác giả

Joleen Bothma

Chủ đề

Liên quan