Customer Loyalty. New vs Existing Bookers in Analytics

Hi,

I'm trying to measure loyalty using New vs Existing bookers in Analytics.

Has anyone got any idea's on how to do this?

I'm trying to create a formula using the Constituent > First Performance Date and the current date, but it's not working for me.

I'm trying to do it in my Year on Year dashboard so that's making it a bit more complicated.

What I'd like is something like the following (in a stacked column chart):

Year        New Bookers        Existing Booker s

2019               55%                        45%

2018               57%                        43%

2017             58&                            42%

If anyone has any suggestions or other ideas on measuring loyalty it would be much appreciated.

I'm also thinking about a measure for 'Years since first performance', so measure more in depth, but one step at a time!

thanks,

Dara

  • Hi Dara,

    I run lists (and constituencies) for New, Renew, Reengage every year.  I then use a Custom Category to allow splitting between them.  My notes are here

    For loyalty I've been playing around in SQL with RFM analysis and Gaps and Islands, which is proving to be fun, both with Philanthropy and with Ticketing.  I gained that code from other lovely forum regulars and a little from the interwebs.  RFM is handy for measureing the quality of your relationship with a customer now.  Gaps and Islands is good to see patterns in historical data, eg: do people take gap-years from you, what's the most common length of tenure, did a particular bad year end with people switch off for a year and then come back or did you loose them altogether (perhaps because of a new business/artistic direction)

    hope that's of some use

  • Thanks Heath,

    I like it, very interesting.  I'm going to have to set some time aside to look at using lists and the custom categories.

    For a quick win I've used the 'Year of First Performance' field (See below). This works OK for a single year, but not as good for comparing behaviour year on year.

    I'm also thinking of using bucketing to put this into 'First Time Booker' and 'Existing Booker'. Stay tuned for how I get on with that.

    Thanks again, Dara

  • Hey Dara,
     
    I have made an analytics customisation for this, if you’re self-hosted I can share it with you?
     
    Cheers,
     
    Gary
     
    Gary
     Halliday|
    Head of Business Systems|
    020 3973 5200 (Ext 200)|
    The Roundhouse is a hub of inspiration where artists and emerging talent create extraordinary work and where young people can grow 
    creatively as individuals. We believe in the power of creativity to change lives. By giving young people the chance to engage with the arts through our 
    music, media and performance projects, we inspire them to reach further, dream bigger, and achieve more.
    Roundhouse Trust registered office: Roundhouse, Chalk Farm Road, London NW1 8EH. A company limited by guarantee. Registered in England and Wales. Company number 3572184. Charity number 1071487. This message is private and confidential. If you've received it in error, please notify us and remove it from your system.
  • Hi Gary,

    Yes, we are self hosted, and yes, would love it you could share your customisation.

    Thanks a mil, Dara


  • Hi Dara,

    If you're just after the counts, a formula could help with that. For NEW BOOKERS, I'll assume in any given Year we need a count of Constituents who booked in that year and no prior year. For EXISTING BOOKERS I'm working under the assumption that they booked this year and in ANY prior year included in Analytics.

    Filter the dashboard on Season Fiscal Current Year Offset (assumes 15.1.7 or later), and include the current and prior few years.

    In a new Pivot widget, add Season Fiscal Year on Rows.

    Create a new Value formula that will look something like this in the end:

    SUM ( [Constituent ID] , IF (
       [Max Season Fiscal Current Year Offset] = 0 AND ISNULL( ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset] ) )
      , 1 , NULL )
      )

    For each Constituent ID, within the current Row (Season Fiscal Year), if we're in the fiscal year row that is the current fiscal year (Max Season Fiscal Current Year Offset = 0) and the constituent has no performances in any season prior to the current season ([Season Fiscal Current Year Offset] filtered to "< 0", plus that ALL( [Season Fiscal Year] ) to look outside of the given Row, and ISNULL() to return "TRUE" when the results don't exist.), then return a 1 to the SUM function. This results in a count of constituents who are New Bookers in the Current Season Fiscal Year (whatever year that is).

    The trick now is that we need that Value to return different counts depending on which Row of our Pivot table we're in. That's how we might end up with something like:

    SUM ( [Constituent ID] , IF (
        [Max Season Fiscal Current Year Offset] = -3 AND ISNULL( ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset < -3] ) ) OR
        [Max Season Fiscal Current Year Offset] = -2 AND ISNULL( ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset < -2]) ) OR
        [Max Season Fiscal Current Year Offset] = -1 AND ISNULL( ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset < -1] ) ) OR
        [Max Season Fiscal Current Year Offset] = 0 AND ISNULL( ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset < 0] ) )
    , 1 , NULL )
      )

    Each line within the IF() statement starts by asking whether the current row's season is the current, prior, or 1 of the 2 season before that. Then inspects whether the constituent has any performances in season fiscal years prior to the season fiscal year of that row. (I am showing the Season Fiscal Current Year Offset filtering in the field descriptions above for convenience. The fields in the formula editor won't present them in this way.)

    For Existing Bookers, the approach is the same, but instead of ISNULL(), we'll inspect whether that count of performances in prior seasons is > 0.

    SUM ( [Constituent ID] , IF (
       [Max Season Fiscal Current Year Offset] = -3 AND ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset] ) > 0 OR
       [Max Season Fiscal Current Year Offset] = -2 AND ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset1] ) > 0 OR
       [Max Season Fiscal Current Year Offset] = -1 AND ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset2] ) > 0 OR
       [Max Season Fiscal Current Year Offset] = 0 AND ( [# of unique Performance ID] , ALL( [Season Fiscal Year] ) , [Season Fiscal Current Year Offset3] ) > 0
    , 1 , NULL )
      )

    A really nice characteristic of this formula approach is that it will respect your other filters. If on the fly or for copies of this dashboard, you want to exclude certain Season Types or exclude Comps, you can do that and the numbers will adjust accordingly. The less nice thing is that given the complexity here, it might take a long time to render this widget. It took about 8 seconds on my laptop for 4 seasons and about 1,800 constituents in that Pivot widget. The Bar chart takes about 3 seconds.

     BookersNew&ExistingbySeasonFiscalYear.dash

    After getting this put together and uploaded here, I realized that if you're not limited to Season Fiscal Year, but are okay with Calendar Year, you could use the CONSTITUENT First Performance Date field to inspect for each Performance Date Calendar Year whether the constituents who purchased in that year had a First Performance Date in that year or some prior year. So for the New Bookers, something like this where [Years in Date] is from the [PERFORMANCE DATE].[Date] field:

    SUM ( [Constituent ID] ,
           CASE WHEN MAX( YDIFF( [Years in First Performance Date] , [Years in Date] ) ) = 0
           THEN 1 ELSE NULL END
          )

    For Existing Bookers then, instead of = 0, use < 0.

    Dashboard filters include Performance Date in This and the 3 Prior Years. And the widgets will again respect other filters like Price Type Category or Season Type. And this one loads a lot faster.

     BookersNew&ExistingbyCalendarYear.dash

    Chris Wallingford
    Product Owner
    Tessitura Network
    office: +1 888.643.5778 x553
    chris.wallingford@tessituranetwork.com