CALCULATE – The Most
Powerful DAX Function
Ike Ellis, MVP
Order Line Total = 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
Total Sales = SUM('Sales OrderDetails'[Order Line Total])
select sum(Sales.OrderDetails.unitprice * Sales.OrderDetails.qty)
from sales.OrderDetails
Name the
measure.
You’ll use
that in the
visualization
Built in DAX formula
Table name
Column nameEquals sign separates
expression name
from expression
formula
Total Sales = SUM('Sales OrderDetails'[Ordera Line Total])
Days To Ship = DATEDIFF('Sales Orders'[orderdate], 'Sales Orders'[shippeddate],DAY)
Average Days to Ship = AVERAGE('Sales Orders'[Days To Ship])
Dates = CALENDAR("1/1/2000", "12/31/2016")
Order Line Total = 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
Total Sales by year and with a page filter.
Measures Calculated Columns
Different functions Uses Row Contex
Doesn’t take up space Mostly text
Less space Executes at the point data is read into the model
and saved (value is static)
Filter Context
Executed at the time it is used
Beverages Total Sales = CALCULATE
(
SUM('Sales OrderDetails'[Order Line Total])
, 'Production Categories'[categoryname] = "Beverages"
)
AGGREGATION
FILTER
Look at the tab CALCULATE
CALCULATE(<expression>,<filter1>,<filter2>
…)
Total Sales - Beverages in USA = CALCULATE(
sum('Sales OrderDetails'[Order Line Total])
, 'Production Categories'[categoryname]= "Beverages"
, 'Sales Customers'[country] = "USA"
)
Country Count = COUNTROWS(
VALUES('Sales Orders'[shipcountry]))
Country Count wo VALUES = COUNTROWS('Sales Orders’)
Country Count Total = COUNTROWS(All('Sales
Orders'[shipcountry]))
Total Sales For Customers with Minimum Order Count v2 =
VAR MinimumOrderCount = 10
VAR CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] >
MinimumOrderCount)
VAR CustomersWithMinimumOrdersResult = CALCULATE
(
sum('Sales OrderDetails'[Order Line Total])
, CustomersWithMinimumOrders
)
RETURN CustomersWithMinimumOrdersResult
Number of Orders = COUNT('Sales Orders'[orderid])
Number of US Orders = CALCULATE
(
COUNT
(
'Sales OrderDetails'[orderid]
)
, FILTER
(
'Sales Customers'
, 'Sales Customers'[country] = "USA"
)
)
Minimum Order Customers =
VAR MinimumOrderCount = 10
var CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount)
RETURN CustomersWithMinimumOrders
Total Sales For Customers with Minimum Order Count =
VAR MinimumOrderCount = 5
VAR CustomersWithMinimumOrders = CALCULATE
(
sum('Sales OrderDetails'[Order Line Total])
, FILTER('Sales Customers', [Number of Orders] >
MinimumOrderCount)
)
RETURN CustomersWithMinimumOrders
Data Type Variable
Name
Variable
Value
RETURN myVar + 25
Expressions must use RETURN to return a value
YTD Total Sales = TOTALYTD
(
SUM('Sales OrderDetails'[Order Line Total])
, Dates[Date].[Date]
)
Total Sales Previous Month = CALCULATE
(
sum('Sales OrderDetails'[Order Line Total])
, PREVIOUSMONTH(Dates[Date])
)
Total Sales SUMX = SUMX(
'Sales OrderDetails'
, 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice
)
Total Sales = SUM('Sales OrderDetails'[Order Line
Total])
Days To Ship = DATEDIFF
(
'Sales Orders'[orderdate]
, 'Sales Orders'[shippeddate]
, DAY
)
Total Sales By Ship Year = CALCULATE
(
SUM('Sales OrderDetails'[Order Line Total])
, USERELATIONSHIP('Sales Orders'[shippeddate],
Dates[Date])
)
Only one active relationship at a time
• Parses
• Formats
• Shows execution plan
• Connects to SSAS Tabular or
Power BI Desktop
http://www.craftingbytes.com
http://blog.ikeellis.com
http://www.ikeellis.com
YouTube
http://www.youtube.com/user/IkeEllisData
San Diego Tech Immersion Group
http://www.sdtig.com
Twitter: @ike_ellis
619.922.9801
ike@craftingbytes.com
Slides for PUG 2018 - DAX CALCULATE

Slides for PUG 2018 - DAX CALCULATE

  • 1.
    CALCULATE – TheMost Powerful DAX Function Ike Ellis, MVP
  • 7.
    Order Line Total= 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
  • 8.
    Total Sales =SUM('Sales OrderDetails'[Order Line Total])
  • 9.
    select sum(Sales.OrderDetails.unitprice *Sales.OrderDetails.qty) from sales.OrderDetails
  • 10.
    Name the measure. You’ll use thatin the visualization Built in DAX formula Table name Column nameEquals sign separates expression name from expression formula Total Sales = SUM('Sales OrderDetails'[Ordera Line Total])
  • 12.
    Days To Ship= DATEDIFF('Sales Orders'[orderdate], 'Sales Orders'[shippeddate],DAY) Average Days to Ship = AVERAGE('Sales Orders'[Days To Ship])
  • 13.
  • 15.
    Order Line Total= 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice]
  • 18.
    Total Sales byyear and with a page filter.
  • 20.
    Measures Calculated Columns Differentfunctions Uses Row Contex Doesn’t take up space Mostly text Less space Executes at the point data is read into the model and saved (value is static) Filter Context Executed at the time it is used
  • 21.
    Beverages Total Sales= CALCULATE ( SUM('Sales OrderDetails'[Order Line Total]) , 'Production Categories'[categoryname] = "Beverages" ) AGGREGATION FILTER Look at the tab CALCULATE
  • 22.
  • 23.
    Total Sales -Beverages in USA = CALCULATE( sum('Sales OrderDetails'[Order Line Total]) , 'Production Categories'[categoryname]= "Beverages" , 'Sales Customers'[country] = "USA" )
  • 26.
    Country Count =COUNTROWS( VALUES('Sales Orders'[shipcountry])) Country Count wo VALUES = COUNTROWS('Sales Orders’)
  • 27.
    Country Count Total= COUNTROWS(All('Sales Orders'[shipcountry]))
  • 29.
    Total Sales ForCustomers with Minimum Order Count v2 = VAR MinimumOrderCount = 10 VAR CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount) VAR CustomersWithMinimumOrdersResult = CALCULATE ( sum('Sales OrderDetails'[Order Line Total]) , CustomersWithMinimumOrders ) RETURN CustomersWithMinimumOrdersResult
  • 30.
    Number of Orders= COUNT('Sales Orders'[orderid]) Number of US Orders = CALCULATE ( COUNT ( 'Sales OrderDetails'[orderid] ) , FILTER ( 'Sales Customers' , 'Sales Customers'[country] = "USA" ) )
  • 31.
    Minimum Order Customers= VAR MinimumOrderCount = 10 var CustomersWithMinimumOrders = FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount) RETURN CustomersWithMinimumOrders
  • 32.
    Total Sales ForCustomers with Minimum Order Count = VAR MinimumOrderCount = 5 VAR CustomersWithMinimumOrders = CALCULATE ( sum('Sales OrderDetails'[Order Line Total]) , FILTER('Sales Customers', [Number of Orders] > MinimumOrderCount) ) RETURN CustomersWithMinimumOrders
  • 33.
    Data Type Variable Name Variable Value RETURNmyVar + 25 Expressions must use RETURN to return a value
  • 35.
    YTD Total Sales= TOTALYTD ( SUM('Sales OrderDetails'[Order Line Total]) , Dates[Date].[Date] )
  • 36.
    Total Sales PreviousMonth = CALCULATE ( sum('Sales OrderDetails'[Order Line Total]) , PREVIOUSMONTH(Dates[Date]) )
  • 38.
    Total Sales SUMX= SUMX( 'Sales OrderDetails' , 'Sales OrderDetails'[qty] * 'Sales OrderDetails'[unitprice ) Total Sales = SUM('Sales OrderDetails'[Order Line Total])
  • 41.
    Days To Ship= DATEDIFF ( 'Sales Orders'[orderdate] , 'Sales Orders'[shippeddate] , DAY )
  • 45.
    Total Sales ByShip Year = CALCULATE ( SUM('Sales OrderDetails'[Order Line Total]) , USERELATIONSHIP('Sales Orders'[shippeddate], Dates[Date]) ) Only one active relationship at a time
  • 46.
    • Parses • Formats •Shows execution plan • Connects to SSAS Tabular or Power BI Desktop
  • 48.