What are the Historic attributes in Insights?

Have more questions? Submit a request


  • Joel Hellman

    This article is helpful, but I would love to see an example use case.

  • Bernd Sawatzki

    Hallo ,

    in which dataset ( in incremental exports / api ) can we find these historic fields ???


    Bernd Sawatzki

  • Amy Dee

    Hi Joel! Sorry about the delay! There are a lot of use cases where the Historic attributes could be helpful. For example, you could find all tickets that were ever in Urgent priority, which agent was assigned to a ticket before it was escalated, or which group logs the most handle time.

    Here's a quick example that uses satisfaction ratings. In this ticket, "Sally Staff Agent" got a bad rating. Then, agent "Amy Dee" took over, and the customer changed their rating to good. The ticket attributes - Ticket Assignee and Ticket Satisfaction Score - show the current rating and current assignee. However, with Ticket Assignee (Historic) and Satisfaction New Value, we can see who was assigned at earlier ratings:


    To Bernd - the Historic attributes are only available in Insights. They aren't stored as data points in the incremental or audits API. The API endpoints focus on the values that actually change.

    In Insights, the Historic attributes are stored in the "System Field History" dataset, which is connected to the "Ticket Text Field Change," "Ticket Numeric Change," and "Satisfaction Survey Change" datasets.

  • Bernd Sawatzki

    Hallo Amy,

    we want to count the tickets a certain agent worked in on a certain date, where the (historic) ticket-group to this date has a certain value.

    I tried with ticket-comments or ticket-updates, but there can be more than one comment / update in one ticket, so my report ( counting tickets ) is not correct !?!

    Do you have an idea, how wo can solve this problem / reporting ...

    Bernd Sawatzki

  • Amy Dee

    Hi Bernd! This type of reporting is difficult, because the best approach depends heavily on your workflow.

    There is one thing we can clear up here, though. The # Ticket Updates metric is SELECT COUNT(Ticket UpdatesTicket Text Field Change). This means the metric is counting individual updates with at least one matching text field change. 

    If you're interested in counting whole tickets instead, you need a metric that starts with this: SELECT COUNT(Ticket IdTicket Text Field Change). This means it counts tickets with at least one matching text field change. (You would use the rest of the metric to identify what type of change you're looking for.) With this type of COUNT, each ticket will count once per report slice, even if there are multiple matching updates.

    The count is simple enough to fix. The rest gets tricky, since there are a lot of moving parts. I'm going to start a ticket for you, so we can look at specific examples from your account.

    Watch for my email, and happy reporting!

  • Robert Newsome

    Is there any way to report on the Historic Assignee related to SLA Breaches within Insights? I understand this might not necessarily be a Text Field change but worth an ask.

  • Amy Dee

    Hi Robert! SLAs breaches do not create ticket events. They're recorded separately in a "metric event" stream, since they have a lot of unique properties that don't fit well with ticket updates. Unfortunately, that means the historic ticket attributes are not recorded at the time of an SLA breach. 

    I'm sorry I don't have an easy answer for you, but I hope this helps. Happy reporting!

  • Jenni Hedman-liback

    Is it possible to create a sum of tickets that have at some point in time been on hold? So changed from Open to On hold to Solved ? 
    I'd like to create a report that tells me how many tickets e.g. per month are on hold and what is their average hold time. 

  • Amy Dee

    Hi Jenni! That sort of report is definitely possible. You wouldn't need to use Historic attributes, though, since you're focused on status changes on their own. (Historic attributes would help you find the status during another type of change.)

    For the report you describe, I recommend this article on Building custom metrics for the Events Model. That article introduces ticket update data and various types of field changes.

    You're looking for tickets where the status changes to on-hold at some point. As a simple starting point, you could try a metric like this:

    • SELECT COUNT(Ticket Id, Ticket Text Field Change) WHERE [Text Field] New Value = [Status] hold AND Ticket Status <> Deleted

    That should find tickets where the status changed to on-hold at least once. (For reference, we have a recipe for finding Ticket creation events that uses similar logic.) 

    With this metric, Date (Ticket Created) and Date (Ticket Solved) would show when the ticket as a whole was created or solved, and Date (Event) would show when the status actually changed. Event dates would allow you to report on tickets based on when they were put on-hold.

    As for durations, there is a default metric - Hold Time (hrs) [Mdn] - that shows the total amount of time a ticket spent on-hold. If you want to see how long the ticket spent in each status at every change, I recommend this recipe for Reporting on the duration of a text field.

    I hope this helps! Happy reporting

  • Jenni Hedman-liback

    Hi Amy and thank you so much for your help!
    I seem to have an issue with creating the metric:  

    I can't seem to find how to create the [Text Field] New Value = [Status] hold -section. 
    Can you help?
  • Amy Dee

    Hi Jenni! Your metric looks good so far!

    [Status] hold is under Attribute Values. When you click Attribute Values, it will show you the list of attributes again. That's normal. In this case, you already placed [Text Field] New Value, so that's the attribute you need to look for.

    When you go to Attribute Values and select [Text Field] New Value, it will show you the list of available values for that attribute. One of them will be [Status] hold. It will appear orange once you add it to the metric.

    Be careful with the [Text Field] New Value and [Text Field] Previous Value attributes. Their values look identical once they're in the metric editor, but they aren't interchangeable. Make sure you use the right versions.

    I hope this helps! Happy reporting!

  • Joshcastiglioni

    Hi! Desperately need to know how to track the different brands a ticket had. There isn't a historical ticket brand, but could their be a work around. The report I need has to reflect the amount of tickets that have been updated from brand a to brand b. Please help!

  • Brett - Community Manager

    Hi Josh,

    I reached out to one of our Insights gurus here and it doesn't look like there's a way to capture historical data for ticket brands :-/ I'm thinking the best option here is to create a trigger that tags these tickets when Ticket Brand A is changed to Ticket Brand B in a ticket. Then pull a list of tickets that contain that tag. More on tag reporting can be found in our Reporting on one or more tags article which I've linked for you.

    Hopefully this workaround will help capture the information you're looking for.


  • Lucie Becquart

    Hi !

    Looks like historic attributes could help me solve my issue. I would like to count how many times an agent solved a ticket (which is different from the number of tickets solved by the agent). 

    The usecase is when a ticket was first solved by an agent 1, re-opened by agent 2 and re-solved by agent 2. 

    How could we count 1 solved action by agent ? Is it possible with the historic attributes of the status ? 

    Thanks for your help ! 

  • Amy Dee

    Hi Lucie! You should be able to get this information with a solve event metric. You may not even need historic attributes here, but they can provide useful context.

    For more information on event reporting, here's our article on Building metrics for the events model

    I'd start with the default # Tickets Solved metric, which counts whole tickets based on a solve event on the final solve date:

    • SELECT IFNULL(COUNT(Ticket Id, Ticket Text Field Change), 0) WHERE [Text Field] New Value IN ([Status] solved, [Status] closed) AND [Text Field] Previous Value <> [Status] solved AND Ticket Status IN (Solved, Closed) AND Date (Event) = (SELECT MAX(SELECT Date (Ticket Solved) BY Ticket Id) BY Ticket Id)

    In your case, you want to find individual solve events, not whole tickets, and you want to see them throughout the life of the ticket, not just at the end. To do that, you need to make three changes:

    • Change the count from Ticket Id to Ticket Updates
    • Change the current status filter from IN (SolvedClosed) to <> Deleted
    • Remove the Date (Event)Date (Ticket Solved) part completely

    The result should look like this:

    • SELECT IFNULL(COUNT(Ticket Updates, Ticket Text Field Change), 0) WHERE [Text Field] New Value IN ([Status] solved, [Status] closed) AND [Text Field] Previous Value <> [Status] solved AND Ticket Status <> Deleted 

    This counts all updates where the status goes to solved or closed from something other than solved, regardless of whether/when the ticket was finally solved.

    With this metric, the Updater is the person (or process) that actually set the ticket to solved, and the Ticket Assignee (Historic) is the agent who was assigned to the ticket at the time. It works best with Date (Event).

    As a quick disclaimer: this recipe is just for demonstration purposes. I can't guarantee it for all use cases, and I strongly recommend that you audit your results.

    I hope this helps! Happy reporting!


Please sign in to leave a comment.

Powered by Zendesk