DAX là gì?
DAX, viết tắt của Data Analysis Expressions, là nền tảng cho mọi phép tính bạn có thể thực hiện trong Power BI. Công thức DAX linh hoạt, động và rất mạnh mẽ – chúng cho phép bạn tạo trường và bảng mới trong mô hình của mình. DAX là một ngôn ngữ công thức được sử dụng trong Power BI, Power Pivot và các mô hình SSAS Tabular
Công thức DAX gồm 3 thành phần cốt lõi, và hướng dẫn này sẽ đề cập đến từng phần:
- Cú pháp – Cú pháp DAX đúng bao gồm nhiều phần tử, một số phần tử là điểm chung của mọi công thức.
- Hàm – Các hàm DAX là những công thức được định nghĩa sẵn, nhận tham số và thực hiện phép tính cụ thể.
- Ngữ cảnh – DAX sử dụng ngữ cảnh để xác định những hàng nào sẽ được dùng cho một phép tính.
Vì sao DAX quan trọng trong Power BI?
Các công thức DAX cho phép bạn khai thác tối đa dữ liệu và Power BI để giải quyết bài toán kinh doanh hiệu quả.
Bạn có thể thực hiện các phép tính đơn giản (như tổng hoặc trung bình) và tạo hầu hết biểu đồ mà không cần chạm tới DAX. Ví dụ, nếu muốn tạo biểu đồ đơn giản hiển thị tổng lợi nhuận, bạn có thể kéo trường lợi nhuận vào phần Values của biểu đồ và nó sẽ tính tổng các hàng trong trường đó. Tuy nhiên, có hai trường hợp mà việc tạo công thức DAX sẽ tốt hơn:
- Nếu bạn muốn tái sử dụng một công thức ở nhiều nơi, chẳng hạn trong nhiều biểu đồ hoặc làm biểu thức trong các công thức DAX khác. Khi đó, dùng công thức DAX sẽ giúp báo cáo hiệu quả hơn và dễ thay đổi trong tương lai vì bạn chỉ cần sửa một công thức duy nhất thay vì thay đổi nhiều công thức riêng lẻ ở từng nơi.
- Nếu bạn muốn tạo các công thức phức tạp hoặc tùy chỉnh, nơi chỉ
SUMhayAVERAGEđơn giản là chưa đủ cho bài toán kinh doanh bạn đang giải.
Các công thức DAX được dùng ở đâu trong Power BI?
Có ba cách bạn có thể dùng công thức DAX trong Power BI:
- Bảng được tính - Những phép tính này sẽ thêm một bảng vào báo cáo dựa trên công thức.
- Cột được tính - Những phép tính này sẽ thêm một cột vào bảng dựa trên công thức. Các cột này được xử lý như mọi trường khác trong bảng.
- Measure - Những phép tính này sẽ thêm một số đo tóm tắt hoặc tổng hợp vào bảng dựa trên công thức.
Khác biệt chính giữa ba loại phép tính này là ngữ cảnh của chúng (sẽ nói kỹ hơn bên dưới) và đầu ra chúng tạo ra.
Để thêm bất kỳ loại phép tính nào vào mô hình, hãy đi tới thẻ Modeling trên ribbon. Tại đây, bạn sẽ thấy ba lựa chọn để thêm measure mới, cột tính mới hoặc bảng. Ngoài ra, bạn có thể nhấp chuột phải vào một bảng trong ngăn Fields và chọn thêm measure mới hoặc cột tính trong menu thả xuống.

Bắt đầu học Power BI miễn phí
Các hàm DAX trong Power BI
Cách viết một công thức DAX
Các công thức DAX trực quan và dễ đọc. Điều này giúp bạn dễ nắm bắt những điều cơ bản về DAX để có thể bắt đầu tự viết công thức khá nhanh. Hãy điểm qua các khối cấu thành nên cú pháp DAX đúng.

- Tên của measure hoặc cột tính
- Toán tử bằng (“=”) đánh dấu bắt đầu công thức
- Một hàm DAX
- Dấu ngoặc mở (và đóng) (“()”)
- Tham chiếu cột và/hoặc bảng
- Lưu ý mỗi tham số tiếp theo trong một hàm được phân tách bằng dấu phẩy (“,”)
Các hàm DAX cũng có thể lồng nhau để thực hiện nhiều thao tác hiệu quả. Điều này có thể tiết kiệm rất nhiều thời gian khi viết công thức DAX. Ví dụ, thường hữu ích khi có nhiều câu lệnh IF lồng nhau hoặc dùng hàm IFERROR bọc quanh một hàm khác để mọi lỗi trong công thức được biểu diễn bằng giá trị bạn chỉ định.
Một số hàm DAX thường dùng nhất trong báo cáo là:
- Tính toán đơn giản:
COUNT,DISTINCTCOUNT,SUM,AVERAGE,MIN,MAX. SUMMARISE: Trả về một bảng, thường được dùng để tiếp tục áp dụng các phép tổng hợp theo nhiều nhóm khác nhau.CALCULATE: Thực hiện một phép tổng hợp cùng với một hoặc nhiều bộ lọc. Khi bạn chỉ định nhiều bộ lọc, hàm sẽ tính toán nơi tất cả bộ lọc đều true.IF: Dựa trên điều kiện logic, sẽ trả về giá trị khác nhau nếu true hoặc false. Tương tựCASE WHENtrong SQL.IFERROR: Tìm các lỗi trong một hàm bên trong và trả về kết quả được chỉ địnhISBLANK: Kiểm tra các hàng trong một cột có trống không và trả về true hoặc false. Hữu ích khi dùng cùng các hàm khác như IF.EOMONTH: Trả về ngày cuối cùng của tháng từ một ngày cho trước (tham chiếu cột ở định dạng ngày) với số tháng lùi hoặc tiến trong quá khứ/tương lai.DATEDIFF: trả về chênh lệch giữa hai ngày (đều là tham chiếu cột ở định dạng ngày) theo ngày, tháng, quý, năm, v.v.
Hiểu về ngữ cảnh trong công thức DAX
Các công thức DAX trong Power BI là động và thay đổi theo ngữ cảnh nơi chúng được tạo. Việc hiểu ngữ cảnh hoạt động như thế nào trong DAX rất quan trọng, vì nó có thể giúp bạn tránh nhiều rắc rối khi gặp lỗi khó hiểu trong công thức.
Có hai loại ngữ cảnh chính trong DAX: ngữ cảnh hàng và ngữ cảnh bộ lọc.
Ngữ cảnh hàng
Điều này đề cập đến “hàng hiện tại” trên tất cả các cột của một bảng và được mở rộng đến mọi cột trong các bảng có liên quan. Kiểu ngữ cảnh này cho phép công thức DAX biết nên dùng những hàng nào cho một công thức cụ thể.
Dưới đây là ví dụ về công thức cho một cột tính có ngữ cảnh hàng:
Cost Price Per Unit = financials[COGS] / financials[Units Sold]

Trong ví dụ này, Cost Price Per Unit được tính theo từng hàng. Điều này có nghĩa DAX cần biết hàng hiện tại khi nó đi qua tập dữ liệu, thực hiện phép tính và điền cột mới bằng kết quả.
Ngữ cảnh hàng là ngầm định trong các cột tính. Đó là vì các phép tính trong cột tính được thực hiện theo từng hàng; do đó ngữ cảnh hàng được xác định theo mặc định. Tuy nhiên, điều này không xảy ra với measure vì các phép tổng hợp được áp dụng cho tất cả hàng trong một bảng. Những phép tính này không cần biết hàng hiện tại vì tất cả hàng được tổng hợp cùng nhau.
Ví dụ về một measure, hãy xem công thức DAX sau:
Profit margin = SUM ( financials[Profit] ) / SUM ( financials[Sales] )
Trong trường hợp này, toàn bộ cột Profit được cộng để tạo ra một số duy nhất, rồi số này được chia cho tổng của toàn bộ cột Sales. DAX không cần biết hàng hiện tại vì nó đang thực hiện phép tổng hợp. Do đó, measure này không có ngữ cảnh hàng.
Để xác định tường minh ngữ cảnh hàng trong một measure, bạn cần dùng các hàm đặc biệt gọi là iterator. Ví dụ về các hàm iterator là SUMX, AVERAGEX và COUNTX. Những hàm này sẽ trước tiên thực hiện phép tính theo từng hàng rồi mới thực hiện phép tổng hợp cuối cùng trên kết quả (tức là tổng, trung bình, đếm, v.v.). Bằng cách này, ngữ cảnh hàng được xác định tường minh nhờ các iterator này.
Hãy xem ví dụ một hàm iterator hoạt động:
Average Cost Per Unit = AVERAGEX ( financials, financials[COGS] / financials[Units Sold] )
Ví dụ này thực hiện hai phép tính: đầu tiên, biểu thức được đánh giá theo từng hàng, sau đó kết quả được đưa vào hàm AVERAGE. Cách khác để đạt cùng kết quả là trước tiên tạo cột tính Cost Price Per Unit như ở trên, rồi tạo một measure AVERAGE riêng cho cột đó. Tuy nhiên, biết khi nào nên dùng các hàm iterator có thể giúp báo cáo hiệu quả hơn và ít tốn bộ nhớ, vì bạn có thể thực hiện hiệu quả hai phép tính chỉ bằng một công thức.
Ngữ cảnh bộ lọc
Ngữ cảnh bộ lọc được áp dụng chồng lên ngữ cảnh hàng và đề cập đến một tập con hàng hoặc cột được chỉ định làm bộ lọc trong báo cáo. Bộ lọc có thể được áp dụng theo vài cách:
- Trực tiếp trong một công thức DAX
- Sử dụng ngăn bộ lọc
- Sử dụng slicer
- Thông qua các trường tạo nên một trực quan (như các hàng và cột trong ma trận)
Một ví dụ điển hình về thêm ngữ cảnh bộ lọc vào công thức DAX là dùng hàm CALCULATE, cho phép bạn thêm một hoặc nhiều tham số bộ lọc vào measure. Trong ví dụ dưới đây, chúng ta tạo một measure biên lợi nhuận chỉ lọc cho USA:
USA Profit Margin = CALCULATE ( SUM ( financials[Profit] ) / SUM ( financials[Sales] ), financials[Country] = "United States of America")
Những thách thức phổ biến và lỗi người mới thường gặp trong DAX
Khi học DAX, người mới thường gặp những cạm bẫy phổ biến khiến việc hiểu và gỡ lỗi công thức trở nên khó khăn hơn. Dưới đây là một số vấn đề và mẹo khắc phục:
1. Nhầm lẫn giữa ngữ cảnh hàng và ngữ cảnh bộ lọc: Nhiều người mới khó phân biệt hai loại ngữ cảnh này. Hãy nhớ ngữ cảnh hàng đề cập đến các thao tác thực hiện theo từng hàng (ví dụ: cột tính). Ngược lại, ngữ cảnh bộ lọc áp dụng các bộ lọc bổ sung vào phép tính (ví dụ: slicer hoặc bộ lọc trong báo cáo). Mẹo: Dùng các hàm iterator như SUMX hoặc AVERAGEX để xác định tường minh ngữ cảnh hàng trong measure.
2. Lạm dụng cột tính: Mặc dù cột tính hữu ích, chúng thường có thể được thay thế bằng measure, vốn tiết kiệm bộ nhớ và động hơn. Tạo cột tính không cần thiết có thể làm phình mô hình dữ liệu. Mẹo: Hãy dùng measure khi có thể, vì chúng được tính tức thời và không làm tăng kích thước mô hình dữ liệu một cách vĩnh viễn.
3. Bỏ qua quy ước đặt tên phù hợp: Measure hoặc cột tính đặt tên kém dễ gây rối trong các báo cáo phức tạp. Mẹo: Áp dụng quy ước đặt tên nhất quán và mô tả rõ để tổ chức các công thức DAX của bạn.
4. Bỏ quên tối ưu hiệu năng: Công thức DAX có thể chạy chậm với tập dữ liệu lớn nếu không được tối ưu. Công thức quá phức tạp hoặc lạm dụng hàm lồng nhau có thể gây vấn đề hiệu năng. Mẹo: Dùng các công cụ như DAX Studio để phân tích và tối ưu công thức, và cân nhắc đơn giản hóa phép tính khi có thể.
Thực tiễn tốt nhất để tối ưu công thức DAX
Để cải thiện hiệu năng công thức DAX, đặc biệt với tập dữ liệu lớn, hãy làm theo các thực tiễn sau:
| Thực tiễn tốt | Mô tả |
|---|---|
| Ưu tiên measure thay vì cột tính | Measure là động và được tính theo nhu cầu, tiêu tốn ít bộ nhớ hơn so với cột tính. |
| Tránh lặp lồng nhau | Giảm thiểu việc dùng các hàm lồng phức tạp (ví dụ: SUMX, AVERAGEX) để tránh nút thắt cổ chai hiệu năng. |
| Lọc sớm | Áp dụng bộ lọc tại nguồn dữ liệu hoặc trong công thức DAX để giảm số lượng hàng cần xử lý. |
| Tận dụng biến | Dùng VAR để lưu kết quả trung gian và tránh các phép tính lặp lại trong một công thức. |
| Đơn giản hóa quan hệ | Đảm bảo mô hình dữ liệu có quan hệ rõ ràng và các bảng được lập chỉ mục phù hợp để xử lý nhanh hơn. |
| Tối ưu tính phân biệt (cardinality) | Giảm số lượng giá trị duy nhất trong các cột dùng để lọc hoặc nối để nâng cao hiệu năng. |
Kết luận
Bây giờ bạn đã có một số công cụ DAX cơ bản để thử và đó mới chỉ là phần nổi của tảng băng về những gì DAX có thể làm. Với hơn 250 hàm, con đường chinh phục DAX đầy thử thách nhưng cũng rất xứng đáng. Bạn có thể bắt đầu nâng cấp kỹ năng DAX của mình ngay hôm nay với khóa học Introduction to DAX in Power BI của chúng tôi!
Câu hỏi thường gặp
DAX trong Power BI là gì?
DAX, hay Data Analysis Expressions, cho phép bạn thực hiện các phép tính để tạo trường mới và thậm chí cả bảng mới trong mô hình của mình.
DAX trong Power BI là viết tắt của cụm từ nào?
Data Analysis Expressions
Cách viết công thức DAX trong Power BI?
Các công thức DAX được nhập vào thanh công thức ngay bên dưới ribbon trong Power BI. Bắt đầu bằng cách đặt tên cho công thức rồi theo sau là dấu bằng (“=”). Sau đó viết công thức của bạn bằng cách sử dụng các hàm, hằng số hoặc chuỗi.
Cách viết một measure DAX trong Power BI?
Tạo một measure DAX bằng cách chọn ‘New Measure’ từ thẻ Modeling trên ribbon hoặc nhấp chuột phải vào một bảng trong ngăn Fields và chọn ‘New Measure’ từ menu thả xuống.
Cách tạo công thức ‘case when’ bằng DAX trong Power BI?
Công thức ‘case when’ được tạo bằng cách sử dụng hàm IF trong công thức DAX.
Cách nối hai bảng trong Power BI bằng DAX?
Cách dễ nhất để nối hai bảng là tận dụng các mối quan hệ hiện có giữa các bảng và dùng hàm ADDCOLUMNS để thêm cột vào một bảng. Hàm này thực hiện phép nối trái (left join).
Cách dùng mệnh đề where bằng DAX trong Power BI?
Mệnh đề where có thể áp dụng dễ dàng bằng các tham số bộ lọc trong DAX. Ví dụ, hàm CALCULATE nhận một biểu thức và nhiều tham số bộ lọc tùy chọn. Điều này giúp kiểm soát cách biểu đồ và tương tác của người dùng ảnh hưởng đến các hàm này.
Cách tạo bảng tĩnh trong Power BI bằng hàm DAX DATATABLE?
Hàm DATATABLE là cách đơn giản và tiện lợi để tạo các bảng tĩnh, không được làm mới trừ khi hàm DAX được thay đổi tường minh. Cú pháp DATATABLE là:
DATATABLE (
<column1_name>, <column1_datatype>,
<column2_name>, <column2_datatype>,
{
{ <value1_row1>, <value2_row1> },
{ <value1_row2>, <value2_row2> }
}
)
Cách thay thế giá trị trong Power BI bằng DAX?
Có hai cách để thay thế chuỗi trong một cột bằng DAX, đó là dùng các hàm REPLACE và SUBSTITUTE. Hàm REPLACE sẽ thay thế chuỗi dựa trên đúng vị trí và số lượng ký tự bạn chỉ định. Trong khi đó, hàm SUBSTITUTE sẽ thay thế bất kỳ chuỗi khớp chính xác nào, bất kể vị trí.
Làm thế nào để học dùng DAX trong Power BI?
DAX in Power BI của DataCamp. Khóa học dạy một loạt phép tính DAX từ cơ bản đến nâng cao và cách tốt nhất để sử dụng chúng trong báo cáo của bạn.
