DAX (Data Analysis Expression) trong Power BI 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.
Điều đáng quan tâm là 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 khoảng 20% trên tổng số hàm có sẵn.
Trong bài viết này, Datapot sẽ chia sẻ tiếp tới các bạn các hàm DAX thường được sử dụng nhiều trong công việc của một Data Analyst.
Trước khi đi vào phần 2, hay cùng ôn lại các hàm DAX ở phần 1:
- Hàm CALCULATE
- Hàm FILTER
- Hàm ALL
- Hàm SWITCH
- Hàm TOTALYTD
- Hàm TOTALQTD
- Hàm TOTALMTD
- Hàm USERELATIONSHIP
- Hàm SUMX
- Hàm RELATED
- Hàm REMOVEFILTERS
- Hàm RANKX
Nếu bạn chưa đọc phần này thì đừng bỏ lỡ nhé: Top 10 hàm DAX – phần 1
Tiếp theo đây, xin được giới thiệu tới bạn đọc 10 hàm DAX mà bạn không nên bỏ qua trong việc tạo các measures, cột tính và thao tác với bảng. Chúng ta hãy cũng tìm hiểu về các tìm hiểu về các hàm này cũng như ví dụ về cách ứng dụng của hàm trong thực tế nhé.
Mục lục
HÀM AVERAGEX
Mục đích sử dụng
Hàm AVERAGEX sẽ tính trung bình dựa trên 1 biểu thức trong 1 bảng. Hàm này thuộc nhóm hàm tổng hợp, thường dùng khi bạn muốn thực hiện các phép tính toán, thống kê.
Syntax
Cú pháp của hàm:
AVERAGEX(<tên bảng>, <biểu thức>)
- <bảng>: bảng muốn tính giá trị trung bình
- <biểu thức>: biểu thức tính toán áp dụng cho từng dòng trong bảng để tính giá trị trung bình
Uses case
Cũng như hàm AVERAGE, hàm AVERAGEX được sử dụng trong việc tính toán giá trị trung bình của doanh số, doanh thu, số lượng bán,… và giá trị trung bình sẽ được tính dựa vào biểu thức tính doanh số hay số lượng bán. Để cụ thể hơn mời bạn xem ví dụ bên dưới.
Ví dụ
Chúng ta sẽ có bảng sales_table với các cột Product ID, Quantity và Price, để tính trung bình của doanh số chúng ta sẽ sử dung công thức DAX sau:

Trong đó doanh số = quantity * price
Tim hiểu thêm về hàm AVERAGEX.
HÀM DISTINCTCOUNT
Mục đích sử dụng
Hàm DISCTINCTCOUNT sẽ đếm từng giá trị trong một cột, nhưng mỗi giá trị sẽ chỉ được đếm 1 lần và không lặp lại (tức chỉ đếm giá trị lần đầu xuất hiện)
Syntax
Cú pháp của hàm:
DISCTINTCOUNT(<tên bảng[cột]>)
Uses case
Hàm DISCTINCTCOUNT có thể được sử trong việc đếm các sản phẩm theo tên trong một danh mục sản phẩm để biết được có bao nhiêu sản phẩm đã được bán trong danh mục này.
Ví dụ
Ở ví dụ này chúng sẽ có bảng order_table với các cột là Category, Order ID, Product Name, Quantity và Sale. Để đếm số sản phẩm được bản theo danh mục nhưng chỉ lấy giá trị đầu tiền, ta sẽ sử dụng công thức DAX sau:

Tim hiểu thêm về hàm DISTINCTCOUNT.
HÀM CROSSJOIN
Mục đích sử dụng
Hàm CROSSJOIN trả về một bảng chứa tích Descartes (Cartesian product) của tất cả các hàng từ tất cả các bảng trong tham số. Các cột trong bảng mới là tất cả các cột trong tất cả các bảng tham số.
Syntax
Cú pháp của hàm:
CROSSJOIN(<bảng 1>, <bảng 2>, ...)
Uses case
Bạn có thể sử dụng hàm này để tạo một bảng mục tiêu doanh số theo mã sản phẩm và theo tháng từ 2 bảng không có mối liên hệ. Hãy cùng thử xem ví dụ bên dưới nhé.
Ví dụ
Giả sử chúng ta có 3 bảng là sales_table, date_table và prodcut_target_table_t12 như sau:



Và 3 có mối liên hệ như hình dưới:

Hiện tại, chúng ta sẽ thấy 2 bảng date_table và product_target_table_t12 không có mối liên kết nào, tuy nhiên ta vẫn có thể tạo một bảng mới từ 2 bảng này và sẽ đặt tên là Thang 12 target, và trong bảng này sẽ bao gồm cột Month, Product ID và Target. Để thực hiện điều này, đầu tiên ta tạo một bảng mới rồi sử dụng công thức DAX sau:

Như vậy ta đã có một bảng mới với Target theo Product ID và Month. Từ bảng này ta có thể tạo liên kết với sales_table.

Sau đó thực hiện thêm một số phép tính mong muốn như xem tình hình doanh số thực tại so với mục tiêu bằng công thức DAX sau:

Như vậy, tình hình doanh số thực tế đến nữa tháng 12 cho thấy 2 điểm đáng chú ý:
- Mã sản phẩm P2 đang vượt mục tiêu
- Mã sản phẩm P4 mới chỉ được khoảng 2%
Tim hiểu thêm về hàm CROSSJOIN.
HÀM UNION
Mục đích sử dụng
Ngoài tính năng Append trong Power Query Editor để nối 2 hoặc nhiều bảng với nhau, chúng ta cũng có thể sử dụng hàm UNION(). Hàm này sẽ trả về 1 bảng hoàn chỉnh sau khi đã được nối từ các bảng được chỉ định.
Syntax
Cú pháp của hàm:
UNION(<tên bảng 1>, <tên bảng 2>,...)
Uses case
Hàm UNION có thể được sử dụng trong trường hợp khi Data Model của bạn có các bảng như bảng Fact có cầu trúc giống nhau (số lượng cột và thứ tự các cột như nhau) và muốn nối chúng lại với nhau. Thông thường chúng ta sẽ hay thấy hay có nhiều bảng Orders hoặc bảng Sales được chia theo thời gian.
Ví dụ
Ở ví dụ này chúng ta sẽ có 2 bảng là order_table_1 và order_table_2 với cấu trúc giống nhau.


Để thực hiện gộp 2 bảng, ta chỉ cần áp dụng công thức DAX sau:

Lưu ý
- Vì hàm này thuộc nhóm Table Function, các bạn nhớ chọn New table thay vì New measure nhé
- Hàm này không nên sử dụng nếu như các bảng có hơn 1 triệu dòng (vì sẽ tiêu tốn nhiều tài nguyên và làm chậm tốc độ xử lý)
- Hai bảng phải có cùng số cột
- Thứ tự các cột ở các bảng giống nhau
- Các hàng trùng lặp sẽ được giữ lại
Tim hiểu thêm về hàm UNION.
HÀM IF
Mục đích sử dụng
Hàm IF trong DAX là một hàm logic hoạt động giống với IF trong Excel hay Google Sheets, mục đích của hàm này là trả về kết quả dựa trên điều kiện nhất định.
Syntax
Cú pháp của hàm:
IF(<LogicalTest>, <ResultIfTrue>, <ResultIfFalse>)
Trong đó:
- LogicalTest: điều kiện áp dụng
- ResultIfTrue: kết quả trả về nếu đáp ứng điều kiện
- ResultIfFalse: kêt quả trả về nếu không đáp ứng được điều kiện (nếu để trống, mặc định trả về ô trống)
Uses case
Hàm IF có thể được sử dụng rất hiệu quả trong việt thêm giá trị dựa trên giá đã có, ví dụ như chúng ta có thể chỉ định nếu doanh số hay lợi nhuận ở khoảng nhất đính sẽ trả về “cao”, “trung bình” hay “thấp”
Ví dụ
Từ ví dụ của hàm UNION, chúng ta đã tạo ra một bảng có tên là union_order_table. Với bảng mới tạo này, chúng ta có thể thêm cột tính (Calculated Column) cho nó bằng hàm IF, ở đây chúng ta sẽ thêm một cột với tên đánh_giá, và nếu lời nhuận (Profit) là giá trị dương sẽ = “Lãi” và nếu giá trị âm sẽ bằng = “Lỗ”. Công thức sẽ như sau:

Mời bạn đọc thêm về ứng dụng của what-if parameter trong Power BI để thay đổi báo cáo theo nhiều chiều khác nhau.
Hoặc bạn có thể xem video hướng dẫn sử dụng what-if parameter để giải case xác định khách hàng có nguy cơ rời bỏ.
HÀM SWITCH
Mục đích sử dụng
Hàm SWITCH được sử dụng để chuyển đổi các giá trị hoặc của 1 biểu thức thành giá trị được tương ứng đã được xác định trước.
Syntax
Cú pháp của hàm:
SWITCH(<biểu thức>, <giá trị 1>, <giá trị chuyển đôi 1>, <giá trị 2>, < giá trị chuyển đôi 2>, <giá trị 3>, < giá trị chuyển đôi 3>,...<giá trị khác>)
Uses case
Một ví dụ nhanh về ứng dụng của hàm này đó là phân loại doanh số, lợi nhuận hoặc chuyển đổi thứ từ dạng số sang tên của ngày.
Ví dụ
Ở ví dụ này ta sẽ chuyển thứ (dạng số) sang thứ (dạng tên). Chúng ta sẽ có các giá trị từ 0-6 tương ứng với 7 ngày trong tuần. Để chuyển đổi sang dạng tên thứ, ta có thể dùng công thức DAX sau:

Tìm hiểu thêm về hàm SWITCH trong Power BI.
HÀM PARALLELPERIOD
Mục đích sử dụng
Hàm PARALLELPERIOD trả về bảng có chứa cột ngày biểu thị thời gian song song với các ngày trong cột đã được chỉ định, các ngày có thể dịch chuyển về quá khứ hoặc tương lại.
Syntax
Cú pháp của hàm:
PARALLELPERIOD(<date>, <number_of_intervals>, <interval>)
Trong đó:
- date: cột chứa giá trị thời gian
- number_of_intervals: số nguyên chỉ định khoảng thời gian được cộng vào hoặc trừ đi
- Interval: khoảng thời gian để thay đổi ngày (tháng, quý, năm)
Uses case
Chúng ta có thể sử dụng hàm này để tính giá trị như doanh số bán hàng của cùng kỳ năm trước. Đây là một trong những use case khá phổ biến với hàm này.
Ví dụ
Ở ví chúng ta sẽ tính doanh số bán hàng của cùng ký nằm trước, và để làm được này, chúng ta sẽ sử dụng thêm hàm CALCULATE, như vậy chúng ta sẽ có công thức DAX sau:

- SUM(order_table[Sales]): được dùng để tính tổng doanh số
- PARALLELPERIOD(date_table[Date], -1, YEAR): được dùng như là điều kiện lọc khi tính tổng doanh số, trong đó:
- date_table[Date]: giá trị ngày để tham chiếu đến
- -1: là khoảng thời trừ đi
- YEAR: thay đổi ngày thành năm
Tim hiểu thêm về hàm PARALLELPERIOD.
HÀM LOOKUPVALUE
Mục đích sử dụng
Truy xuất một giá trị từ bảng.
Syntax
Cú pháp của hàm:
LOOKUPVALUE( <result column>, <search column>, <search value>, [<more search columns>, <more search values>]…,[<alternate result>])
Trong đó:
- result column: Cột kết quả muốn lấy làm đầu ra của biểu thức này.
- search column: Cột cần thực hiện tìm kiếm?
- search value: Giá trị cần tìm kiếm là gì?
- alternate result: Giá trị nào sẽ được sử dụng nếu giá trị tìm kiếm không được tìm thấy trong bảng dữ liệu
Uses case
Hàm này có thể sự dụng trong việc tìm kiếm cụ thể một giá trị nào đó như tên sản phẩm hoặc giá của sản phẩm theo mã sản phẩm.
Ví dụ
Ở đây ta sẽ có 2 bảng là product và product_price


Để thực hiện lấy giá trị price cho bảng product từ bảng product_price, ta sẽ thêm một cột mới cho bảng product và sử dụng công thức DAX sau:

Tìm hiểu thêm về hàm LOOKUPVALUE.
HÀM VALUES
Mục đích sử dụng
Hàm VALUES giúp trả về giá trị một bảng từ một cột ban đầu được chỉ định, các giá trị trong bảng trả về sẽ là duy nhất.
Syntax
Cú pháp của hàm:
VALUES(<tên bảng hoặc tên cột>)
Uses case
Chúng ta có thể sử dụng hàm này để kiểm tra các sản phẩm được bán ở một hay nhiều quốc gia, để làm được điều này chúng ta sẽ sử dụng thêm hàm IF và HASONEVALUE. Việc kết hợp với hợp với hàm IF là để chúng ta có thể chỉ định giá trị trả về đối với các giá trị không phải là duy nhất. Cách thực hiện như ví dụ bên dưới.
Ví dụ
Gia sử chúng ta có bảng chứa order từ các nước, trong bảng này có thêm thông về danh mục, danh mục con và tên sản phẩm. Ví dụ nếu ta muốn biết liệu có danh mục con nào chỉ bán ở một số nước, ta có thể sử dụng công thức DAX sau:

Trong đó:
- HASONEVALUE(order_table[Country]): kiểm tra nếu chỉ có duy nhất một giá trị
- VALUES(order_table[Country]): nếu thỏa mãn điều kiện, trả về giá trị đó
- Nếu không thỏa mãn diều kiện, trả về: “More than one country”
Tìm hiểu thêm về hàm VALUES.
HÀM SELECTEDVALUE
Mục đích sử dụng
Hàm SELECTEDVALUE trả về giá trị khi chỉ có một giá trị trong cột được chỉ định, nếu giá trị không tồn tại sẽ trả về kết quả thay thế.
Syntax
Cú pháp của hàm:
SELECTEDVALUE(<tên cột>, <giá trị thay thế nếu không tìm thấy giá trị>)
Uses case
Hàm này cũng có thể sử dụng trong việc tìm kiếm sản phẩm có được bán ở một hay nhiều quốc gia hay không và cho ra kết quả tương tự. Chỉ có điều công thức của chúng ta sẽ ngắn gọn hơn.
Ví dụ
Chúng ta có thể đạt được kết tương tự với cách sử VALUES bằng công thức DAX sau:

Như chúng ta thấy, 2 kết quả hoàn toàn giống nhau, điều khác nhau ở đây là công thức DAX của chúng ta gọn gàng hơn chút.
Tìm hiểu thêm về hàm SELECTEDVALUE.
Lời tạm kết
Trên đây là các hàm DAX phổ biến, thường được dùng trong Power BI cũng như trong công việc của Data Analyst. 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 hàm DAX trong tài liệu của Microsoft, cảm ơn các bạn và hãy đón chờ các bài viết tiếp theo của Datapot nhé!
Các khóa học Phân tích dữ liệu với Power BI tại Datapot:
Data Analyst


