Interact Advanced Analytics

Interact Advanced Analytics allows you to capture a wide range of transactional data (page hits, and dynamic events), and access the raw analytics data via your BI tooling of choice to analyze at will. You can use this data to create own reports, visualizations, dashboards, and usage models, which may not be available out of the box.

Advanced Analytics is a side-car component which means it does not impact the site performance under load, or when performing heavy analysis. It is secured with state of art encryption in-transit and at-rest, with completely isolated storage per customer.

Advanced analytics also supports configuration through the Developer Framework, to provide the capabilities to enrich the data and events captured within Advanced Analytics - from adding custom fields, controlling session length, to excluding certain user groups.

You can use Interact's Advanced Analytics with tools like:

  • Tableau
  • Power BI
  • Looker
  • Qlik
  • SAS BI
  • SAP Business Objects
  • Sisense
  • Infor Birst
  • etc.

You can also access this data programmatically in eg.

  • Python
  • Jupyter Notebooks
  • etc.

Advanced Analytics Schema

Main Events Table
The main table stores detailed information about each captured event. This includes information about the event, the person who triggered the event, the user journey, the device used, the request, and more.

GroupField NameField TypeDescription
Hostinghosting_podstringHosted pod name - EU, US
Tenanttenant_guidstringTenant GUID in Interact's cloud ecosystem - can be retrieved from the /info path on the site domain
Versionsversion_interactstringNeutrino version
Versionsversion_junejsstringVersion of the Advanced Analytics collector script
Person/Userperson_idstringInternal Interact Person ID
Person/Userperson_ispoweruserbooleanTrue if PowerUser, False otherwise
Person/Userperson_timezonestringTimezone set in the Neutrino profile
Person/Userperson_primarycompanystringPrimary Company set on user's profile - comapny may be renamed on the Interact UI to another entity by using System Text (eg. Primary Division)
Person/Userperson_primarydepartmentstringPrimary Department set on user's profile - department may be renamed on the Interact UI to another entity by using System Text (eg. Primary Cost Center)
Person/Userperson_primarylocationstringPrimary Location set on user's profile - location may be renamed on the Interact UI to another entity by using System Text (eg. Primary Store Number)
Authenticated Sessionauthentication_sessionidstringLogged in Session ID - not related to interaction session/user journey session. It is reset every time the login session expires and requires to be refreshed. Not related to the interaction session.
Interactive Sessionsession_interactionguidstringRandom GUID which is used for connecting each interaction in the tracked session - stored in localstorage and reset if the session TTL is exceeded between 2 interaction points.
Interactive Sessionsession_pageindexintPage number in the current user journey (interaction chain) - session timeout resets back to full time after each interaction - eg. 30 mins threshold, will allow for maximum of 30 mins wait between each interaction, before considering the session ended. Starts with 0 for the first interaction, and then increments with each page change.
Interactive Sessionsession_interactionindexintInteraction number in the current user journey (interaction chain) - session timeout resets back to full time after each interaction - eg. 30 mins threshold, will allow for maximum of 30 mins wait between each interaction, before considering the session ended. Starts with 0 for the first interaction, and then increments with each interaction (page or dynamic event - eg. blog was liked.)
Devicedevice_browserinfostringParsed UserAgent info - browser name and browser version (space separated)
Devicedevice_useragentstringUser agent
Devicedevice_browserlanguagestringBrowser language
Devicedevice_browsergeolocationenabledbooleanDoes the browser have location services enabled? - measured with Modernizr
Devicedevice_browsertouchenabledbooleanIs the browser touch enabled? - measured with Modernizr
Devicedevice_browserhtml5videoenabledbooleanDoes the browser have HTML 5 videos enabled? - measured with Modernizr
Devicedevice_browsersvgenabledbooleanDoes the browser support SVGs? - measured with Modernizr
Devicedevice_screenresolutionstringResolution of the screen (not browser size)
Eventevent_namestringText representation of the event - eg. Liked blog - from the "Tracked Events" table below
Eventevent_idstringThe unique identifier of the event.
Requestrequest_pageloaddurationintTime taken for the document.ready event to fire from start of HTML rendering
Requestrequest_pagetitlestringTitle of the window tab
Requestrequest_urlstringURL of the loaded page
Requestrequest_interactmodulestringInteract module which is inferred from the URL pattern - from the "Tracked Modules" table below
Requestrequest_timestamputctimestampUTC timestamp measured on the browser
Requestrequest_timestampusertimetimestampUser's browser time measured on the browser (not based on profile timezone set on user's profile)
Requestrequest_ipaddressstringClient IP detected upon ingestion - not available for the referrer fields.
Referrerreferrer_pageloaddurationintTime to document.ready event on the previous page (if any)
Referrerreferrer_pagetitlestringPrevious page title (if any)
Referrerreferrer_urlstringURL of the previous page in the interaction chain.
Referrerreferrer_interactmodulestringPrevious page module (if any) - from the "Tracked Modules" table below
Referrerreferrer_timestamputctimestampPrevious page request timestamp (UTC time) (if any)
Referrerreferrer_timestampusertimetimestampPrevious page request timestamp (user's time) (if any)
Custom Fieldscustom_field1stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field2stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field3stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field4stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field5stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field6stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field7stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field8stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field9stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Custom Fieldscustom_field10stringCan be populated by the customer with any data they want - eg. EmployeeID, WorkdayID
Autodetected Info from CDNautodetected_citystringPulled from the CloudFront headers (if present) - Contains the name of the viewer’s city.
Autodetected Info from CDNautodetected_countrystringPulled from the CloudFront headers (if present) - Contains the two-letter country code for the viewer’s country. For a list of country codes, see ISO 3166-1 alpha-2.
Autodetected Info from CDNautodetected_countrynamestringPulled from the CloudFront headers (if present) - Contains the name of the viewer’s country.
Autodetected Info from CDNautodetected_regionstringPulled from the CloudFront headers (if present) - Contains a code (up to three characters) that represent the viewer’s region. The region is the most specific subdivision of the ISO 3166-2 code.
Autodetected Info from CDNautodetected_regionnamestringPulled from the CloudFront headers (if present) - Contains the name of the viewer’s region. The region is the most specific subdivision of the ISO 3166-2 code.
Autodetected Info from CDNautodetected_latitudestringPulled from the CloudFront headers (if present) - Contains the viewer’s approximate latitude.
Autodetected Info from CDNautodetected_longitudestringPulled from the CloudFront headers (if present) - Contains the viewer’s approximate longitude.
Autodetected Info from CDNautodetected_metrocodestringPulled from the CloudFront headers (if present) - Contains the viewer’s metro code. This is present only when the viewer is in the United States.
Autodetected Info from CDNautodetected_postalcodestringPulled from the CloudFront headers (if present) - Contains the viewer’s postal code.
Autodetected Info from CDNautodetected_timezonestringPulled from the CloudFront headers (if present) - Timezone in detected location, in IANA time zone database format (for example, America/Los_Angeles).
Autodetected Info from CDNautodetected_androidviewerbooleanPulled from the CloudFront headers (if present) - Set to true when CloudFront determines that the viewer is a device with the Android operating system.
Autodetected Info from CDNautodetected_desktopviewerbooleanPulled from the CloudFront headers (if present) - Set to true when CloudFront determines that the viewer is a desktop device.
Autodetected Info from CDNautodetected_iosviewerbooleanPulled from the CloudFront headers (if present) - Set to true when CloudFront determines that the viewer is a device with an Apple operating system.
Autodetected Info from CDNautodetected_mobileviewerbooleanPulled from the CloudFront headers (if present) - Set to true when CloudFront determines that the viewer is a mobile device.
Autodetected Info from CDNautodetected_smarttvviewerbooleanPulled from the CloudFront headers (if present) - Set to true when CloudFront determines that the viewer is a smart TV.
Autodetected Info from CDNautodetected_tabletviewerbooleanPulled from the CloudFront headers (if present) - Set to true when CloudFront determines that the viewer is a tablet.
Applicationis_mobilebooleanIndicates whether the event came from the Mobile Application.
Searchsearch_idstringInternal Interact Search ID.
Social Advocacysocialadvocacy_channelstringChannel used to share the page via the Social Advocacy feature.
Social Advocacysocialadvocacy_urlstringURL attached to the Social Advocacy post.
Social Advocacysocialadvocacy_postedcontentstringMessage added to the Social Advocacy post.
Social Advocacysocialadvocacy_contentidintInternal Interact ID of the page shared via the Social Advocacy feature.
Content Itemcontent_item_typestringType of the object on which the event was performed, e.g., 'FeedItem'.
Content Itemcontent_item_idintInternal Interact ID of the object on which the event was performed.

Search Table

The "search" table stores additional information about the "Search" events. It tracks the type of search, the search term used, and the total number of results.

Field NameField TypeDescription
event_idstringThe unique identifier of the event.
search_termstringPhrase that was used to perform the search.
search_typestringSearch type. Possible values are "general_search" and "quick_search".
total_resultsintTotal number of the search results.
search_session_guidstringThe unique identifier of the search session.
captured_date_utctimestampTimestamp of the record.

Chosen Search Result Table

The "chosen_search_result" table stores additional information about the "Search Result Clicked" events. It tracks details about the search results that were opened by the user.

Field NameField TypeDescription
event_idstringThe unique identifier of the event.
search_event_idstringThe ID of the "Search" event that returned the chosen search result.
urlstringURL of the search result.
titlestringTitle of the search result.
typestringType of the search result. Possible values are "Page", "Category", "Profile", etc.
result_orderintIndex of the chosen result in the list of search results.
captured_date_utctimestampTimestamp of the record.

Person Groups Table

The "person_groups" table stores a person's groups for each recorded event. It indicates which groups the user belonged to at the time of the event. In Interact, these groups are known as Personas.

Field NameField TypeDescription
event_idstringThe unique identifier of the event.
group_idintInternal Interact ID of the group.
group_namestringGroup name.
captured_date_utctimestampTimestamp of the record.

Feed Post Table

The "feed_post" table stores additional information about the "Feed Post Created" events.

Field NameField TypeDescription
event_idstringThe unique identifier of the event.
feed_post_idintInternal Interact ID of the feed post.
feed_typestringType of the feed. Possible values are "Global" and "Community".
community_idintInternal Interact ID of the community.
community_namestringCommunity name.
captured_date_utctimestampTimestamp of the record.

Feed Post Keywords Table

The "feed_post_keywords" table stores hashtags and topics that were used to create the Feed Post.

Field NameField TypeDescription
event_idstringThe unique identifier of the event.
feed_post_idintInternal Interact ID of the feed post.
keywordstringTopic or hashtag without the hash/pound sign.
keyword_typestringKeyword type. Possible values are "Keyword" and "Topic".
captured_date_utctimestampTimestamp of the record.

Tracked Events

Area

Event Name

Match Criteria

HTTP Method

Traffic Type

Broadcasts

Visited Broadcast

loweredUrl == "/broadcasts"

GET

Page URL

Pulse

Visited Pulse

loweredUrl == "/pulse/auth/getloginlink"

GET

Page URL

General

Page Hit

Default

GET

Page URL

Blogs

Created blog

url == "/api/blog/"

POST

XHR

Blogs

Edited blog

url == "/api/blog/"

PUT

XHR

Blogs

Deleted blog

url == "/api/blog/"

DELETE

XHR

Blogs

Liked blog

/(api/blog/([0-9]+)/blog-post/([0-9]+)/like)$/.test(url)

POST

XHR

Blogs

Unliked blog

/(api/blog/([0-9]+)/blog-post/([0-9]+)/like)$/.test(url)

DELETE

XHR

Blogs

Saw who liked blog

/(api/blog/post/([0-9]+)/like)/.test(url)


XHR

Blogs

Liked blog comment

/(api/([0-9]+)/like)$/.test(url)

POST

XHR

Blogs

Unliked blog comment

/(api/([0-9]+)/like)$/.test(url)

DELETE

XHR

Blogs

Liked blog comment reply

/(api/([0-9]+)/reply/([0-9]+)/like)$/.test(url)

POST

XHR

Blogs

Unliked blog comment reply

/(api/([0-9]+)/reply/([0-9]+)/like)$/.test(url)

DELETE

XHR

Blogs

Saw who liked blog comment

/(api/person/0/timeline/([0-9]+)/like)$/.test(url)


XHR

Blogs

Saw who replied to blog comment

/(api/blog/([0-9]+)/blog-post/([0-9]+)/comment/([0-9]+)/reply)/.test(url)

GET

XHR

Blogs

Commented on blog

/(api/blog/([0-9]+)/blog-post/([0-9]+)/comment)$/.test(url)


XHR

Blogs

Subscribed to blog

/(api/blog/([0-9]+)/person/([0-9]+)/subscribe)$/.test(url)


XHR

Blogs

Unsubscribed from blog

/(api/blog/([0-9]+)/person/([0-9]+)/unsubscribe)$/.test(url)


XHR

People

Followed user

/(api/people/followers/([0-9]+))$/.test(url)

PUT

XHR

People

Unfollowed user

/(api/people/followers/([0-9]+))$/.test(url)

DELETE

XHR

People

Endorsed user

/(api/people/([0-9]+)/expertise/([0-9]+)/endorsement)$/.test(url)

POST

XHR

People

Removed endorsement

/(api/people/([0-9]+)/expertise/([0-9]+)/endorsement)$/.test(url)

DELETE

XHR

Timeline

Posted to timeline

/(/api/person/([0-9]+)/timeline)$/.test(url)

POST

XHR

Timeline

Deleted post in timeline

/(/api/person/([0-9]+)/timeline/([0-9]+))$/.test(url)

DELETE

XHR

Timeline

Liked timeline

/(api/person/([0-9]+)/timeline/([0-9]+)/like)$/.test(url)

POST

XHR

Timeline

Unliked timeline

/(api/person/([0-9]+)/timeline/([0-9]+)/like)$/.test(url)

DELETE

XHR

Timeline

Replied to timeline post

/(api/person/([0-9]+)/timeline/([0-9]+)/reply)$/.test(url)

POST

XHR

Timeline

Liked timeline reply

/(api/person/([0-9]+)/timeline/([0-9]+)/reply/([0-9]+)/like)$/.test(url)

POST

XHR

Timeline

Unliked timeline reply

/(api/person/([0-9]+)/timeline/([0-9]+)/reply/([0-9]+)/like)$/.test(url)

DELETE

XHR

Social Advocacy

SA Share

Raised when the user shares a page via the Social Advocacy feature


JavaScript Event

Social Advocacy

SA Clickthrough

/public/il/{linkId}


Page URL

Search

Search

Raised when the user searches for something in Quick or General Search


JavaScript Event

Search

Search Result Clicked

Raised when the user opens a search result from Quick or General Search


JavaScript Event

Feed

Feed Post Created

Raised when the user posts to the Feed


JavaScript Event

Feed

Liked Feed Item

Raised when the user likes a Feed Item


JavaScript Event

Feed

Commented on Feed Item

Raised when the user comments on a Feed Item


JavaScript Event

Feed

Feed Item Impression

Raised when the Feed Item takes at least 80% of the viewport


JavaScript Event

Tracked Modules

Module NameMatch CriteriaHTTP MethodTraffic Type
Absence BookingloweredUrl.includes("absencebooking2")GETPage URL
AdministrationloweredUrl.includes("admin")GETPage URL
AnalyticsloweredUrl.includes("analytics")GETPage URL
BlogloweredUrl.includes("blog/blog")GETPage URL
BroadcastsurlObj.pathname == '/broadcasts' || urlObj.pathname == '/broadcasts/create'GETPage URL
Business ContactsloweredUrl.includes("contacts")GETPage URL
CalendarloweredUrl.includes("calendar")GETPage URL
CalendarloweredUrl.includes("addeditcalendar")GETPage URL
Case ManagementloweredUrl.includes("/cmm2")GETPage URL
CategoryloweredUrl.includes("pages/section/sub")GETPage URL
Content Area / Team Homepage / HomepageloweredUrl.includes("section/default.aspx")GETPage URL
Developer FrameworkloweredUrl.includes("/developerframework")GETPage URL
Developer FrameworkloweredUrl.includes("developer")GETPage URL
Error PageloweredUrl.includes("error")GETPage URL
ExpensesloweredUrl.includes("expenses")GETPage URL
FootballloweredUrl.includes("footballv4")GETPage URL
ForumsloweredUrl.includes("forum")GETPage URL
GalleryloweredUrl.includes("gallery")GETPage URL
Getting StartedloweredUrl.includes("/gettingstarted")GETPage URL
HomepageloweredUrl.includes("default.aspx?homepage=")GETPage URL
HomepageloweredUrl.includes("/home/")GETPage URL
Manage Homepages AdminloweredUrl.includes("/managehomepages")GETPage URL
Homepage editsloweredUrl.includes("/zones")GETPage URL
Manage IP AddressesloweredUrl.includes("/manageipaddresses")GETPage URL
Mandatory ReadsloweredUrl.includes("mandatoryread")GETPage URL
Media ManagerloweredUrl.includes("content/media")GETPage URL
Network DirectoryloweredUrl.includes("networkdirectory")GETPage URL
NotificationsloweredUrl.includes("notifications")GETPage URL
OrganogramloweredUrl.includes("organogram")GETPage URL
OrganogramloweredUrl.includes("organagram")GETPage URL
OtherDefaultGETPage URL
PageloweredUrl.includes("document.aspx")GETPage URL
PageloweredUrl.includes("interactv7/composer/")GETPage URL
Page EditorloweredUrl.includes("composer/upload")GETPage URL
Page EditorloweredUrl.includes("composer.aspx")GETPage URL
People DirectoryloweredUrl.includes("modules/directory/")GETPage URL
People DirectoryurlObj.pathname == '/person'GETPage URL
Profile/\person/([0-9]+)/.test(loweredUrl)GETPage URL
PollsloweredUrl.includes("/poll")GETPage URL
RewardsloweredUrl.includes('settings/people/reward')GETPage URL
Room & ResourceloweredUrl.includes("roombooking")GETPage URL
SearchloweredUrl.includes("search")GETPage URL
SharePoint AdminloweredUrl.includes("/sharepointconnection")GETPage URL
Short URL AdminloweredUrl.includes("/shorturl")GETPage URL
System Text AdminloweredUrl.includes("/systemtext")GETPage URL
TasksloweredUrl.includes("tasks")GETPage URL
Team BlogloweredUrl.includes("blog/teamblog")GETPage URL
Team BlogloweredUrl.includes("blog/addeditteam")GETPage URL
TeamsloweredUrl.includes("directory/interactteams.aspx")GETPage URL
TeamsloweredUrl.includes("directory/teams")GETPage URL
Training ManagerloweredUrl.includes("/trainingmanager")GETPage URL
UMIloweredUrl.includes("/umi")GETPage URL
Workflow & FormsloweredUrl.includes("workflow")GETPage URL

Query Performance Tuning

Useful links from AWS to help optimize the query performance via better use of JOINS, ORDER, column usage, loading most relevant data only (eg. last 3 months, instead of All Time) etc.

https://aws.amazon.com/blogs/big-data/top-10-performance-tuning-tips-for-amazon-athena/

https://docs.aws.amazon.com/athena/latest/ug/performance-tuning.html#performance-tuning-query-optimization-techniques

Useful excerpts.

ORDER BY

JOINS

Column Selection

Functionality Support

Interact Advanced Analytics is based on AWS Athena Engine 2, which comes with major improvements over version 1. You can find the reference below.

https://docs.aws.amazon.com/athena/latest/ug/engine-versions-reference.html#engine-versions-reference-0002

Browser-Side vs Server-Side Tracking - Understanding the Mechanisms in Play

Interact Advanced Analytics captures an exceptionally wide range of events and user context. The service relies on browser-side tracking for event collection, in contrast to the out-of-the-box analytics which are tracked server side.

Both approaches have their strengths and weaknesses, ranging from flexibility to tracking success rate.

Browser side events are very flexible, support custom attributes, and custom events, and work in line with industry best practices for tracking pixel services, and rely on scripts running in the user’s browser. The flexibility comes at a cost where the tracking pixel may not always fire in some scenario leading to small deviations in numbers, when compared to server side tracking. This can be caused by user behaviour (navigating before page fully loads), browser settings, connectivity, and other time sensitive factors.

Server side tracking in contrast will always capture the interactions as it happens server side, ensuring a high level of reliability and consistency. Because it doesn't rely on the user's browser environment, it's unaffected by ad blockers, script delays, or premature navigation. This makes it ideal for capturing key transactional data, such as logins, form submissions, or backend API calls. However, server-side tracking is typically less customisable in terms of capturing rich user context or behavioural metadata (e.g., viewport size, scroll depth, or client-side interactions), which are better handled via browser-based methods.

In summary, browser side tracking is great to understand patterns, intricate interactions and campaign specific information where a small degree of inaccuracy can be tolerated (eg. some events don’t end up tracked). It allows to dive into individual user sessions to understand steps, flow, timings, etc.

Server side tracking is great where flexibility is not a must but absolute accuracy in numbers is needed. Mature analytics strategies often combine both methods, using browser-side and server-side tracking together to build a comprehensive and reliable picture of user engagement.