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

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é.

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 

Cú pháp: 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):

Hàm CALCULATE

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: 

hàm CALCULATE ví dụ

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ả:

hàm calculate 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ả:  

CALCULATE4

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. 

Tìm hiểu kỹ hơn về hàm Calculate tại đây.

Hàm FILTER 

Mục đích sử dụng 

Hàm FILTER đượ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 

Cú pháp: 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

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:  

FILTER1

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: 

FILTER2

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. 

FILTER3

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,… 

Hàm ALL 

Mục đích sử dụng 

Hàm ALL đượ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

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:  

ALL1

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:  

ALL2
  • 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:  

hàm all
  • 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ề các ALL Functions khi sử dụng DAX tại đây.

Hàm SWITCH 

Mục đích sử dụng  

Hàm SWITCH 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 

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

SWITCH ( <Biểu thức>, <Giá trị>, <Kết quả> [, <Giá trị 2>, <Kết quả 2> [, … ] ] [, <Giá trị khác>] ) 

SWITCH

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:  

SWITCH1

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: 

SWITCH2

Kết quả:  

SWITCH3

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:  

hàm switch

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

SWITCH5

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:  

SWITCH6

Kết quả:  

SWITCH7

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

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.
SWITCH9

Đọc thêm về hàm SWITCH trong Power BI tại đây.

Hàm TOTALYTD / TOTALQTD / TOTALMTD 

Mục đích sử dụng 

Các hàm TOTALYTD / TOTALQTD / TOTALMTD 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 

Hàm TOTALYTD 

Hàm TOTALYTD có công thức tính như sau:  

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

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 đá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

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

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

totalqtd
  • 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

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. 

totalytd_profit

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:  

totalytd_profit1

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. 

totalytd_profit2

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. 

totalytd_profit3

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.  

totalytd_profit4

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. 

totalytd_profit5

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 
  • Các hàm thuộc bộ hàm Time Intelligence của DAX. 

Hàm USERELATIONSHIP 

Mục đích sử dụng 

Hàm USERELATIONSHIP đượ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 

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

USERELATIONSHIP(<cột 1>,<cột 2>) 

USERELATIONSHIP

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:  

USERELATIONSHIP1

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-order

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-due
USERELATIONSHIP-ship

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:

USERELATIONSHIP2

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.

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 

Hàm SUMX 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 

Cú pháp của hàm SUMX có dạng như sau:  

SUMX(<bảng>,<biểu thức tính>) 

Hàm SUMX

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

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ả:  

SUMX2

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

SUMX3

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,… 

Hàm RELATED 

Mục đích sử dụng 

Hàm RELATED 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 

Cú pháp hàm RELATED như sau: RELATED(<cột>) 

Hàm Related

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. 

RELATED1

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

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_totalsales_error

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_relationship

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ệ 

Hàm REMOVEFILTERS

Mục đích sử dụng

Hàm REMOVEFILTERS là hàm đượ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:

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

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?.

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:

top hàm dax

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 

hàm dax

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:

2 thoughts on “Top 10 hàm DAX thường dùng nhất trong Power BI kèm ví dụ chi tiết

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 *