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