13. DAX: Data Analysis Expressions
13.7 Logical Functions
IF
Delivery Target Status =
IF([% Orders Delivered Under 10 Mins] >= 0.8, "On Target", "Below Target")
-- Calculated column in Orders
Has Discount = IF(Orders[Discount] > 0, "Yes", "No")
If the third argument is omitted, IF returns BLANK when the condition is false. (The 80% target above is only an example value.)
AND, OR, NOT
AND() and OR() accept exactly two arguments; for more conditions use the operators && and ||.
-- Calculated columns in Orders
Late Cash Order =
IF(AND(Orders[Delivery Time Mins] > 20, Orders[Payment Mode] = "Cash on Delivery"), "Yes", "No")
Big Basket Flag = IF(Orders[Quantity] >= 5 || Orders[Amount] >= 500, "Big", "Normal")
SWITCH
SWITCH replaces long nested IFs.
-- Simple form: compare one expression to values
Payment Group = SWITCH(Orders[Payment Mode],
"UPI", "Digital",
"Card", "Digital",
"Wallet", "Digital",
"Cash on Delivery", "Cash",
"Other")
-- SWITCH(TRUE()) pattern: first condition that is TRUE wins
Delivery Band = SWITCH(TRUE(),
ISBLANK(Orders[Delivery Time Mins]), "Not delivered",
Orders[Delivery Time Mins] <= 10, "Within 10 min",
Orders[Delivery Time Mins] <= 20, "11-20 min",
"Over 20 min")
-- Time-of-day slot from the Order Hour column
Day Part = SWITCH(TRUE(),
Orders[Order Hour] < 6, "Late Night",
Orders[Order Hour] < 12, "Morning",
Orders[Order Hour] < 17, "Afternoon",
Orders[Order Hour] < 21, "Evening",
"Night")
DIVIDE
Lakshat theva, always use DIVIDE for division in measures. It handles division by zero safely and returns BLANK (or an alternate result) instead of an error.
AOV (Average Order Value) = DIVIDE([Total Sales], [Delivered Orders])
Discount % = DIVIDE([Total Discount], [Total Sales] + [Total Discount], 0)
Ravindra Bagale's Tip
Friends, many students write [Total Sales] / [Total Orders] and get errors or infinity when a city has no orders. Use DIVIDE(numerator, denominator), which returns blank (or an alternate value) when the denominator is zero. Prefer SWITCH(TRUE(), …) over deeply nested IFs for readability. Never forget this.
Ravindra Bagale's Tip – मराठी
मित्रांनो, बरेच students [Total Sales] / [Total Orders] लिहितात आणि एखाद्या city मध्ये orders नसतील तर errors किंवा infinity मिळवतात. DIVIDE(numerator, denominator) वापरा, जो denominator zero असताना blank (किंवा पर्यायी value) देतो. वाचायला सोपं जावं म्हणून खूप nested IFs ऐवजी SWITCH(TRUE(), …) वापरा. हे अजिबात विसरू नका.
Ravindra Bagale's Tip – हिंदी
दोस्तों, बहुत से students [Total Sales] / [Total Orders] लिखते हैं और किसी city में orders न होने पर errors या infinity पाते हैं. DIVIDE(numerator, denominator) इस्तेमाल करो, जो denominator zero होने पर blank (या दूसरी value) देता है. पढ़ने में आसानी के लिए बहुत nested IFs की जगह SWITCH(TRUE(), …) इस्तेमाल करो. यह बिल्कुल मत भूलना.