[M code] Merging table with Dax way (Row context)
- AutoReport
- Jun 8, 2024
- 2 min read
Updated: Jun 9, 2024
Nếu trong môi trường Excel preadsheet chúng tay hay dùng Vlookup để tìm dữ liệu thì Power Query có chức năng Merge table với chức năng tương tự. Tuy nhiên, merge table còn một số hạn chế trong việc dò tìm với điều kiện gần đúng. Ví dụ, dò tìm một sp A bán hàng vào một ngày X có thuộc một chương trình KM nào đang áp dụng không thì khá khó khăn đối với user chỉ sử dụng các chức năng có sẵn.
Bài viết này sẽ dễ hiểu, đặc biệt với các bạn đã làm quen với thuật ngữ Row context trong DAX sẽ thấy khá là tương đồng. Cùng nhau chúng ta đi qua ví dụ cụ thể bên dưới:
Ta có bảng Sales, lưu giữ các giao dịch của từng sp theo ngày Và bảng Promtion lưu giữ các kỳ khuyến mại theo từng SP:


Tại bảng Sales, chúng ta thêm một cột CONDITION với đoạn code như bên dưới:
= Table.AddColumn(ChangedType, "Condition", each
let
crDate = _[Date],
crProduct = _[Product],
filter = Table.SelectRows(Prm, each crProduct=[Product] and crDate<=[To] and crDate>=[From])
in filter
)
Kết quả như hình bên dưới:

Và đây là kết quả sau khi xuất ra bên ngoài môi trường spreadsheet

* Giải thích:
Tương tự như Row context trong DAX ta cần gán cho dòng hiện tại của Table một biến với tên là crDate và crProduct để lưu giữ cho ngày và sp hiện tại (1 row của bảng sales) sau đó lần lượt dò nó với từng dòng trong bảng Promotion.
Dòng nào thỏa điều kiện sẽ dc hàm Table.SelectRow giữ lại.
Hy vọng bài viết hữu ích cho bạn đọc.
Comments