hàm dax thường dùng

Top 10 hàm DAX thường dùng nhất trong Power BI kèm ví dụ chi tiết – phần 1

Ngày đăng: 10/05/2022

DAX (Data Analysis Expression) là một tập hợp các hàm, toán tử và hằng số có thể được dùng trong một công thức hoặc biểu thức, để tính toán và trả về một hoặc nhiều giá trị. DAX có rất nhiều hàm được chia thành các nhóm hàm như sau: Date and Time, Time Intelligence, Information, Logical, Mathematical, Statistical, Text, Parent/Child và các hàm khác.

Tuy nhiên trong thực tế, không phải lúc nào chúng ta cũng sử dụng hết tất cả các hàm DAX sẵn có, mà ngược lại, đa phần trong quá trình làm việc, chúng ta sẽ chỉ sử dụng một số hàm DAX phổ biến.

Trong bài viết này, Datapot sẽ chia sẻ tới các bạn các hàm DAX thường được sử dụng nhiều nhất trong công việc của một Data Analyst.

Ngoài ra, các bạn có thể tải file Power BI mẫu chúng mình đặt ở cuối bài viết để tham khảo và thực hành theo nhé.

Tham khảo phần 2 của top 10 hàm DAX thường được sử dụng trong phân tích dữ liệu.

Hàm CALCULATE

Mục đích sử dụng

Hàm CALCULATE được xem là hàm DAX linh hoạt và quan trọng bậc nhất của Power BI vì nó điều chỉnh ngữ cảnh bộ lọc trong phép tính toán, từ đó tính được các chỉ số mà chúng ta mong muốn. Hàm này trả về một giá trị sau khi tính toán theo biểu thức và các bộ lọc được viết tới trong công thức.  

Use cases 

Hàm CALCULATE là một hàm được sử dụng rất linh hoạt và có thể đáp ứng được nhiều nhu cầu sử dụng điển hình như: tính toán chỉ số doanh thu, lợi nhuận, chi phí,… theo nhiều bộ lọc khác nhau, kết hợp cùng các hàm khác để tính toán theo nhiều ngữ cảnh,… 

Syntax 

CALCULATE(<biểu thức tính toán>[,<bộ lọc 1>][,<bộ lọc 2>][,…])

Hàm CALCULATE sẽ hiển thị cú pháp như sau, với điều kiện bắt buộc phải có là <biểu thức tính toán> (Expression):

CALCULATE function (DAX) ví dụ 1

Ví dụ 

Sử dụng hàm CALCULATE để tính lợi nhuận của một vùng kinh doanh. 

Chúng ta có bảng sau thể hiện lợi nhuận của các vùng kinh doanh: 

CALCULATE function (DAX) ví dụ 2

Do chỉ có nhu cầu lấy dữ liệu về lợi nhuận của “France”, chúng ta viết công thức sau:

Kết quả:

CALCULATE function (DAX) ví dụ 3

Khi kết hợp với hàm FILTER, Power BI sẽ sử dụng bộ lọc trong hàm FILTER để tiến hành tính toán và trả ra kết quả duy nhất là lợi nhuận của France, nhưng sẽ không ghi đè lên các dòng dữ liệu của các vùng kinh doanh khác.  

Trong trường hợp chúng ta muốn so sánh lợi nhuận giữa các vùng với France, chúng ta không cần sử dụng hàm FILTER, mà chỉ cần dùng bộ lọc sẵn có của hàm CALCULATE như sau:  

Kết quả:  

CALCULATE function (DAX) ví dụ 4

Ngoài những cách sử dụng trên, hàm CALCULATE còn được sử dụng kết hợp với rất nhiều hàm khác để ứng dụng trong nhiều bài toán khác nhau. Chúng ta sẽ cùng nghiên cứu một số cách ứng dụng chi tiết hơn của hàm này trong những bài viết tiếp theo. 

Đọc thêm về cách sử dụng và ứng dụng của hàm CALCULATE.

Hoặc bạn có thể xem video hướng dẫn chi tết về cách sử dụng hàm CALCULATE tại kênh YouTube của Datapot.

Hàm FILTER

Mục đích sử dụng

Hàm FILTER là một hàm DAX được sử dụng để thêm điều kiện lọc theo dòng. Kết quả trả về của hàm FILTER là một bảng (hoặc một bảng chứa một hoặc nhiều cột) chứa các giá trị thỏa mãn điều kiện lọc. Do đó, hàm FILTER không được sử dụng một cách độc lập như 1 công thức mà thường được sử dụng kết hợp với các hàm khác cần sử dụng tới một bảng chứa các giá trị đã được lọc. 

Use cases

Một số trường hợp sử dụng hàm FILTER phổ biến có thể kể đến như: lọc dòng trong bảng theo một số điều kiện, tạo bảng gồm các giá trị được lọc và kết hợp trong các công thức để tính toán giá trị,… 

Syntax

FILTER(<bảng>,<bộ lọc>) 

Cú pháp trong Power BI desktop như sau, cả 2 điều kiện bảng và bộ lọc đều là bắt buộc khi sử dụng hàm này: (FILTER_1) 

FILTER function (DAX) ví dụ 1

Như đã giải thích ở trên, hàm FILTER trả ra kết quả là một bảng, khi sử dụng độc lập để viết measure, PBI sẽ báo lỗi:  

hàm FILTER ví dụ 2

Tuy nhiên chúng ta có thể sử dụng hàm FILTER để tạo ra một bảng mới chứa các giá trị thỏa mãn điều kiện lọc: 

FILTER function (DAX) ví dụ 2

Ví dụ

Trong phần trên, chúng ta đã biết cách sử dụng hàm FILTER kết hợp với hàm CALCULATE. Hàm FILTER còn có thể được sử dụng với nhiều điều kiện lọc bằng cách kết hợp toán tử AND (dấu &&), OR (dấu ||).  

Ví dụ 1: Tính lợi nhuận của các loại sản phẩm có chi phí sản xuất nhỏ hơn 5 và thuế nhỏ hơn 5. 

FILTER function (DAX) ví dụ 3

Chúng ta nhận thấy kết quả của công thức có sử dụng hàm FILTER có sự khác biệt lớn với công thức tính lợi nhuận không sử dụng hàm filter. Công thức này chỉ tính tổng chi phí của các loại sản phẩm có chi phí nhỏ sản xuất nhỏ hơn 5 và thuế nhỏ hơn 5.  

Lưu ý khi sử dụng

Hàm FILTER chỉ trả kết quả lọc theo dòng, không lọc theo cột. Trong trường hợp cần lọc theo cột, chúng ta có thể sử dụng hàm SELECTCOLUMNS, ADDCOLUMNS,…

Đọc thêm về phân biệt giữa hàm FILTER và hàm FILTERS

Hàm ALL

Mục đích sử dụng

Hàm ALL là một hàm DAX được sử dụng để loại bỏ hoặc điều chỉnh các điều kiện lọc. Hàm ALL trả ra kết quả là một bảng dữ liệu, do đó hàm này không thể sử dụng độc lập trong measure mà cần sử dụng kết hợp với các hàm có điều kiện cho phép sử dụng bảng. Hàm này có thể sử dụng để tạo ra một bảng mới.  

Use cases

Hàm ALL thường được sử dụng để tính tỉ lệ phần trăm đóng góp của một yếu tố trong tổng thể. Ví dụ chúng ta cần tính tỉ lệ phần trăm lợi nhuận của một sản phẩm so với tổng lợi nhuận, tỉ lệ phần trăm chi phí sản xuất của một loại sản phẩm so với tổng chi phí,… 

Hàm ALL cũng thường được sử dụng để kiểm soát tương tác giữa các bộ lọc. Hàm ALL rất tiện dụng trong trường hợp chúng ta cần hạn chế một số bộ lọc để không ảnh hưởng tới kết quả tính toán cuối cùng.  

Syntax

Hàm ALL có cú pháp như sau:  

ALL(<bảng>)

Hoặc  

ALL(<cột 1>[,<cột 2]…)

Chúng ta quan sát cú pháp trên Power BI Desktop như sau:  

ALL function (DAX) ví dụ 1

Hàm ALL không có điều kiện bắt buộc khi viết công thức, chúng ta có thể viết ALL () hoặc ALL (<bảng>) hoặc ALL (<cột>), tùy vào lựa chọn bỏ qua bộ lọc của người dùng.  

Ví dụ

Chúng ta có bảng thể hiện doanh thu bán hàng tại từng quốc gia và 3 bộ lọc: theo loại sản phẩm, giới tính khách hàng và loại giảm giá như hình dưới đây:  

ALL function (DAX) ví dụ 2

Hình dưới đây là kết quả sau khi sử dụng hàm ALL để loại bỏ một số bộ lọc:  

ALL function (DAX) ví dụ 3
  • Trong cột 2: Hàm ALL ở đây đã loại bỏ bộ lọc Country, do đó cột này chỉ hiển thị tổng doanh thu của tất cả các nước, mà không hiển thị doanh thu theo từng nước như cột Sales_amount nữa.  
  • Trong cột 3 và 4: Hàm ALL loại bỏ bộ lọc Product và Customer, bộ lọc Country không bị loại bỏ nên giá trị doanh thu vẫn hiển thị theo từng quốc gia.  
  • Trong cột 5: Hàm ALL không chỉ rõ loại bỏ bộ lọc nào khi đó PBI sẽ tự động tiến hành loại bỏ toàn bộ các bộ lọc áp dụng lên công thức.  

Chúng ta quan sát sự thay đổi của các cột sử dụng hàm ALL khác nhau sau khi sử dụng thêm bộ lọc Dim Product – Category (1 bộ lọc đến từ bảng Product) trong hình sau:  

ALL function (DAX) ví dụ 4
  • Cột 1: Giá trị hiển thị là doanh thu của loại sản phẩm Clothing theo từng quốc gia.  
  • Cột 2: Giá trị hiển thị là doanh thu của sản phẩm Clothing của tất cả các quốc gia. 
  • Cột 3: Giá trị hiển thị không thay đổi so với hình trên, vẫn hiển thị doanh thu của tất cả loại sản phẩm theo từng quốc gia.  
  • Cột 4: Giá trị hiển thị tương tự như cột 1. 
  • Cột 5: Giá trị không thay đổi so với hình trên.  

Lưu ý khi sử dụng

  • Khi sử dụng hàm ALL kèm bảng, kết quả sẽ trả về 1 bảng bao gồm cả các giá trị trùng lặp.  
  • Khi sử dụng hàm ALL kèm 1 cột, kết quả sẽ trả về 1 cột gồm các giá trị duy nhất của cột. 
  • Khi sử dụng hàm ALL kèm nhiều cột, kết quả sẽ trả về các cột, và giá trị được trả về là các giá trị kết hợp duy nhất của các cột này.  

Gợi ý một số hàm liên quan

Đọc thêm về phân biệt các hàm ALL trong Power BI.

Hàm SWITCH

Mục đích sử dụng

Hàm SWITCH là một hàm DAX trả về những kết quả khác nhau dựa trên giá trị của biểu thức nhập vào. Hiểu một cách đơn giản, hàm SWITCH là hàm thường được sử dụng thay thế cho hàm IF trong trường hợp có nhiều điều kiện với nhiều mệnh đề. Khi đó, hàm SWITCH sẽ thể hiện tốt hơn hàm IF về mặt tốc độ xử lý, khả năng đọc, sửa. Hàm SWITCH rất đa dụng và là một trong số những hàm DAX thường được sử dụng nhất trong PBI.  

Use cases

Ứng dụng đầu tiên và cơ bản nhất của hàm SWITCH là để kiểm tra TRUE, FALSE của một hoặc nhiều giá trị đã cho. Hàm SWITCH cũng thường được dùng khi cần tạo thêm một cột dữ liệu mới dựa trên các điều kiện của cột dữ liệu khác. Ngoài ra, hàm SWITCH còn có thể được sử dụng như một hàm chỉnh sửa conditional formatting, hoặc thay thế bookmark,… 

Syntax

SWITCH ( <Biểu thức>, <Giá trị>, <Kết quả> [, <Giá trị 2>, <Kết quả 2> [, … ] ] [, <Giá trị khác>] )
SWITCH function (DAX) ví dụ 1

Trong đó:  

  • Biểu thức/Expression: Là biểu thức chúng ta cần xác định giá trị có phù hợp để trả ra kết quả như mong đợi 
  • Giá trị: Nếu biểu thức có chứa giá trị này, thì kết quả tương ứng sẽ được trả về. 
  • Kết quả: Kết quả được trả về nếu biểu thức có chứa giá trị tương ứng. 
  • Giá trị khác (không bắt buộc nhập): Nếu biểu thức không chứa giá trị nào như đã quy định, thì kết quả trả về giá trị khác.  

Ví dụ

Chúng ta có danh sách các quốc gia theo địa chỉ mua của khách hàng như sau:  

SWITCH function (DAX) ví dụ 2

Do nhu cầu, chúng ta cần phân loại các quốc gia này theo châu lục. Để thực hiện được điều này, chúng ta tạo thêm cột mới trong bảng Geography (Customer) và sử dụng hàm SWITCH: 

SWITCH function (DAX) ví dụ 3

Kết quả:  

SWITCH function (DAX) ví dụ 4

Tuy nhiên, khi viết hàm SWITCH với biểu thức là ‘Geography (Customer)’[Country], chúng ta phải liệt kê tên từng quốc gia mà không thể sử dụng các toán tử OR, AND,… đồng thời cũng gặp vấn đề về dạng dữ liệu (data type). Điều này dẫn đến việc United States và Canada tuy đều thuộc America nhưng phải liệt kê 2 lần. Khi chúng ta viết OR || trong SWITCH, PBI sẽ báo lỗi như sau:  

SWITCH function (DAX) ví dụ 5

Để giải quyết cả 2 vấn đề này, chúng ta sẽ sử dụng SWITCH( TRUE() ):  

SWITCH function (DAX) ví dụ 6

SWITCH( TRUE() ) có biểu thức là TRUE(), biểu thức này sẽ khiến hàm SWITCH xem xét trả về kết quả mà  giá trị không trùng khớp tuyệt đối với giá trị được nhập. Chúng ta tham khảo thêm một ví dụ để hiểu rõ hơn về sự tiện dụng của hàm SWITCH( TRUE() ) như sau:  

SWITCH function (DAX) ví dụ 7

Kết quả:  

SWITCH function (DAX) ví dụ 8

Nếu chúng ta chỉ sử dụng SWITCH, công thức sẽ báo lỗi:  

SWITCH function (DAX) ví dụ 9

Lưu ý khi sử dụng

  • Phân biệt giữa cách sử dụng SWITCH và SWITCH (TRUE()) để công thức trả ra kết quả chính xác.  
  • Chú ý tới dạng dữ liệu (data type) khi viết công thức. Nếu muốn so sánh với số, định dạng dữ liệu của cột cũng phải là số. Xem xét lại ví dụ về nhóm tuổi khách hàng, data type của cột Customer[Age] là Whole number, do đó chúng ta mới có thể thực hiện so sánh và trả ra kết quả. Nếu chúng ta đổi định dạng cột này thành text, công thức sẽ báo lỗi không thể so sánh giữa text và integer.
SWITCH function (DAX) ví dụ 10

Đọc thêm về hàm SWITCH trong Power BI.

Hàm TOTALYTD / TOTALQTD / TOTALMTD

Mục đích sử dụng

Các hàm TOTALYTD / TOTALQTD / TOTALMTD là các hàm DAX trực thuộc bộ hàm Time Intelligence của DAX. Các hàm này đều trả về một giá trị, tùy theo bối cảnh được lựa chọn.  

Hàm TOTALYTD đánh giá biểu thức được nhập và trả về giá trị là kết quả lũy kế của biểu thức từ ngày đầu năm tới hiện tại (hoặc ngày được lựa chọn trong 1 số filter ngày tháng). 

Hàm TOTALQTD đánh giá biểu thức được nhập và trả về giá trị là kết quả lũy kế của biểu thức từ ngày đầu quý tới hiện tại (hoặc ngày được lựa chọn trong 1 số filter ngày tháng). 

Hàm TOTALMTD đánh giá biểu thức được nhập và trả về giá trị là kết quả lũy kế của biểu thức từ ngày đầu tháng tới hiện tại (hoặc ngày được lựa chọn trong 1 số filter ngày tháng). 

Use cases

Các hàm này thường dùng để giải quyết bài toán kinh doanh yêu cầu tính doanh thu, lợi nhuận,… lũy kế từ đầu kì.  

Syntax

TOTALYTD(<biểu thức>,<cột ngày tháng năm>[,<bộ lọc>][,<ngày kết thúc năm>]) 
TOTALYTD function (DAX)

Trong đó:

  • Biểu thức – Expression: Biểu thức trả về một giá trị 
  • Cột ngày tháng năm – Dates: Tên 1 cột chứa ngày tháng năm, hoặc tên 1 bảng chỉ chứa 1 cột ngày tháng năm. 
  • Bộ lọc – Filter (không bắt buộc): Một biểu thức True/False (boolean) hoặc một biểu thức trả về bảng dùng làm bộ lọc cho biểu thức TOTALYTD. 
  • Ngày kết thúc năm – YearEndDate (không bắt buộc): Ngày kết thúc năm. Giá trị mặc định là 31/12. 

Hàm TOTALQTD

Mục đích sử dụng

Giống như đã nhắc ở trên, hàm TOTALQTD là một hàm DAX đánh giá biểu thức được nhập và trả về giá trị là kết quả lũy kế của biểu thức từ ngày đầu quý tới hiện tại (hoặc ngày được lựa chọn trong 1 số filter ngày tháng). 

Use cases

Các hàm này thường dùng để giải quyết bài toán kinh doanh yêu cầu tính doanh thu, lợi nhuận,… lũy kế từ đầu quý tới hiện tại.

Syntax

TOTALQTD(<biểu thức>,<cột ngày tháng năm>[,<bộ lọc>]) 
TOTALQTD function (DAX)
  • Biểu thức – Expression: Biểu thức trả về một giá trị 
  • Cột ngày tháng năm – Dates: Tên 1 cột chứa ngày tháng năm, hoặc tên 1 bảng chỉ chứa 1 cột ngày tháng năm. 
  • Bộ lọc – Filter (không bắt buộc): Một biểu thức True/False (boolean) hoặc một biểu thức trả về bảng dùng làm bộ lọc cho biểu thức TOTALQTD. 

Hàm TOTALMTD

Syntax

Hàm TOTALMTD có công thức tính tương tự như hàm TOTALQTD như sau:  

TOTALMTD(<biểu thức>,<cột ngày tháng năm>[,<bộ lọc>]) 
TOTALMTD function (DAX)

Ví dụ

Bảng dữ liệu AdventureWorks chứa dữ liệu kinh doanh từ 1/1/2018 tới 30/6/2021, vì vậy khi sử dụng các hàm TOTALYTD/TOTALQTD/TOTALMTD mà không có bộ lọc nào được nhắc đến, kết quả được trả ra sẽ là kết quả của năm 2021. Trong ví dụ này, chúng ta sẽ cùng tìm hiểu về cách hoạt động của hàm TOTALYTD. 

TOTALMTD function (DAX) ví dụ 1

Khi sử dụng bộ lọc Date trên slicer và chọn khoảng thời gian từ 1/1/2018 đến 31/12/2020, chúng ta sẽ nhận được kết quả như sau:  

TOTALMTD function (DAX) ví dụ 2

Lúc này, cột YTD Profit chứa kết quả lợi nhuận từ 1/1/2020 đến 31/12/2020, trong khi cột Total Profit chứa kết quả lợi nhuận từ 1/1/2018 đến 31/12/2020. Do đó, nếu chỉ sử dụng cột Total Profit mà muốn biết kết quả lợi nhuận từ 1/1/2020 đến 31/12/2020, chúng ta cần chọn trên slicer khoảng thời gian từ 1/1/2020 đến 31/12/2020. 

TOTALMTD function (DAX) ví dụ 3

Dù chọn ngày bắt đầu trên slicer là bất kể ngày nào trong năm 2020, kết quả của cột YTD Profit luôn được tính từ ngày 1/1/2020. 

TOTALMTD function (DAX) ví dụ 4

Khi chọn ngày kết thúc trên slicer là một ngày bất kì trong năm 2020, kết quả của cột YTD Profit sẽ là lũy kế lợi nhuận từ ngày 1/1/2020 tới ngày được chọn.  

TOTALMTD function (DAX) ví dụ 5

Và nếu lựa chọn ngày kết thúc trên slicer là một ngày của năm 2021, kết quả của cột YTD Profit lúc đó sẽ chỉ chứa lợi nhuận lũy kế từ ngày 1/1/2021 tới ngày được chọn. 

TOTALMTD function (DAX) ví dụ 6

Lưu ý khi sử dụng

  • Đối với hàm TOTALYTD/TOTALQTD/TOTALMTD nói riêng và các hàm Time Intelligence nói chung, bảng date được sử dụng phải chứa đủ các ngày trong năm, bắt đầu từ ngày 1/1 và kết thúc vào ngày 31/12. Nếu sử dụng năm tài chính, bảng date phải bắt đầu từ ngày đầu tiên của năm tài chính và kết thúc vào ngày cuối cùng của năm tài chính.  
  • Bảng date phải có 1 cột có định dạng date/datetime chỉ chứa các giá trị riêng biệt.
  • Bảng date nên được Mark as date table. 

Gợi ý một số hàm liên quan

  • DATESYTD, DATESQTD, DATESMTD 

Tổng hợp các hàm Time Intelligence trong Power BI.

Hàm USERELATIONSHIP

Mục đích sử dụng

Hàm USERELATIONSHIP là một hàm DAX được dùng để xác định mối quan hệ giữa hai bảng mà chúng ta cần sử dụng khi tính toán trong các hàm, trong trường hợp giữa hai bảng có nhiều hơn 1 mối quan hệ. Hàm này không trả về giá trị nào mà chỉ có tác dụng bật mối quan hệ của hai bảng trong hàm tính toán có sử dụng hàm USERELATIONSHIP. 

Use cases

Trong thực tế, khi xây dựng model trong Power BI, có những trường hợp mà chúng ta nối hai bảng với nhau bằng một quan hệ active và một (hoặc nhiều) quan hệ inactive (thể hiện bằng đường nối nét đứt). Tuy nhiên, đôi khi chúng ta lại cần lựa chọn những mối quan hệ giữa hai bảng ấy để phục vụ tính toán các chỉ số. Một số ứng dụng thường thấy nhất của hàm USERELATIONSHIP là để sử dụng linh hoạt mối quan hệ giữa bảng Date và một bảng khác, ví dụ như bảng fact thể hiện giao dịch của một doanh nghiệp. Do trên bảng fact giao dịch này có thể có ngày tạo đơn hàng, ngày giao hàng, ngày đơn hàng chuyển trạng thái hoàn thành,… nhưng khi tính toán, chúng ta không chỉ muốn tính số đơn hàng dựa trên ngày tạo đơn, mà muốn tính toán số đơn dựa trên ngày giao hàng, hay ngày hoàn thành đơn hàng. Lúc này, sử dụng hàm USERELATIONSHIP trong công thức tính toán sẽ giúp chúng ta sử dụng được các mối quan hệ về ngày theo mong muốn. 

Syntax

USERELATIONSHIP(<cột 1>,<cột 2>) 
USERELATIONSHIP function (DAX) ví dụ 1

Cột 1 – ColumnName1: PK (hoặc FK) của 1 bảng trong 2 bảng có mối quan hệ 

Cột 2 – ColumnName 2: FK (hoặc PK) của bảng còn lại trong 2 bảng có mối quan hệ 

Ví dụ 

Quan sát 2 bảng Internet Sales và bảng Date đang có mối quan hệ như sau:  

USERELATIONSHIP function (DAX) ví dụ 2

Mối quan hệ đang active (được thể hiện bằng đường nối liền) giữa 2 bảng là cột Date (bảng Date) và cột OrderDate (bảng Internet Sales).  

USERELATIONSHIP function (DAX) ví dụ 3

Ngoài ra, 2 bảng này còn được nối với nhau bởi 2 mối quan hệ inactive (thể hiện bằng đường nét đứt) là: Date – DueDate, Date – ShipDate. 

USERELATIONSHIP function (DAX) ví dụ 4
USERELATIONSHIP function (DAX) ví dụ 5

Chúng ta tính tổng lợi nhuận của doanh nghiệp theo mỗi quốc gia, sử dụng 3 công thức với 3 mối quan hệ khác nhau bằng hàm USERELATIONSHIP và được kết quả như sau:

USERELATIONSHIP function (DAX) ví dụ 6

Chúng ta lọc xem lợi nhuận trong năm tài chính 2020, nhận thấy lợi nhuận của mỗi quốc gia đều có sự khác biệt khi dùng những mối quan hệ về ngày khác nhau. Theo công thức tính trong cột lợi nhuận theo order date, công thức đã tính lợi nhuận của theo các đơn hàng được đặt trong năm tài chính 2020. Tuy nhiên, do có sự chênh lệch giữa ngày đặt hàng và ngày khách nhận hàng, có thể sang năm tài chính 2021 đơn hàng đó mới được ship đến khách hàng, và khi đó đơn hàng được tính vào lợi nhuận của năm 2021, nếu sử dụng mối quan hệ date và ship date. Việc sử dụng mối quan hệ nào để tính toán hoàn toàn tùy thuộc vào nhu cầu của người sử dụng.  

Lưu ý khi sử dụng

  • Trong trường hợp hai bảng 1 mối quan hệ active và nhiều mối quan hệ inactive, nếu khi viết công thức không sử dụng hàm USERELATIONSHIP để bật mối quan hệ inactive, công thức sẽ tự động sử dụng mối quan hệ đang active giữa 2 bảng để tính toán.  
  • Hàm USERELATIONSHIP có thể sử dụng trên mối quan hệ đang active, trong trường hợp chúng ta muốn làm rõ các điều kiện trong công thức tính.  
  • Chỉ có thể sử dụng hàm USERELATIONSHIP đối với các bảng đã có mối quan hệ. 
  • Hàm USERELATIONSHIP thường được sử dụng cùng các hàm như: CALCULATE, CALCULATETABLE, TOTALYTD, TOTALQTD, TOTALMTD,… 
  • Trong trường hợp viết nhiều hàm CALCULATE lồng nhau và có sử dụng nhiều lần hàm USERELATIONSHIP, hàm USERELATIONSHIP nằm trong hàm CALCULATE trong cùng sẽ được sử dụng để tính toán.

Đọc thêm về hàm USERELATIONSHP.

Hàm SUMX

Mục đích sử dụng

Thông thường chúng ta sử dụng hàm SUM để tính tổng trên một cột duy nhất, tuy nhiên, với hàm SUMX, chúng ta có thể mở rộng phép tính tổng của mình ra nhiều cột khác nhau. Cú pháp của hàm SUMX yêu cầu hai đối số là bảng và biểu thức, hàm này sẽ hoạt động theo phương thức: quét từng dòng trong bảng, tính toán theo biểu thức, và trả về kết quả tổng.  

Use cases

SUMX là hàm DAX thường được sử dụng trong những trường hợp cần tính toán kết quả theo từng dòng, dựa trên nhiều cột. Hàm SUMX cũng là hàm cho phép sử dụng đối số là một bảng trong công thức, do đó chúng ta có thể kết hợp với các hàm trả về giá trị bảng để tính toán.  

Syntax

SUMX(<bảng>,<biểu thức tính>) 
SUMX function (DAX) ví dụ 1

Trong đó:

  • Bảng – Table: Bảng chứa giá trị mà biểu thức cần tính toán  
  • Biểu thức tính – Expression: Biểu thức cần tính toán. Biểu thức có thể là phép cộng, trừ, nhân, chia. 

Ví dụ

Chúng ta tính lợi nhuận của các loại sản phẩm dựa vào công thức: Số lượng bán * Giá bán.  

SUMX function (DAX) ví dụ 2

Ngoài ra, hàm SUMX nhận bảng là một đối số, do đó chúng ta có thể sử dụng các hàm trả về giá trị một bảng. Chúng ta kết hợp hàm FILTER và hàm SUMX để tính số thuế phải trả của các khách hàng trong độ tuổi 45-55 tuổi như sau:  

Trước hết, viết công thức tính tổng số thuế phải trả:  

SUMX function (DAX) ví dụ 3

Kết hợp hàm SUMX và hàm FILTER để tạo bộ lọc, được kết quả như sau:  

SUMX function (DAX) ví dụ 4

Lưu ý khi sử dụng

  • Hàm SUMX chỉ tính toán dựa trên giá trị là số. Các giá trị khác như văn bản, giá trị rỗng hoặc giá trị logic sẽ không được tính.  
  • Trong trường hợp có thể sử dụng SUM để thay thế hàm SUMX, chúng ta nên sử dụng SUM, do hàm SUMX tốn nhiều tài nguyên để xử lí hơn.  

Gợi ý một số hàm liên quan

Hàm SUMX là hàm thuộc bộ hàm Iterator của DAX, do đó có thể tham khảo thêm các hàm tương tự như: AVERAGEX, MAXX, MINX,… 

Đọc thêm về hàm SUMX.

Hàm RELATED

Mục đích sử dụng

RELATED là hàm DAX trả về một giá trị liên quan đến dòng trong bảng từ một bảng khác. Khi sử dụng hàm RELATED, hai bảng được tham chiếu bắt buộc phải có mối quan hệ 1 – nhiều hoặc 1 – 1. Khi tham chiếu, chúng ta bắt buộc phải dùng bảng gốc là bảng nằm ở đầu nhiều của mối quan hệ, và bảng tham chiếu là bảng nằm ở đầu 1 của mối quan hệ.  

Hàm RELATED trả về giá trị tham chiếu theo dòng, do đó hàm này có thể sử dụng khi viết công thức, hoặc tạo cột mới trong bảng.  

Use cases

Hàm RELATED thường được sử dụng trong các hàm tính toán cần lấy giá trị giữa 2 bảng có mối quan hệ.  

Syntax

RELATED(<cột>) 
RELATED function (DAX) ví dụ 1

Ví dụ

Chúng ta cần tính doanh thu dựa trên công thức: số lượng sản phẩm bán * giá sản phẩm. Tuy nhiên, giá sản phẩm lại nằm trên bảng Product, và số lượng bán lại nằm trên bảng Sales, và 2 bảng được nối với nhau bằng mối quan hệ 1 – nhiều. 

RELATED function (DAX) ví dụ 2

Chúng ta viết công thức tính tổng doanh thu như sau:

RELATED function (DAX) ví dụ 3

Cần lưu ý về cột được sử dụng trong hàm RELATED. Trong công thức này, cột ListPrice thuộc bảng Product là một bảng Dim, nằm ở chiều 1 của mối quan hệ 1 – nhiều, do đó nó có thể được đặt trong hàm RELATED. Nếu chúng ta đảo chiều và đặt trong hàm RELATED cột OrderQuantity của bảng Internet Sales – một bảng fact nằm ở chiều nhiều của mối quan hệ, thì công thức sẽ báo lỗi.  

RELATED function (DAX) ví dụ 4

Lưu ý khi sử dụng

  • Hàm RELATED chỉ sử dụng được khi các bảng đã được thiết lập mối quan hệ với nhau. 
  • Hàm RELATED chỉ trả về một giá trị tương ứng, do đó hàm RELATED không thể sử dụng với các bảng có mối quan hệ nhiều – nhiều. Đối với 2 bảng có mối quan hệ 1 – nhiều, hàm RELATED sẽ lấy giá trị từ bảng nằm ở chiều 1 của mối quan hệ và trả sang bảng nằm ở mối quan hệ chiều nhiều của mối quan hệ.  
  • Hàm RELATED có thể được sử dụng để tham chiếu giữa nhiều bảng, miễn là các bảng đều thỏa mãn mối quan hệ 1 – nhiều và chiều tham chiếu. Ví dụ trong hình dưới, chúng ta có thể lấy dữ liệu từ bảng SubCat và trả về bảng Internet Sales do mối quan hệ của SubCat – Product là 1-n và mối quan hệ của Product – Internet Sales cũng là 1-n. Hàm RELATED sẽ không hoạt động ở chiều ngược lại. 
RELATED function (DAX) ví dụ 5

Gợi ý một số hàm liên quan

  • Hàm LOOKUPVALUE: tham chiếu giá trị giữa hai bảng không có mối quan hệ 
  • Hàm TREATAS: tạo mối quan hệ ảo giữa hai bảng không có mối quan hệ 

Đọc thêm về hàm RELATED.

Hàm REMOVEFILTERS

Mục đích sử dụng

REMOVEFILTERS là hàm DAX được sử dụng để bỏ điều kiện lọc trong filter context.  

Syntax

REMOVEFILTERS([<TableNameOrColumnName>[, < ColumnName>[, < ColumnName>[,…]]]]) 

Trong đó: 

  • <TableNameOrColumnName>: (Tham số bắt buộc) Bảng hoặc cột dữ liệu mà bạn muốn bỏ điều kiện lọc 
  • <ColumnName>: (Tham số tùy chọn) Một cột nằm trong bảng bắt buộc 

Hàm REMOVEFILTERS là một hàm tương đối giống với hàm ALL. Tuy nhiên, chúng có điểm khác nhau là hàm REMOVEFILTERS chỉ loại bỏ các điều kiện lọc mà không tạo ra kết quả gì, còn hàm ALL sẽ trả ra kết quả là một bảng giá trị đã bỏ hết các điều kiện lọc.

Ví dụ

Cho 1 cơ sở dữ liệu gồm 2 bảng là Sales vs Products. Tính tỷ lệ phần trăm doanh thu của từng nhóm sản phẩm (Subcategory) 

Bài giải: Để giải bài toán tính tỷ lệ %, chúng ta bắt đầu với việc tính toán 2 giá trị là:  

+ Doanh thu của từng nhóm sản phẩm (Revenue)

+ Doanh thu Total hay Doanh thu RemoveFilters (Bỏ hết các điều kiện lọc)

Trong công thức này, RemoveFilters đã loại bỏ điều kiện lọc Subcategory ở visual và trả kết quả là toàn bộ giá trị Revenue của toàn bộ các nhóm sản phẩm. 

Cuối cùng là tỷ lệ % doanh thu của từng nhóm sản phẩm:

REMOVEFILTERS function (DAX)

Đọc thêm về hàm REMOVEFILTERS.

Hàm RANKX

Mục đích sử dụng

Hàm RANKX trong Power BI là một hàm tính toán dùng để xếp hạng dữ liệu trong một bảng theo một tiêu chí cụ thể. Nó cho phép bạn đánh giá và xếp hạng các giá trị dựa trên các biểu thức hoặc giá trị của cột khác trong bảng dữ liệu. 

Syntax

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])

Trong đó: 

  • Table: (tham số bắt buộc) Bảng đại diện cho bảng dữ liệu mà bạn muốn áp dụng hàm RANKX lên. 
  • Expression: (tham số bắt buộc) Đây là một biểu thức hoặc một cột trong bảng dữ liệu, sẽ được sử dụng để xác định tiêu chí xếp hạng. 
  • Value: (tham số tùy chọn) Đây là giá trị mà bạn muốn xếp hạng. 
  • Order: (tham số tùy chọn): Đây là thâm số để xác định thứ tự sắp xếp của kết quả xếp hạng. Giá trị mặc định là “DESC” (giảm dần), bạn cũng có thể sử dụng “ASC” (tăng dần). 
  • Ties: (tham số tùy chọn): Đây là tham số để thể hiện cách xử lý các giá trị trùng nhau trong xếp hạng. Giá trị mặc định là “Skip” (bỏ qua), bạn cũng có thể sử dụng “Dense” (xếp hạng mật độ) hoặc “Ordinal” (xếp hạng thứ tự). 

Hàm RANKX sẽ trả về một số nguyên đại diện cho vị trí xếp hạng của giá trị trong biểu thức hoặc cột được xác định. Vị trí xếp hạng cao nhất sẽ có giá trị 1, vị trí xếp hạng thấp nhất sẽ có giá trị lớn nhất tùy thuộc vào số lượng giá trị trong bảng dữ liệu. 

Ví dụ

Cho 1 cơ sở dữ liệu gồm 2 bảng là Sales vs Products. Yêu cầu xếp hạng doanh thu theo từng nhóm sản phẩm (Subcategory) theo chiều từ cao xuống thấp?.

RANKX function (DAX) ví dụ 1

Bài giải: Với yêu cầu xếp hạng thu theo từng nhóm sản phẩm (Subcategory) theo chiều từ cao xuống thấp, chúng ta cùng sử dụng hàm RANK với các đối số lần lượt là: 

  • Table: ALL (‘Product'[Subcategory]) –  Bảng dữ liệu gồm 1 cột chứa các giá trị không trùng lặp tên các nhóm sản phẩm.  
  • Expression: Biểu thức tính doanh thu (Revenue) 
  • Order: Desc 
  • Các đối số còn lại (Value hay Ties): Mặc định 

Từ đó, chúng ta sẽ được hàm tính như sau:

RANKX function (DAX) ví dụ 2

Lưu ý khi sử dụng

Hàm RANKX thường được kết hợp với hàm ALL hoặc ALLSELECTED trong Power BI để tạo ra xếp hạng dựa trên toàn bộ dữ liệu, bất kể các bộ lọc hoặc nhóm đã áp dụng trong báo cáo. Khi sử dụng hàm RANKX mà không kết hợp với ALL hay ALLSELECTED, kết quả xếp hạng có thể bị ảnh hưởng bởi bộ lọc hiện tại hoặc các yếu tố khác trong báo cáo. 

Tuy nhiên, lựa chọn ALL hay ALLSELECTED cũng cần phải cân nhắc vào nhu cầu sử dụng của mỗi người. Điều này được thể hiện rõ nhất khi chúng ta add thêm 1 slicer Subcategory để lọc dữ liệu 

RANKX function (DAX) ví dụ 3

Đọc thêm về hàm RANKX và những điều có thể bạn chưa biết!

Tạm kết

File mẫu thực hành top 10 hàm DAX: Datapot_DAX Sample_V1

Trên đây, Datapot đã chia sẻ tới các bạn các hàm DAX phổ biến nhất trong Power BI. Các nội dung này đều nằm trong chương trình giảng dạy trong khóa học Power BI của Datapot. Việc làm chủ các công thức DAX thường sử dụng sẽ giúp bạn giải quyết được tương đối các bài toán kinh doanh với vai trò của một Data Analyst.

Ngoài ra, các bạn có thể đọc thêm các công thức DAX trong tài liệu của Microsoft, mình sẽ để link ở đây nha: https://docs.microsoft.com/en-us/dax/.

Các khóa học Phân tích dữ liệu với Power BI tại Datapot:

Click vào ảnh bên dưới để kết nối với cộng đồng Data Analytics bạn nhé.

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

2 những suy nghĩ trên “Top 10 hàm DAX thường dùng nhất trong Power BI kèm ví dụ chi tiết – phần 1

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 *