Andre Fomin Andre Fomin

Streak Analysis

If you are trying to manage customer or employee engagement, but have no quantitative understanding of impressions, engagements, and conversions, then you have zero grasp of your reach. If basics are covered, you should focus on the quality of the engagement. Streak Analysis could be very useful to understand patterns of engagement. Learn how to create the DAX calculations and use them in a report in this blog post.

Tracking metrics like impressions, engagements, and conversions gives us a broad overview of our campaign's performance. However, this approach misses out on understanding the engagement patterns, which is crucial for deeper insights. Streak analysis comes into play here, offering a closer look at how and when users interact with our content over time. It goes beyond the surface to reveal where our content truly resonates and areas where it falls short. More than just numbers, streak analysis provides a behavioral lens to understand our customers, complementing traditional demographic attributes. By identifying consistent engagement patterns or lack thereof, we can tailor our content more effectively, ensuring it strikes the right chord with our audience at the right times. This method empowers us to refine our strategies, focusing on creating content that maintains user interest and fosters sustained engagement.

Here you see an example of how Streaks might be used in a dashboard.

Max Streaks reveal the longest continuous user engagement, indicating peak interest.

Avg Streaks, on the other hand, show the overall consistency of engagement across campaigns.

Together, they provide a comprehensive view of content performance, from highest engagement peaks to general engagement trends, guiding strategic content improvement.

The Streaks are calculated in two steps, the first step is to calculate the Last Streak Duration for the specified User, Campaign and Date

LastStreak = 
	var _user = SELECTEDVALUE(User[User])
	var _campagin = SELECTEDVALUE(Campaign[Campaign])
	var _last_date = MAX('Date'[Date])
	var _last_streak_start_date = 
		CALCULATE(MAX(Activity[Date]), 
			FILTER(ALL(Activity),
					Activity[User] = _user && 
					Activity[Campaign] = _campagin &&
					Activity[hasEngaged] = FALSE() &&
					Activity[Date]<_last_date)
			
		)
	var _streak =  CALCULATE(COUNTROWS(Activity), 
					FILTER(ALL(Activity),
						Activity[User] = _user && 
						Activity[Campaign] = _campagin &&
						Activity[Date]<= _last_date &&
						Activity[Date]>= _last_streak_start_date &&
						Activity[hasEngaged] = TRUE())
	)
	return _streak

Then we can calculate our Max and Avg Streaks:

Avg Streak = 
CALCULATE(AVERAGEX(ADDCOLUMNS(Activity, "_streak", [LastStreak]), [_streak]))

Max Streak = 
CALCULATE(MAXX(ADDCOLUMNS(Activity, "_streak", [LastStreak]), [_streak]))
Read More