Advanced DAX: Performance Optimization & Memory Considerations

Advanced DAX: Performance Optimization & Memory Considerations

Advanced DAX: Performance Optimization & Memory Considerations 

 

1.Giới thiệu  

Power BI sử dụng DAX (Data Analysis Expressions) để thực hiện các phép tính và chuyển đổi dữ liệu quan trọng. Tuy nhiên, nếu bạn sử dụng các công thức DAX phức tạp và được tối ưu hóa kém, nó có thể làm chậm báo cáo Power BI của bạn và tiêu tốn nhiều bộ nhớ hơn, dẫn đến sự khó chịu cho người dùng. Để thành thạo DAX, bạn cần hiểu cách thức hoạt động của nó với VertiPaq EngineStorage Engine , đồng thời tối ưu hóa các hàm chính như SUMX , CALCULATEFILTER . Điều quan trọng nữa là tránh tình trạng số lượng lớn và các mối quan hệ cơ sở dữ liệu không hiệu quả. Bài viết này sẽ khám phá các kỹ thuật nâng cao để giúp các công thức DAX của bạn hiệu quả hơn và giữ cho các mô hình Power BI của bạn nhanh và nhẹ. 

2. Hiểu về tối ưu hóa VertiPaq Engine & Storage Engine 

Trọng tâm phân tích trong bộ nhớ của Power BI nằm ở VertiPaq Engine , một cơ sở dữ liệu dạng cột có chức năng nén và lưu trữ dữ liệu. VertiPaq Engine hoạt động cùng với Storage Engine , xử lý việc truy xuất dữ liệu cho các phép tính trước khi Formula Engine thực hiện các phép toán logic DAX. Sau khi nhận được logic DAX thông qua Formula Engine, nó sẽ bắt đầu xử lý. Quy trình tối ưu cho mã DAX yêu cầu các nhà phát triển phải tuân thủ các hoạt động của các engine này. 

Động cơ VertiPaq: Nén là Vua 

VertiPaq tối ưu hóa việc sử dụng bộ nhớ bằng cách nén dữ liệu theo cột, nhưng hiệu quả của nó phụ thuộc vào mô hình dữ liệu và mẫu DAX: 

  • Giảm Số lượng : Các cột có số lượng lớn (ví dụ: dấu thời gian, ID) sẽ khó nén. Thay vì nhập toàn bộ OrderID với hàng triệu giá trị duy nhất, hãy chỉ trích xuất các phần liên quan (ví dụ: Năm hoặc Khu vực). 

  • Tối ưu hóa Kiểu dữ liệu : Sử dụng kiểu dữ liệu nhỏ nhất có thể — số nguyên thay vì số thập phân và ngày thay vì ngày giờ — để cải thiện khả năng nén và giảm mức sử dụng bộ nhớ. 

  • Loại bỏ dữ liệu dư thừa : Các cột có dữ liệu giá trị thấp, lặp lại (ví dụ: cột toàn số 0) sẽ lãng phí dung lượng. Việc lọc chúng trong quá trình nhập sẽ giúp tăng hiệu suất. 

Công cụ lưu trữ: Truy xuất dữ liệu hiệu quả 

Khi xử lý truy vấn, Storage Engine sẽ cung cấp dữ liệu được yêu cầu cho Formula Engine. Việc tối ưu hóa bước này bao gồm: 

  • Sử dụng mối quan hệ một chiều 1-nhiều : Cách này giúp giảm thiểu chi phí tìm kiếm dữ liệu. Mối quan hệ hai chiều nên được sử dụng hạn chế do sử dụng bộ nhớ nhiều hơn và hiệu quả lọc kém. 

  • Tận dụng tổng hợp trước : Các phép tính DAX phức tạp trên các bảng lớn nên sử dụng các bảng tổng hợp trước hoặc chuyển đổi Power Query để giảm khối lượng công việc của Storage Engine. 

Bằng cách tối ưu hóa cho VertiPaq và Storage Engine, bạn thiết lập nền tảng vững chắc để thực hiện DAX hiệu quả. 

Viết các hàm SUMX, CALCULATE và FILTER hiệu quả 

Các hàm DAX như SUMX, CALCULATE và FILTER rất mạnh mẽ nhưng có thể ảnh hưởng tiêu cực đến hiệu suất nếu sử dụng sai mục đích. Sau đây là cách tối ưu hóa chúng. 

SUMX: Lặp lại một cách thông minh 

  • SUMX lặp lại một bảng, áp dụng một biểu thức cho mỗi hàng. Mặc dù linh hoạt, nhưng nó có thể là một thao tác tốn bộ nhớ nếu không được tối ưu hóa: 

  • Giảm thiểu kích thước bảng : Sử dụng FILTER hoặc CALCULATETABLE để lọc trước các hàng trước khi áp dụng SUMX 

Cách tiếp cận này làm giảm các lần lặp lại không cần thiết. 

  • Đơn giản hóa biểu thức : Giữ cho các phép tính theo từng hàng đơn giản để giảm thiểu khối lượng công việc của Formula Engine. 

CALCULATE : Bậc thầy bối cảnh 

CALCULATE sửa đổi ngữ cảnh bộ lọc nhưng nên được sử dụng hiệu quả: 

  • Sử dụng bộ lọc cụ thể

Cách này hiệu quả hơn so với việc lọc tất cả các bản ghi Bán hàng trước khi áp dụng SUM. 

  • Tránh sử dụng bộ lọc dư thừa : Nếu bộ lọc đã được áp dụng trong báo cáo, đừng áp dụng lại trừ khi cần thiết. 

  • Biến đòn bẩy

 

TotalProfit = VAR BaseSales = CALCULATE(SUM(Sales[Amount])) RETURN CALCULATE(BaseSales - SUM(Costs[Amount]), Sales[Year] = 2024) 

Sử dụng biến giúp tránh tính toán thừa. 

BỘ LỌC: Độ chính xác hơn sức mạnh thô bạo 

FILTER tạo bảng dựa trên các điều kiện, nhưng việc sử dụng quá mức có thể làm giảm hiệu suất: 

  • Áp dụng bộ lọc sớm

 

Tính năng này lọc trước dữ liệu trước khi lặp lại, giúp giảm bớt việc tính toán. 

  • Sử dụng CALCULATE thay thế

Điều này giúp tránh việc tạo ra các bảng trung gian, cải thiện hiệu quả. 

Tránh những cạm bẫy: Các vấn đề về số lượng và các mối quan hệ không hiệu quả 

Ngay cả các hàm được tối ưu hóa cũng có thể gặp phải tình trạng thiếu hiệu quả về mặt cấu trúc. Sau đây là cách giảm thiểu chúng: 

Quản lý số lượng 

Dữ liệu có số lượng lớn làm tăng mức sử dụng bộ nhớ và làm chậm các truy vấn: 

Chia cột : Thay vì sử dụng CustomerID có số lượng lớn, hãy tham chiếu CustomerType có số lượng nhỏ hơn. 

Sử dụng Bảng tổng hợp : Tổng hợp trước dữ liệu trong Power Query hoặc SQL để giảm các giá trị duy nhất được lưu trữ trong VertiPaq. 

Tối ưu hóa các mối quan hệ 

Tránh các mối quan hệ nhiều-nhiều : Những mối quan hệ này làm tăng độ phức tạp của mô hình và làm chậm các truy vấn. 

Kiểm tra hướng lọc : Sử dụng mối quan hệ một chiều trừ khi yêu cầu lọc chéo hai chiều một cách rõ ràng. 

Hạn chế sử dụng quá mức ALL và ALLEXCEPT

Sử dụng ALLSELECTED hoặc ALL(Sales[Region]) thay vì ALL(Sales) 

Điều này giới hạn phạm vi quét bảng. 

Tổng hợp tất cả lại: Một ví dụ thực tế 

Hãy xem xét một mô hình bán hàng có 10 triệu hàng, yêu cầu phải đo lường tổng doanh số bán hàng "Đồ điện tử" vào năm 2024. 

Phiên bản không hiệu quả 

Các vấn đề : Quét TOÀN BỘ bảng, bảng trung gian lớn, lặp lại SUMX quá mức. 

Phiên bản tối ưu 

Lợi ích : Sử dụng CALCULATE để lọc trực tiếp, loại bỏ việc tạo bảng trung gian, chạy nhanh hơn với mức sử dụng bộ nhớ thấp hơn. 

3.Phần kết luận 

Để thành thạo DAX nâng cao, bạn cần hiểu rõ VertiPaq và Storage Engine, sử dụng hàm một cách có kỷ luật và tránh những cạm bẫy thường gặp. Bằng cách giảm thiểu số lượng, tối ưu hóa các mối quan hệ và viết các biểu thức DAX hiệu quả, bạn có thể xây dựng các mô hình Power BI hiệu suất cao. Sử dụng các công cụ như Performance Analyzer và DAX Studio để tinh chỉnh các phép đo và ưu tiên sự đơn giản hơn là phức tạp. Việc triển khai các kỹ thuật này sẽ đảm bảo các phép tính DAX của bạn cung cấp thông tin chi tiết một cách nhanh chóng và hiệu quả.