Forum Discussion
PhMeDie
Helper I
6 years agoDax Formula Optimization - Counting transactions based on two facts
Hi, a quick question to the Pros. I need the number of transactions for all days on which we had recorded visitor footfall in our stores. Information is stored in two tables - Sales and Footfall. T...
- Anonymous6 years ago
The golden rule of DAX says: "You should NEVER filter a table when you can filter a column." One of the reasons is... speed. You are filtering the full expanded(!!!) table Sales and put it all as a filter. This is one of the worst things you can do in DAX. Instead, you should always filter columns only.
// Assumption is that Store and Calendar // are dimensions connected to 2 fact // tables, Sales and Footfall, and the // connection in 1:* and the filtering // is one-way. Transactions = var __DaysAndStoresWithFootfall = CALCULATETABLE( SUMMARIZE( Footfall, Store[StoreID], Calendar[Date] ), // No columns from fact tables // should ever be exposed to // the end user. If you do // expose them (very bad), // you have to wrap this condition // in KEEPFILTERS. Footfall[Footfall] > 0 ) var __result = CALCULATE ( // Why not DISTINCTCOUNT? DISTINCTCOUNTNOBLANK ( Sales[Transaction key] ), __DaysAndStoresWithFootFall, ALL( Stores ), ALL( 'Calendar' ) ) return __result
Anonymous
6 years agoNot applicable
The golden rule of DAX says: "You should NEVER filter a table when you can filter a column." One of the reasons is... speed. You are filtering the full expanded(!!!) table Sales and put it all as a filter. This is one of the worst things you can do in DAX. Instead, you should always filter columns only.
// Assumption is that Store and Calendar
// are dimensions connected to 2 fact
// tables, Sales and Footfall, and the
// connection in 1:* and the filtering
// is one-way.
Transactions =
var __DaysAndStoresWithFootfall =
CALCULATETABLE(
SUMMARIZE(
Footfall,
Store[StoreID],
Calendar[Date]
),
// No columns from fact tables
// should ever be exposed to
// the end user. If you do
// expose them (very bad),
// you have to wrap this condition
// in KEEPFILTERS.
Footfall[Footfall] > 0
)
var __result =
CALCULATE (
// Why not DISTINCTCOUNT?
DISTINCTCOUNTNOBLANK ( Sales[Transaction key] ),
__DaysAndStoresWithFootFall,
ALL( Stores ),
ALL( 'Calendar' )
)
return
__result