Hello! We're still fairly new to Tessitura so I'm still learning my way around the system.
I'm interested in creating a report that shows me what else attendees of a certain performance have purchased in the past - so for example, 25% of ticket buyers for XYZ upcoming show also attended ZYX past show. That gives me an idea of what shows to target, based on crossover/affinity.
Does anyone else look at this, either in Reports or Analytics? Thanks for your thoughts!
Hi Jean,
Crossover reporting as you've described is possible in Analytics. There are three approaches I'll describe here. Ultimately, we need a filter on Constituents who purchased a particular Production Season.
The more obvious way might be to create a Tessitura List, and then schedule the Generate List report to run prior to you Analytics load each night. With that in place, follow this help page for filtering a dashboard on a Tessitura List. Then add on Production Season with a count of Constituent ID, and see everything they've purchased.
The second approach, instead of using a Tessitura List, is to filter on Constituent ID, and then go straight to the Ranking type filter tab. From there, select to Top 100000 by a formula like ( [Total Ticket Count] , [Production Season] ), where in this filter value formula, Production Season is set to your base production season out from which you'll look at crossover. Then add on Production Season with a count of Constituent ID, and see everything they've purchased. One additional tidbit here is that unsold seats have a dummy customer ID on them in Analytics, so a unique count of Constituent ID will be one patron account higher than what you might expect. To correct that, you might add a filter on Type from the CONSTITUENT dimension, and exclude (none) and maybe also General Public for good measure.
The third approach is a more explicit filter on Constituent ID that doesn't involve deciding how many Constituent ID to include (e.g. TOP 100000), but also doesn't support the native, click-to-select, click-to-filter way of doing things. Here we still filter on Constituent ID, but go straight to the Advanced type filter tab. From there, paste in this code, and update Chicago 2020 with the exact name of the base Production Season from which you looking for crossover:
{ "attributes": [ { "dim": "[PERFORMANCE DETAIL.Production Season]", "filter": { "members": [ "Chicago 2020" ] } } ], "custom": true }
I don't have evidence, but my guess is that the Advanced Attribute filter will perform better than the Ranking type filter, because it has less work to do not having to rank all the Constituent IDs by their Total Ticket Count within the selected Production Season, but it's also definitely less friendly to set up.
Best,Chris
Hi Chris,
I have a question for you as this is super interesting and always like analysis like this.
In the above example, I am thinking there might be patrons that are listed, that may have been in more than one other production season, and that this is not a unique count from other productions. Possible a patron in Chicago 2020 was previously in a Christmas Story and also Mary Poppins, in the example? If that is true, what would be the best way to get the last unique production the Chicago 2020 patron was in, and possibly the reverse, what would be the way to get the first production patrons in Chicago 2020 were in, provided they are not new?
As always Thanks!
Mike
Hi Michael,
The quick approach to the latter item, first production, would be to use the First Performance Name and Date fields from the CONSTITUENT dimension instead of the regular Production Season field from the PERFORMANCE DETAILS dimension in the widget output.
For a more dynamic first or most recent prior production, I'm having trouble getting a formula to return that. I'd expect an IF() comparing RANK() of performance dates partitioned by Constituent ID ASC would allow counting the constituent only within the production that a 1-rank appears, And vice version, a similar performance date rank DESC, but with additional conditionals to ensure it's only ranking productions prior to the base production, and then counting the constituent only within the production that the 1-rank appears. Alas...
Thanks Chris, appreciate this. I'll try the for the latter first and see how that goes.