Cheat sheet Power BI
Cập nhật lần cuối
Thước đo, cột và bảng
Thước đo được tính cho từng ô của hình ảnh trực quan; cột được tính toán được tính một lần cho mỗi hàng và được lưu lại.
| Chức năng | DAX |
|---|---|
| Tạo thước đo | Total Sales = SUM ( Sales[Amount] ) |
| Tạo cột được tính toán (một giá trị cho mỗi hàng) | Line Total = Sales[Quantity] * Sales[Unit Price] |
| Tạo bảng được tính toán | Top Customers = TOPN ( 10, Customer, [Total Sales] ) |
| Tham chiếu một cột: tên bảng, rồi tên cột trong ngoặc vuông | Sales[Amount] |
| Đặt tên bảng trong dấu nháy đơn khi tên có khoảng trắng hoặc là từ khóa dành riêng | 'Date'[Date] |
| Tham chiếu một thước đo: chỉ dùng ngoặc vuông | [Total Sales] |
| Dùng một thước đo bên trong thước đo khác | Average Price = DIVIDE ( [Total Sales], [Total Units] ) |
Hàm tổng hợp
Mỗi hàm tóm tắt một cột trong ngữ cảnh bộ lọc hiện tại.
| Chức năng | DAX |
|---|---|
| Cộng tổng một cột | SUM ( Sales[Amount] ) |
| Trung bình của một cột | AVERAGE ( Sales[Amount] ) |
| Giá trị nhỏ nhất | MIN ( Sales[Order Date] ) |
| Giá trị lớn nhất | MAX ( Sales[Order Date] ) |
| Đếm số hàng của một bảng | COUNTROWS ( Sales ) |
| Đếm các giá trị không trống của một cột | COUNT ( Sales[Amount] ) |
| Đếm các giá trị khác nhau | DISTINCTCOUNT ( Sales[Customer Key] ) |
| Chia an toàn: trả về trống thay vì lỗi khi mẫu số bằng 0 | DIVIDE ( [Total Sales], [Total Units] ) |
| Chia với một giá trị hiển thị khi mẫu số bằng 0 | DIVIDE ( [Profit], [Total Sales], 0 ) |
Hàm lặp (các hàm X)
Các hàm này duyệt qua bảng từng hàng một, tính một biểu thức cho mỗi hàng, rồi tổng hợp kết quả.
| Chức năng | DAX |
|---|---|
| Nhân theo từng hàng, rồi cộng lại | SUMX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Trung bình của kết quả theo từng hàng | AVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Kết quả lớn nhất theo từng hàng | MAXX ( Sales, Sales[Quantity] * Sales[Unit Price] ) |
| Trung bình của một thước đo theo từng khách hàng | AVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] ) |
| Dùng một cột của bảng liên quan trong biểu thức | SUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) ) |
| Đếm các hàng thỏa điều kiện | COUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) ) |
| Xếp hạng mọi sản phẩm theo một thước đo | RANKX ( ALL ( Product[Product] ), [Total Sales] ) |
| Xếp hạng không bỏ số sau các giá trị bằng nhau (1, 1, 2) | RANKX ( ALL ( Product[Product] ), [Total Sales], , DESC, DENSE ) |
| Nối các giá trị thành một chuỗi văn bản | CONCATENATEX ( VALUES ( Product[Category] ), Product[Category], ", " ) |
CALCULATE và các hàm bộ lọc
CALCULATE tính một biểu thức với bộ lọc đã thay đổi. Bộ lọc trên cùng một cột sẽ thay thế bộ lọc cũ; bộ lọc trên các cột khác nhau kết hợp với nhau bằng AND.
| Chức năng | DAX |
|---|---|
| Lọc theo một giá trị | CALCULATE ( [Total Sales], Product[Category] = "Bikes" ) |
| Lọc theo một danh sách giá trị | CALCULATE ( [Total Sales], Product[Color] IN { "Red", "Blue" } ) |
| Hai bộ lọc (AND) | CALCULATE ( [Total Sales], Product[Color] = "Red", Store[Country] = "Spain" ) |
| OR trên hai cột | CALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) ) |
| Lọc theo một thước đo | CALCULATE ( [Total Sales], FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Giữ bộ lọc hiện có và lấy phần giao với nó | CALCULATE ( [Total Sales], KEEPFILTERS ( Product[Color] IN { "Red", "Blue" } ) ) |
| Gỡ bộ lọc trên một cột | CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) |
| Gỡ mọi bộ lọc trên một bảng | CALCULATE ( [Total Sales], ALL ( Product ) ) |
| Gỡ mọi bộ lọc trên một bảng, trừ một số cột | CALCULATE ( [Total Sales], ALLEXCEPT ( Store, Store[Country] ) ) |
| Giữ lựa chọn trên slicer, bỏ các hàng của chính hình ảnh trực quan | CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) |
| Dùng một mối quan hệ không hoạt động | CALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) ) |
| Cho bộ lọc đi theo cả hai chiều cho một thước đo | CALCULATE ( COUNTROWS ( Customer ), CROSSFILTER ( Sales[Customer Key], Customer[Customer Key], BOTH ) ) |
| Lọc theo một bảng không có mối quan hệ | CALCULATE ( [Total Sales], TREATAS ( VALUES ( Budget[Category] ), Product[Category] ) ) |
Thông minh thời gian
Các hàm này cần một bảng ngày: mỗi ngày một hàng, không thiếu ngày nào, và được đánh dấu là bảng ngày.
| Chức năng | DAX |
|---|---|
| Lũy kế từ đầu năm | TOTALYTD ( [Total Sales], 'Date'[Date] ) |
| Lũy kế từ đầu năm, năm tài chính kết thúc ngày 30 tháng 6 | TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" ) |
| Lũy kế từ đầu năm bên trong CALCULATE | CALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) ) |
| Lũy kế từ đầu quý | TOTALQTD ( [Total Sales], 'Date'[Date] ) |
| Lũy kế từ đầu tháng | TOTALMTD ( [Total Sales], 'Date'[Date] ) |
| Cùng kỳ năm trước | CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) |
| Dịch ngày theo một khoảng (ở đây lùi một tháng) | CALCULATE ( [Total Sales], DATEADD ( 'Date'[Date], -1, MONTH ) ) |
| Toàn bộ tháng trước | CALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) ) |
| Toàn bộ kỳ cách đây một năm | CALCULATE ( [Total Sales], PARALLELPERIOD ( 'Date'[Date], -1, YEAR ) ) |
| 12 tháng gần nhất tính đến ngày cuối cùng đang hiển thị | CALCULATE ( [Total Sales], DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -12, MONTH ) ) |
| Một khoảng ngày cố định | CALCULATE ( [Total Sales], DATESBETWEEN ( 'Date'[Date], DATE ( 2025, 1, 1 ), DATE ( 2025, 3, 31 ) ) ) |
Các mẫu thước đo thường dùng
Sao chép, rồi đổi tên bảng và cột cho khớp với mô hình của bạn.
| Chức năng | DAX |
|---|---|
| Tỷ lệ trên tất cả danh mục | Category % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) ) |
| Tỷ lệ trên phần mà slicer còn giữ lại | Visible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) ) |
| Tăng trưởng so với năm trước | YoY % = VAR LastYear = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN DIVIDE ( [Total Sales] - LastYear, LastYear ) |
| Tổng lũy kế trên toàn bộ thời gian | Running Total = CALCULATE ( [Total Sales], FILTER ( ALL ( 'Date'[Date] ), 'Date'[Date] <= MAX ( 'Date'[Date] ) ) ) |
| Trung bình động 7 ngày (theo ngày có doanh số) | Sales 7 Day Avg = AVERAGEX ( DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -7, DAY ), [Total Sales] ) |
| Chỉ hiển thị giá trị cho 5 mục đứng đầu | Top 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] ) |
| Đếm khách hàng vượt một ngưỡng | Big Customers = COUNTROWS ( FILTER ( VALUES ( Customer[Customer Key] ), [Total Sales] > 1000 ) ) |
| Làm cho tổng bằng đúng tổng các hàng của nó | Bonus Total = SUMX ( VALUES ( Product[Category] ), [Bonus] ) |
| Chỉ hiển thị giá trị ở một cấp của ma trận | Category Rank = IF ( ISINSCOPE ( Product[Category] ), RANKX ( ALL ( Product[Category] ), [Total Sales] ) ) |
| Số dư cuối kỳ: ngày cuối cùng có giá trị | Closing Units = CALCULATE ( SUM ( Inventory[Units] ), LASTNONBLANK ( 'Date'[Date], CALCULATE ( SUM ( Inventory[Units] ) ) ) ) |
Hàm logic và hàm thông tin
Dùng cho điều kiện, và để hỏi ngữ cảnh bộ lọc đang chứa gì.
| Chức năng | DAX |
|---|---|
| Một điều kiện | IF ( [Total Sales] > 1000, "High", "Low" ) |
| Nhiều giá trị của một biểu thức | SWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" ) |
| Các khoảng giá trị, kiểm tra từ trên xuống dưới | SWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" ) |
| AND và OR | IF ( Sales[Quantity] > 2 && Sales[Amount] > 50, "Big", "Small" ) |
| Giá trị có trống không? | ISBLANK ( [Total Sales] ) |
| Giá trị đầu tiên không trống | COALESCE ( [Total Sales], 0 ) |
| Bộ lọc có để lại đúng một giá trị không? | HASONEVALUE ( Product[Category] ) |
| Giá trị duy nhất đó, hoặc một giá trị mặc định | SELECTEDVALUE ( Product[Category], "All categories" ) |
| Hàng này của hình ảnh trực quan có được nhóm theo cột đó không? | ISINSCOPE ( Product[Category] ) |
| Trả về giá trị trống | BLANK () |
Hàm văn bản
Toán tử & nối văn bản; FORMAT chuyển số hoặc ngày thành văn bản.
| Chức năng | DAX |
|---|---|
| Nối văn bản | Customer[First Name] & " " & Customer[Last Name] |
| Định dạng số | FORMAT ( [Total Sales], "#,0.00" ) |
| Định dạng ngày | FORMAT ( 'Date'[Date], "mmm yyyy" ) |
| Các ký tự đầu | LEFT ( Product[Code], 3 ) |
| Các ký tự từ một vị trí | MID ( Product[Code], 4, 2 ) |
| Độ dài | LEN ( Product[Name] ) |
| Viết hoa | UPPER ( Store[City] ) |
| Xóa khoảng trắng thừa | TRIM ( Customer[Name] ) |
| Thay thế văn bản | SUBSTITUTE ( Customer[Phone], " ", "" ) |
| Vị trí của một đoạn văn bản, không phân biệt hoa thường (0 khi không tìm thấy) | SEARCH ( "pro", Product[Name], 1, 0 ) |
Hàm ngày tháng
Bên dưới, ngày là số, nên bạn có thể trừ chúng để ra số ngày.
| Chức năng | DAX |
|---|---|
| Ngày hôm nay | TODAY () |
| Tạo một ngày | DATE ( 2025, 12, 31 ) |
| Năm của một ngày | YEAR ( 'Date'[Date] ) |
| Số tháng | MONTH ( 'Date'[Date] ) |
| Thứ trong tuần, Thứ Hai là 1 | WEEKDAY ( 'Date'[Date], 2 ) |
| Số tuần, tuần bắt đầu từ Thứ Hai | WEEKNUM ( 'Date'[Date], 2 ) |
| Ngày cuối tháng | EOMONTH ( 'Date'[Date], 0 ) |
| Cùng ngày của tháng trước | EDATE ( 'Date'[Date], -1 ) |
| Số ngày giữa hai ngày | DATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY ) |
| Bảng ngày từ các ngày cố định | CALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) ) |
| Bảng ngày từ các ngày có trong mô hình | CALENDARAUTO () |
Mối quan hệ và tra cứu
RELATED đi theo mối quan hệ từ phía nhiều sang phía một.
| Chức năng | DAX |
|---|---|
| Giá trị từ phía một (trong một cột của bảng Sales) | RELATED ( Product[Category] ) |
| Các hàng phía nhiều của hàng hiện tại (trong một cột của bảng Customer) | COUNTROWS ( RELATEDTABLE ( Sales ) ) |
| Tra cứu một giá trị khi không có mối quan hệ | LOOKUPVALUE ( Product[Price], Product[SKU], Sales[SKU] ) |
| Đường dẫn cha con (cho phân cấp và bảo mật cấp hàng) | PATH ( Employee[Employee ID], Employee[Manager ID] ) |
| Người dùng đang đăng nhập, cho bảo mật cấp hàng động | USERPRINCIPALNAME () |
Hàm bảng
Các hàm này trả về bảng: dùng chúng trong bảng được tính toán, bên trong CALCULATE hoặc trong một hàm lặp.
| Chức năng | DAX |
|---|---|
| Các giá trị khác nhau trong bộ lọc hiện tại | VALUES ( Product[Category] ) |
| Các hàng thỏa điều kiện | FILTER ( Product, Product[Price] > 100 ) |
| N hàng đầu theo một thước đo | TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) |
| Nhóm theo cột và thêm thước đo | SUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] ) |
| Thêm một cột vào bảng | ADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] ) |
| Chọn và đổi tên cột | SELECTCOLUMNS ( Customer, "Name", Customer[Name], "City", Customer[City] ) |
| Một dãy số | GENERATESERIES ( 1, 10, 1 ) |
| Mọi tổ hợp của hai bảng | CROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) ) |
| Xếp chồng hai bảng có cùng các cột | UNION ( 'Sales 2024', 'Sales 2025' ) |
Biến
VAR đặt tên cho một bước và tính nó một lần; RETURN trả về kết quả.
| Chức năng | DAX |
|---|---|
| Một biến | Margin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue ) |
| Nhiều biến | Sales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY |
| Một bảng trong biến | Top 5 Total = VAR Top5 = TOPN ( 5, ALL ( Product[Product] ), [Total Sales] ) RETURN CALCULATE ( [Total Sales], Top5 ) |
Các bước Power Query (M)
Power Query định hình dữ liệu trước khi tải vào. Đây là các công thức M đứng sau những nút thường dùng.
| Chức năng | M |
|---|---|
| Giữ các hàng khớp điều kiện | Table.SelectRows(Source, each [Status] = "Paid") |
| Xóa cột | Table.RemoveColumns(Source, {"Notes", "Temp"}) |
| Đặt kiểu dữ liệu cho cột | Table.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}}) |
| Đổi tên một cột | Table.RenameColumns(Source, {{"amt", "Amount"}}) |
| Thêm một cột | Table.AddColumn(Source, "Total", each [Quantity] * [Price], type number) |
| Hợp nhất (join) hai truy vấn | Table.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter) |
| Nối (xếp chồng) các truy vấn | Table.Combine({Sales2024, Sales2025}) |
| Chuyển cột thành hàng (unpivot) | Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount") |
| Nhóm và tổng hợp | Table.Group(Source, {"Category"}, {{"Sales", each List.Sum([Amount]), type number}}) |
| Thay lỗi bằng một giá trị | Table.ReplaceErrorValues(Source, {{"Amount", 0}}) |
Cheat sheet Power BI này gom DAX mà bạn viết nhiều nhất vào một trang: hàm tổng hợp, các hàm lặp X, CALCULATE và các hàm thay đổi bộ lọc, thông minh thời gian, hàm văn bản và ngày tháng, cùng các mẫu thước đo để sao chép, như tỷ lệ phần trăm trên tổng, tăng trưởng so với năm trước và tổng lũy kế.
Các ví dụ dùng một mô hình bán hàng với các bảng Sales, Product, Customer và 'Date'; đổi tên chúng cho khớp với mô hình của bạn. Toàn bộ DAX ở đây đã được phân tích bằng bộ máy đứng sau khóa học Power BI của Coddy, nơi bạn có thể viết DAX trong không gian làm việc Power BI ngay trên trình duyệt và được kiểm tra.
Câu hỏi thường gặp về cheat sheet Power BI
Cheat sheet Power BI này có miễn phí không?
Có. Bạn có thể đọc ngay tại đây hoặc lưu dấu trang; không cần đăng ký.
Thước đo khác cột được tính toán ở điểm nào?
Cột được tính toán được tính một lần cho mỗi hàng khi làm mới dữ liệu và được lưu lại, nên bạn có thể dùng nó để lọc bằng slicer. Thước đo được tính cho từng ô của hình ảnh trực quan, theo bộ lọc của ô đó, và không lưu gì cả. Tổng và tỷ lệ nên viết thành thước đo.
CALCULATE dùng để làm gì?
Hàm này tính một biểu thức với bộ lọc đã thay đổi: thêm, thay thế hoặc gỡ bộ lọc, rồi tính kết quả. Phần lớn DAX vượt ra ngoài các phép tổng đơn giản đều là CALCULATE với đúng đối số bộ lọc.
Vì sao nên dùng DIVIDE thay cho toán tử /?
DIVIDE trả về giá trị trống (hoặc giá trị bạn chọn) khi mẫu số bằng 0 hoặc trống. Toán tử / thì trả về vô cực hoặc giá trị lỗi, và giá trị đó hiện ra trên hình ảnh trực quan.Có cần bảng ngày cho thông minh thời gian không?
TOTALYTD và SAMEPERIODLASTYEAR cần một bảng có mỗi ngày một hàng, không thiếu ngày và đủ các năm, có mối quan hệ với các bảng dữ kiện và được đánh dấu là bảng ngày.DAX này có chạy trong Power Pivot của Excel và Analysis Services không?
Ngôn ngữ DAX là chung, nên gần như tất cả đều chạy được ở đó. Một vài hàm mới hơn có mặt trên Power BI trước.
Có thể luyện tập DAX ở đâu?
Trong khóa học Power BI của Coddy: mỗi bài học mở cho bạn một không gian làm việc Power BI trên trình duyệt và kiểm tra thước đo của bạn trên dữ liệu của bài học và các bản sao ẩn của dữ liệu đó.