Menu
CoddyTech

Cheat sheet Power BI

Cập nhật lần cuối

Học Power BI miễn phí

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ăngDAX
Tạo thước đoTotal 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ánTop 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ôngSales[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ácAverage 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ăngDAX
Cộng tổng một cộtSUM ( Sales[Amount] )
Trung bình của một cộtAVERAGE ( Sales[Amount] )
Giá trị nhỏ nhấtMIN ( Sales[Order Date] )
Giá trị lớn nhấtMAX ( Sales[Order Date] )
Đếm số hàng của một bảngCOUNTROWS ( Sales )
Đếm các giá trị không trống của một cộtCOUNT ( Sales[Amount] )
Đếm các giá trị khác nhauDISTINCTCOUNT ( Sales[Customer Key] )
Chia an toàn: trả về trống thay vì lỗi khi mẫu số bằng 0DIVIDE ( [Total Sales], [Total Units] )
Chia với một giá trị hiển thị khi mẫu số bằng 0DIVIDE ( [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ăngDAX
Nhân theo từng hàng, rồi cộng lạiSUMX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Trung bình của kết quả theo từng hàngAVERAGEX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Kết quả lớn nhất theo từng hàngMAXX ( Sales, Sales[Quantity] * Sales[Unit Price] )
Trung bình của một thước đo theo từng khách hàngAVERAGEX ( VALUES ( Customer[Customer Key] ), [Total Sales] )
Dùng một cột của bảng liên quan trong biểu thứcSUMX ( Sales, Sales[Quantity] * RELATED ( Product[Unit Cost] ) )
Đếm các hàng thỏa điều kiệnCOUNTROWS ( FILTER ( Sales, Sales[Quantity] >= 3 ) )
Xếp hạng mọi sản phẩm theo một thước đoRANKX ( 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ảnCONCATENATEX ( 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ăngDAX
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ộtCALCULATE ( [Total Sales], FILTER ( ALL ( Product[Color], Product[Brand] ), Product[Color] = "Red" || Product[Brand] = "Contoso" ) )
Lọc theo một thước đoCALCULATE ( [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ộtCALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) )
Gỡ mọi bộ lọc trên một bảngCALCULATE ( [Total Sales], ALL ( Product ) )
Gỡ mọi bộ lọc trên một bảng, trừ một số cộtCALCULATE ( [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 quanCALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) )
Dùng một mối quan hệ không hoạt độngCALCULATE ( [Total Sales], USERELATIONSHIP ( Sales[Ship Date], 'Date'[Date] ) )
Cho bộ lọc đi theo cả hai chiều cho một thước đoCALCULATE ( 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ăngDAX
Lũy kế từ đầu nămTOTALYTD ( [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 6TOTALYTD ( [Total Sales], 'Date'[Date], "6/30" )
Lũy kế từ đầu năm bên trong CALCULATECALCULATE ( [Total Sales], DATESYTD ( 'Date'[Date] ) )
Lũy kế từ đầu quýTOTALQTD ( [Total Sales], 'Date'[Date] )
Lũy kế từ đầu thángTOTALMTD ( [Total Sales], 'Date'[Date] )
Cùng kỳ năm trướcCALCULATE ( [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ướcCALCULATE ( [Total Sales], PREVIOUSMONTH ( 'Date'[Date] ) )
Toàn bộ kỳ cách đây một nămCALCULATE ( [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ố địnhCALCULATE ( [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ăngDAX
Tỷ lệ trên tất cả danh mụcCategory % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], REMOVEFILTERS ( Product[Category] ) ) )
Tỷ lệ trên phần mà slicer còn giữ lạiVisible % = DIVIDE ( [Total Sales], CALCULATE ( [Total Sales], ALLSELECTED ( Product[Category] ) ) )
Tăng trưởng so với năm trướcYoY % = 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 gianRunning 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 đầuTop 5 Sales = IF ( RANKX ( ALLSELECTED ( Product[Product] ), [Total Sales] ) <= 5, [Total Sales] )
Đếm khách hàng vượt một ngưỡngBig 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ậnCategory 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ăngDAX
Một điều kiệnIF ( [Total Sales] > 1000, "High", "Low" )
Nhiều giá trị của một biểu thứcSWITCH ( Store[Country], "Spain", "ES", "Portugal", "PT", "Other" )
Các khoảng giá trị, kiểm tra từ trên xuống dướiSWITCH ( TRUE (), [Total Sales] >= 10000, "A", [Total Sales] >= 1000, "B", "C" )
AND và ORIF ( 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ốngCOALESCE ( [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 địnhSELECTEDVALUE ( 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ốngBLANK ()

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ăngDAX
Nối văn bảnCustomer[First Name] & " " & Customer[Last Name]
Định dạng sốFORMAT ( [Total Sales], "#,0.00" )
Định dạng ngàyFORMAT ( 'Date'[Date], "mmm yyyy" )
Các ký tự đầuLEFT ( Product[Code], 3 )
Các ký tự từ một vị tríMID ( Product[Code], 4, 2 )
Độ dàiLEN ( Product[Name] )
Viết hoaUPPER ( Store[City] )
Xóa khoảng trắng thừaTRIM ( Customer[Name] )
Thay thế văn bảnSUBSTITUTE ( 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ăngDAX
Ngày hôm nayTODAY ()
Tạo một ngàyDATE ( 2025, 12, 31 )
Năm của một ngàyYEAR ( 'Date'[Date] )
Số thángMONTH ( 'Date'[Date] )
Thứ trong tuần, Thứ Hai là 1WEEKDAY ( 'Date'[Date], 2 )
Số tuần, tuần bắt đầu từ Thứ HaiWEEKNUM ( 'Date'[Date], 2 )
Ngày cuối thángEOMONTH ( 'Date'[Date], 0 )
Cùng ngày của tháng trướcEDATE ( 'Date'[Date], -1 )
Số ngày giữa hai ngàyDATEDIFF ( Sales[Order Date], Sales[Ship Date], DAY )
Bảng ngày từ các ngày cố địnhCALENDAR ( DATE ( 2024, 1, 1 ), DATE ( 2025, 12, 31 ) )
Bảng ngày từ các ngày có trong mô hìnhCALENDARAUTO ()

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ăngDAX
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 độngUSERPRINCIPALNAME ()

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ăngDAX
Các giá trị khác nhau trong bộ lọc hiện tạiVALUES ( Product[Category] )
Các hàng thỏa điều kiệnFILTER ( Product, Product[Price] > 100 )
N hàng đầu theo một thước đoTOPN ( 5, ALL ( Product[Product] ), [Total Sales] )
Nhóm theo cột và thêm thước đoSUMMARIZECOLUMNS ( Product[Category], "Sales", [Total Sales] )
Thêm một cột vào bảngADDCOLUMNS ( VALUES ( Product[Category] ), "Sales", [Total Sales] )
Chọn và đổi tên cộtSELECTCOLUMNS ( 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ảngCROSSJOIN ( VALUES ( 'Date'[Year] ), VALUES ( Product[Category] ) )
Xếp chồng hai bảng có cùng các cộtUNION ( '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ăngDAX
Một biếnMargin % = VAR Revenue = [Total Sales] RETURN DIVIDE ( Revenue - [Total Cost], Revenue )
Nhiều biếnSales vs LY = VAR CY = [Total Sales] VAR PY = CALCULATE ( [Total Sales], SAMEPERIODLASTYEAR ( 'Date'[Date] ) ) RETURN CY - PY
Một bảng trong biếnTop 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ăngM
Giữ các hàng khớp điều kiệnTable.SelectRows(Source, each [Status] = "Paid")
Xóa cộtTable.RemoveColumns(Source, {"Notes", "Temp"})
Đặt kiểu dữ liệu cho cộtTable.TransformColumnTypes(Source, {{"Amount", type number}, {"Date", type date}})
Đổi tên một cộtTable.RenameColumns(Source, {{"amt", "Amount"}})
Thêm một cộtTable.AddColumn(Source, "Total", each [Quantity] * [Price], type number)
Hợp nhất (join) hai truy vấnTable.NestedJoin(Sales, {"ProductID"}, Products, {"ProductID"}, "Product", JoinKind.LeftOuter)
Nối (xếp chồng) các truy vấnTable.Combine({Sales2024, Sales2025})
Chuyển cột thành hàng (unpivot)Table.UnpivotOtherColumns(Source, {"Product"}, "Month", "Amount")
Nhóm và tổng hợpTable.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?
Có. Các hàm như 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 đó.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học Power BI cùng Coddy

Bắt đầu