- Lab 5: Create Advanced DAX Calculations in Power BI Desktop (Tạo các phép tính DAX nâng cao trong Power BI Desktop)

Power BI Lab 5: Xây dựng công thức DAX trong Power BI – phần 2

Ngày đăng: 22/03/2022

Cập nhật theo giáo trình mới nhất của Microsoft, ngày 14/09/2023.

Bài hướng dẫn Lab 5: Create Advanced DAX Calculations in Power BI Desktop (Tạo các phép tính DAX nâng cao trong Power BI Desktop) là một bài thực hành nằm trong chuỗi bài luyện tập Power BI của Microsoft. Mục tiêu của chuỗi bài này là giúp học viên hiểu về các bước xử lý dữ liệu và từ đó thiết kế báo cáo trong Power BI. 

Xuyên suốt chuỗi bài này, chúng ta sẽ sử dụng bộ dữ liệu của công ty Adventure Works – một công ty sản xuất và kinh doanh đồ thể thao mạo hiểm đa quốc gia – để xây dựng một giải pháp Power BI cho công ty này.  

Datapot khuyến khích học viên thực hành các bài lab theo thứ tự sau để củng cố các kĩ năng cơ bản một cách tốt nhất: 

  • Lab 1: Prepare Data in Power BI Desktop (Chuẩn bị dữ liệu trong Power BI Desktop) 
  • Lab 2: Load Transformed Data in Power BI Desktop (Làm sạch và chuyển đổi dữ liệu trong Power BI Desktop) 
  • Lab 3: Design a model in Power BI – Part 1 (Xây dựng Model trong Power BI – Phần 1) 
  • Lab 3 nâng cao:  Design a model in Power BI – Part 2 (Xây dựng Model trong Power BI – Phần 2) 
  • Lab 4: Create DAX Calculations in Power BI Desktop (Tạo các phép tính DAX trong Power BI Desktop) 
  • Lab 5: Create Advanced DAX Calculations in Power BI Desktop (Tạo các phép tính DAX nâng cao trong Power BI Desktop) 
  • Lab 6: Design a report in Power BI Desktop – Part 1 (Thiết kế báo cáo trong Power BI Desktop – Phần 1) 
  • Lab 7: Design a report in Power BI Desktop – Part 2 (Thiết kế báo cáo trong Power BI Desktop – Phần 2)
  • Lab 8: Perform Advanced Analytics with AI Visuals (Phân tích nâng cao với biểu đồ AI)
  • Lab 9: Create a Power BI Dashboard (Tạo dashboard trên Power BI) 
  • Lab 10: Enforce Row-Level Security (Cài đặt Row-Level Security) 

Chuẩn bị trước khi thực hành 

Để bắt đầu thực hành chuỗi bài Lab này, chúng ta cần chuẩn bị:  

Đối với học viên của Datapot, các bạn đã được cung cấp thông tin để kết nối đến SQL Server có chứa dataset AdventureWorksDW2020 và link download file. Các bạn đã đủ công cụ để bắt đầu thực hành 11 bài Lab.

Trong trường hợp tự thực hành, các bạn cần: 

Sau khi hoàn thành, các bạn sẽ sử dụng server name để kết nối với Power BI Desktop: 

Mục tiêu của bài Lab 5

Sau bài thực hành này, bạn có thể tạo các DAX measure kiểm soát Filter Context, đặc biệt là sử dụng hàm CALCULATE để kiểm soát bộ lọc và các hàm Time Intelligence.

Hướng dẫn thực hành

Hướng dẫn bằng Video:

Hướng dẫn từng bước:

Bài tập 1: Làm việc với Filter Context trong DAX

Trong bài tập này, chúng ta sẽ tạo các measure bằng DAX có kiểm soát với filter context. Filter context – tạm dịch: ngữ cảnh bộ lọc – có thể được tạm hiểu là một hoặc nhiều bộ lọc được áp dụng trong một measure.

Task 1: Tạo biểu đồ ma trận

1.1. Mở file Power BI Desktop Chúng ta sẽ tạo ra một biểu đồ ma trận để thể hiện kết quả của các measure, phục vụ việc tính toán và kiểm tra kết quả.

1.2. Trên Page 3, thêm một biểu đồ dạng ma trận vào trang báo cáo

Kéo toàn bộ cây phân cấp Region | Regions và thả vào bên trong biểu đồ ma trận. 

Thêm trường vào biểu đồ Sales | Sales

1.3. Để mở rộng toàn bộ cây phân cấp, nhấn 2 lần vào biểu tượng mũi tên rẽ nhánh ở góc trên bên phải biểu đồ.  

Hãy nhớ lại rằng trong buổi thực hành từ trước, cây phân cấp Regions có 3 cấp bậc là Group, Country và Region.  

1.4. Để đặt định dạng, trong ngăn Visualizations chọn ngăn Format

Trong hộp Search, nhập vào Stepped. Đặt thuộc tính Stepped LayoutOff.  

Hãy chắc chắn rằng ma trận của bạn bây giờ có 4 cột như sau. 

Ở Adventure Works, khu vực bán hàng (sales region) được chia thành các nhóm (group), nhóm gồm các quốc gia (country), quốc gia bao gồm các vùng miền (region). Ngoại trừ Mỹ (US), các nước còn lại đều chỉ có 1 vùng, tên vùng được đặt trung với tên của quốc gia đó. Riêng với Mỹ được chia thành 5 khu vực địa lý khác nhau. 

Task 3: Kiểm soát filter context 

Trong task này chúng ta sẽ tạo ra các measure bằng DAX với hàm CALCULATE() để kiểm soát ngữ cảnh bộ lọc – filter context. 

3.1. Thêm một measure vào bảng Sales theo công thức sau:  

Hàm CALCULATE() là một hàm cực kỳ “mạnh” trong việc kiểm soát filter context. Hàm CALCULATE() có thể có 1 hoặc nhiều đối số (argument). Đối số đầu tiên là một câu lệnh, phép tính hoặc một measure, các đối số sau đó thể hiện bộ lọc được điều chỉnh và áp dụng trong công thức.  

Hàm REMOVEFILTERS() sẽ bỏ đi tất cả các bộ lọc đang hoạt động. Hàm này có thể không có đối số nào, nhưng cũng có thể có đối số là một bảng, một cột hoặc nhiều cột.   

Trong công thức trên, bạn đang tính tổng các giá trị trong cột Sales trong một bộ lọc đã được điều chỉnh, đó là bỉ đi tất cả các bộ lọc được áp dụng cho cột Region. 

3.2. Để quan sát kết quả một cách rõ hơn, thêm measure Sales All Region vào biểu đồ ma trận. Bạn sẽ thấy công thức này trả về tổng sales cho tất cả các khu vực, quốc gia, vùng miền như sau:  

Việc tính ra tổng doanh thu của tất cả các khu vực bán hàng như vậy sẽ giúp bạn tính toán được tỷ lệ phần trăm đóng góp (percent of total) của từng khu vực vào tổng, bằng cách chia Sales của từng khu vực cho Sales tổng (ở đây là measure Sales All Region) 

3.3. Bây giờ, click chọn lại measre Sales All Region trong ngăn Field và thay measure đó bằng công thức như sau:  

Measure của bạn đã được đổi tên để thể hiện đúng ý nghĩa của measure. Hàm DIVIDE() sẽ chia measure Sales (không bị điều chỉnh bởi filter context) cho measure Sales đã được điều chỉnh trong filter context.  

3.4. Trong biểu đồ ma trận, chú ý rằng measure của bạn đã được đổi tên và bây giờ đang chứa các giá trị khác nhau cho từng group, country, region. 

3.5. Sửa lại định dạng measure Sales % All Region thành phần trăm với 2 chứ số sau dấu thập phân.

3.6. Trong biểu đồ ma trận, xem lại giá trị của measure Sales % All Region.

3.7. Thêm một measure DAX khác vào bảng Sales và đặt định dạng là phần trăm như sau:  

3.8. Chú ý rằng measure Sales % Country hơi khác một chút với measure Sales % All Region

Sự khác biệt nằm ở số chia trong cong thức đã được điều chỉnh bởi việc bỏ đi các bộ lọc trong cột Region trong bảng Region chứ không phải xóa bộ lọc cho tất cả các cột trong bảng Region. Điều này nghĩa là mọi bộ lọc được áp dụng cho group và country vẫn được giữ nguyên. Kết quả của measure sẽ thể hiện % sales cho từng country. 

3.9. Thêm measure Sales % Country vào biểu đồ ma trận. 

Chú ý rằng chỉ United States đang thể hiện các giá trị nhỏ hơn 100% cho mỗi region. Điều này là bởi vì chỉ có Mỹ có nhiều region, các quốc gia còn lại đều chỉ chứa một region duy nhất, dẫn đến giá trị hiển thị cho mỗi region cho quốc gia đó là 100%.

3.10. Bạn có thể làm công thức DAX của bạn tốt hơn nữa bằng cách sửa lại công thức của measure Sales % Country như sau.

Hàm ISINSCOPE bên trong hàm IF được sử dụng khi muốn kiểm tra xem một cột region là một cấp bậc trong cây phân cấp. Nếu đúng, hàm DIVIDE() sẽ được thực thi. Vế false trong hàm IF() đang bị thiếu, nghĩa là nếu sai thì hàm sẽ trả về giá trị blank.  

Lưu ý rằng measure Sales % Country hiện chỉ trả về giá trị khi một khu vực nằm trong phạm vi. 

3.11. Thêm 1 measure DAX cho bảng Sales như sau và đặt định dạng là phần trăm (percentage), sau đó thêm vào biểu đồ ma trận. 

3.12. Một cách khác để viết công thức DAX cho measure Sales % Group là: 

3.13. Trong Model view, lưu 3 measure mới vào chung một folder tên là Ratios.

Cuối cùng, lưu file Power BI Desktop. 

Bài tập 2: Làm việc với Time Intelligence 

Trong bài tập này bán sẽ tạo ra meaure DAX sales year-to-date (YTD) và sales year-over-year (YoY) growth. 

Task 1: Tạo measure DAX YTD 

1.1. Trong Report view, trên Page 2, chú ý răng biểu đồ ma trận đang thể hiện nhiều measures cho năm và tháng được gộp thành nhóm theo các dòng. 

1.2. Thêm measure DAX vào bảng Sales và đặt định dạng là 0 chữ số thập phân như sau:  

Hàm TOTALYTD() sẽ thực hiện phép tính – trong trường hợp này là tổng Sales – cho một cột Date được cho trước. Cột Date này bắt buộc phải thuộc về một bảng DATE được đánh dấu là bảng Date (date table) – cách đánh dấu một bảng là bảng date chúng ta đã học ở lab trước: https://datapot.vn/power-bi-lab-4-create-dax-calculations-in-pbi-desktop/. Hàm còn có thể có thêm (hoặc không) một đối số thứ ba thể hiện ngày cuối cùng của năm. Khi trong công thức không có phần đối số thứ ba, nghĩa là ngày cuối cùng của năm là ngày 31 tháng 12. Đối với Adventure Works, tháng 6 là tháng cuối cùng của năm, do đó 30/6 là ngày cuối cùng của năm và được thể hiện trong công thức là “6-30”.  

1.3. Thêm trường Sales và meaure Sales YTD biểu đồ ma trận. Kết quả cho thấy measure Sales YTD trả về giá trị tích lũy của doanh sô từ đầu năm cho đến ngày được tính. 

Hàm TOTALYTD() cũng thực hiện kiểm soát bộ lọc về thời gian. Ví dụ, để tính sales YTD cho tháng 9 năm 2017 (tháng thứ 3 trong năm tài chính), trong bảng Date, mọi bộ lọc đã được bỏ đi và thay bằng bộ lọc ngày mới bắt đầu từ ngày đầu tiên của năm tài chính 2017 (1 tháng 7 năm 2017) và mở rộng đến ngày cuối cùng trong giai đoạn được xét (30 tháng 9 năm 2017).

Ngoài ra, DAX có rất nhiều hàm Time Intelligence khác để kiểm soát các loại bộ lọc khác nhau. 

Task 2: Tạo measure DAX YoY growth 

2.1. Thêm vào bảng Sales một measure mới như sau:  

Công thức tính Sales YoY Growth có mệnh đề VAR – khai báo biến. Biến (variable) được sử dụng phổ biến để làm đơn giản hóa logic của công thức, đồng thời hiệu quả hơn trong trường hợp một phần công thức cần được dùng đi dùng lại trong toàn bộ phép tính. Các biến được khai báo phải có tên khác nhau, kết quả của phép tính được thể hiện sau mệnh đề với keyword là RETURN. Trong công thức trên, biến SalesPriorYear được gán cho phép tính tổng cho cột Sales khi có bộ lọc là hàm PARALLELPERIOD() – hàm này lấy ra giá trị ngày cách ngày được lọc là 12 tháng.  

2.2. Thêm measure Sales YoY Growth vào biểu đồ ma trận 

Chú ý rằng measure này sẽ trả về giá trị BLANK cho 12 tháng đầu tiên bởi vì 12 tháng này không có PARALLEL PERIOD ở trước nó 12 tháng (không có giá trị sales trước năm tài chính 2017). 

Chú ý rằng giá trị cho Sales YoY Growth cho 2018 Jul chính là giá trị Sales cho 2017 Jul.  

Bây giờ, sau khi đã tìm ra được Sales của năm trước, chúng ta sẽ tạo công thức để tính ra tỷ lệ % tăng trưởng sales.  

2.3. Để hoàn thành measure, ghi đè lên công thức cũ bằng công thức measure mới là Sales YoY Growth và đặt định dạng measure là phần trăm với hai chữ số thập phân như sau:  

Kiểm tra lại để chắc chắn rằng Sales YoY Growth 2018 Jul392.83%.

Lab 5: Create Advanced DAX Calculations in Power BI Desktop (Tạo các phép tính DAX nâng cao trong Power BI Desktop)

Điều này có nghĩa là doanh số tháng 7 năm 2018 ($2,411,559) cao hơn cùng kỳ năm trước ($489,328) là 392.83%.  

2.4. Trong Model view, chuyển 2 measure mới tạo vào chung một folder tên là Time Intelligence

Task 3: Kết thúc 

Chúng ta đã tạo xong hai measure Sales YTD và Sales YoY Growth. Lưu file Power BI Desktop của bạn. 

Xem ngay Lab 6: Design a report in Power BI Desktop – Part 1 (Thiết kế báo cáo trong Power BI Desktop – Phần 1).

Chuỗi bài hướng dẫn thực hành Power BI PL300 Lab: https://datapot.vn/category/power-bi/power-bi-pl300-lab-video/

Chia sẻ bài viết này

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *