Các hàm DAX quan trọng nhất trong Power BI với cú pháp, ví dụ thực tế và tips sử dụng. Từ CALCULATE đến Time Intelligence.
Electronics Revenue = CALCULATE( SUM(Sales[Revenue]), Sales[Category] = "Electronics" )
Revenue PY = CALCULATE( SUM(Sales[Revenue]), SAMEPERIODLASTYEAR(Date[Date]) )
Total Revenue All Regions = CALCULATE( SUM(Sales[Revenue]), ALL(Dim_Region) )
MTD Revenue = CALCULATE( SUM(Sales[Revenue]), DATESMTD(Date[Date]) )
High Value Revenue = CALCULATE( SUM(Sales[Revenue]), FILTER(Sales, Sales[Amount] > 1000000) )
Loyal Customer Rev = CALCULATE( SUM(Sales[Revenue]), FILTER( VALUES(Sales[CustomerID]), CALCULATE(COUNTROWS(Sales)) > 5 ) )
% of Total = DIVIDE( SUM(Sales[Revenue]), CALCULATE( SUM(Sales[Revenue]), ALL(Sales) -- bỏ mọi filter ) )
% of Category = DIVIDE( SUM(Sales[Revenue]), CALCULATE( SUM(Sales[Revenue]), -- giữ Category, bỏ filter Product ALLEXCEPT(Products, Products[Category]) ) )
% of Selection = DIVIDE( SUM(Sales[Revenue]), CALCULATE( SUM(Sales[Revenue]), ALLSELECTED() -- giữ slicer filter ) )
SUM(Sales[Revenue]) cộng trực tiếp cột Revenue. SUMX(Sales, Sales[Qty] * Sales[Price]) tính Qty×Price từng dòng trước, rồi cộng lại — dùng khi không có sẵn cột Revenue.Revenue = SUMX( Sales, Sales[Qty] * Sales[UnitPrice] )
AOV = AVERAGEX( VALUES(Sales[OrderID]), CALCULATE(SUM(Sales[Revenue])) )
Max Order per Customer = AVERAGEX( VALUES(Sales[CustomerID]), CALCULATE( MAXX(Sales, Sales[Amount]) ) )
YTD Revenue = CALCULATE( SUM(Sales[Revenue]), DATESYTD(Date[Date]) ) -- hoặc dùng shorthand: YTD Revenue v2 = TOTALYTD(SUM(Sales[Revenue]), Date[Date])
Fiscal YTD = TOTALYTD( SUM(Sales[Revenue]), Date[Date], "03/31" -- fiscal year end )
MTD Revenue = TOTALMTD(SUM(Sales[Revenue]), Date[Date]) QTD Revenue = TOTALQTD(SUM(Sales[Revenue]), Date[Date])
Revenue PY = CALCULATE( SUM(Sales[Revenue]), SAMEPERIODLASTYEAR(Date[Date]) ) YoY Growth % = DIVIDE( [Revenue] - [Revenue PY], [Revenue PY] )
-- 3 tháng trước Revenue 3M Ago = CALCULATE( SUM(Sales[Revenue]), DATEADD(Date[Date], -3, MONTH) ) -- 1 năm trước Revenue 1Y Ago = CALCULATE( SUM(Sales[Revenue]), DATEADD(Date[Date], -1, YEAR) )
Rolling 3M Avg = AVERAGEX( DATESINPERIOD( Date[Date], LASTDATE(Date[Date]), -3, MONTH ), CALCULATE(SUM(Sales[Revenue])) )
Product Rank = RANKX( ALL(Products[ProductName]), CALCULATE(SUM(Sales[Revenue])), , DESC, DENSE )
Is Top 5 = IF( RANKX( ALL(Products[ProductName]), CALCULATE(SUM(Sales[Revenue])), , DESC ) <= 5, "Top 5", "Others" )
Is Top 5 measure vào Visual Level Filter → "Top 5" → Apply.Revenue Category = SWITCH( TRUE(), [Revenue] >= 1000000, "Platinum", [Revenue] >= 500000, "Gold", [Revenue] >= 100000, "Silver", "Bronze" )
Selected Metric = SWITCH( SELECTEDVALUE(MetricTable[Metric]), "Revenue", [Total Revenue], "Orders", [Total Orders], "Avg Order", [AOV], [Total Revenue] )
YoY Growth % = VAR CurrentRev = SUM(Sales[Revenue]) VAR PrevRev = CALCULATE( SUM(Sales[Revenue]), SAMEPERIODLASTYEAR(Date[Date]) ) RETURN IF( PrevRev = 0, BLANK(), DIVIDE(CurrentRev - PrevRev, PrevRev) )
Customer Segment = VAR TotalRev = SUM(Sales[Revenue]) VAR OrderCount = COUNTROWS(Sales) VAR LastOrder = MAX(Sales[OrderDate]) VAR DaysSince = DATEDIFF(LastOrder, TODAY(), DAY) RETURN SWITCH( TRUE(), DaysSince <= 30 && TotalRev > 5000000, "Champion", DaysSince <= 90 && OrderCount > 5, "Loyal", DaysSince > 180, "At Risk", "Regular" )
-- Luôn dùng DIVIDE thay / Profit Margin % = DIVIDE([Gross Profit], [Revenue], 0) -- arg 3 = giá trị trả về khi chia cho 0
Revenue Safe = IF( ISBLANK(SUM(Sales[Revenue])), BLANK(), SUM(Sales[Revenue]) ) -- BLANK() không hiển thị trong chart -- giúp line chart không nối qua data trống
Total Orders = COUNTROWS(Sales) Unique Customers = DISTINCTCOUNT(Sales[CustomerID]) Active Products = COUNTROWS( FILTER(Products, Products[Status] = "Active") )
New Customers = CALCULATE( DISTINCTCOUNT(Sales[CustomerID]), FILTER( VALUES(Sales[CustomerID]), CALCULATE( MIN(Sales[OrderDate]) ) >= MIN(Date[Date]) ) )