Calculation Rules for Analytics Charts
This document provides detailed calculation rules for various analytics charts.
The CSV or OData data exported by the Wedia APIs should be used to build these charts.
For each chart, you will find a list of filters to apply to the input data. The value of each filter is provided here in its raw form (without internationalization).
Depending on the API used (OData or ODataTools), the output format is different. Therefore, it is highly recommended to verify the output data and, if necessary, apply the internationalization of the filter value (which is specific to each DAM and language).
It should also be noted that the OData API only exports data related to actions on DAM objects (and thus no information about connections, search, etc.). Therefore, it is recommended to use the ODataTools API.
General Explanations
Within our application, we use ElasticSearch, so to track these charts, we use specific queries that are unique to it. Therefore, the definition of each chart consists of a composition of N queries.
In the table below, you will find all the queries used in building the charts:
Nom | Définition |
mustEquals(field,value) | The value in the field must be strictly equal to the value. Value is a unique value. |
mustNotEquals(field,value) | The value in the field must not be equal to the value. Value is a unique value. |
mustObjectnameHaveTag(field,values) | Filters a field representing an object name (e.g., objectname) to only include objects with at least one of the specified tags. The main use of this query is mustObjectnameHaveTag("objectname", "damobject"). This query is equivalent to mustIn("objectname", "List of object names of type damobject"). |
mustIn(field,values) | The value in the field must be at least one of the exact values in the values array. Values is an array. |
mustNotIn(field,values) | The value in the field must not be any of the values in the values array. Values is an array. |
mustNotPrefix(field,value) | The value in the field must not start with the specified value. Value is a unique value. |
In some cases, a single query is applied to an entire tab, but sometimes there is one query per chart. You will find the detailed list further in this document.
Once the query is applied, we perform an aggregation on a field or calculate a sum to obtain the displayed values.
It should be noted that some charts are plotted using batch data within the application, so these data are not exported, and it will be impossible to recreate the corresponding charts.
Each title corresponds to an entry in the menu located on the left side of the analytics module. Each subtitle corresponds to a tab located at the top of an entry in the menu. Each number within a subtitle corresponds to a chart.
Users and Assets
All charts in this section are the result of batch processing. Therefore, they cannot be reproduced as mentioned in the introduction.
Livestream
These charts are not meant to be reproduced. They combine the 50 latest download and search actions, which are not meaningful when using an export with a minimum granularity of a day.
Internal Asset Usage
Usage
To build eligible charts, in the case of using CSV export, the endpoint format is: /api/wedia/analytics/odataools/dam/csv*.
Creation
action_id | mustEquals | insert |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
Number -> Sum of the number of rows after filtering
Evolution -> Distribution of the sum over the period of your choice
Distribution of asset creations by asset -> Group by asset_objectname
Distribution of creations by user -> Group by surfer_uid
List of created assets -> Group by asset_name
Update
action_id | mustEquals | update |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
Number -> Sum of the number of rows after filtering
Evolution -> Distribution of the sum over the period of your choice
Distribution of asset updates by asset -> Group by asset_objectname
Distribution of updates by user -> Group by surfer_uid
List of updated assets -> Group by asset_name
Deletion
action_id | mustEquals | delete |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
Number -> Sum of the number of rows after filtering
Evolution -> Distribution of the sum over the period of your choice
Distribution of deletions by user -> Group by surfer_uid
Workflow actions
action_id | mustPrefix | wkf_ |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
Number -> Sum of the number of rows after filtering
Evolution -> Distribution of the sum over the period of your choice
Distribution of actions by asset -> Group by asset_objectname
Distribution of actions by user -> Group by surfer_uid
List of updated assets -> Group by asset_name
Rankings
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
Most viewed media:
action_id | mustEquals | view |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
Aggregation is then performed on the asset_name or asset_uid field.
Most downloaded media:
action_id | mustEquals | download |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
Aggregation is then performed on the asset_name or asset_uid field.
Videos
action_id | mustEquals | playfinish |
session_type | mustNotEquals | admin |
asset_objectname | mustObjectHaveTagName | damobject |
asset_type | mustEquals | video |
Average completion percentage of a video is calculated as follows:
the player sends "playFinish" events every X% (default is 5, but configurable via an existing option of the player called "wediaStatsPlayFinishStep"),
we calculate the average of the "playFinish_percentage" events.
For the calculation, we determine the completion rate throughout the playback using the formula 100.0 * self.position() / duration.
It's important to note that if the user seeks back during playback, the sent completion rate will be the highest value calculated previously.
Average percentage of video completion: Calculate the average of "playfinish_percentage" over the period.
List of viewed videos: Group by asset_name or asset_uid.
List of fully viewed videos: Add a condition "playfinish_percentage".mustEquals(100) and group by asset_name or asset_uid.
Distribution of views by reference: The complete referer is not exported, only the domain (see next point).
Distribution of views by domain: Group by referer.
Portal
Connections
The data used to build these charts is not exported.
Views
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
session_type | mustEquals | portal |
asset_objectname | mustObjectHaveTag | damobject |
action_id | mustEquals | view |
Number of viewed assets: Sum of the number of rows.
Distribution of asset views by country: Group by country.
Distribution of asset views by role: Group by user_role_id.
Distribution of asset views by asset: Group by asset_objectname.
List of top asset viewers: Group by surfer_uid.
In addition to these charts, a chart is displayed for each property that has the tag "analytics_extra" (see Wedia Analytics documentation for the functioning of this tag). No additional queries are applied to these charts. There is also a chart for the property "analytics_surfer_extra" (see Wedia documentation).
Downloads
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
session_type | mustEquals | bo |
asset_objectname | mustObjectHaveTag | damobject |
action_id | mustEquals | download |
Number of downloaded assets: Sum of the number of rows.
Distribution of downloads by country: Group by country.
Distribution of downloads by role: Group by user_role_id.
Distribution of downloads by asset: Group by asset_objectname.
Ranking of users by number of downloads: Group by surfer_id.
In addition to these charts, a chart is displayed for each property that has the tag "analytics_extra" (see Wedia Analytics documentation for the functioning of this tag). No additional queries are applied to these charts. There is also a chart for the property "analytics_surfer_extra" (see Wedia documentation).
Search
The data used to build these charts is not exported.
Tables
The data used to build these charts is not exported.
Others
The data used to build these charts is not exported.
Back-Office
Connections
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/connexion/csv*
session_type | mustEquals | bo |
Number of logged-in users: Sum of unique values of surfer_uid.
Number of connections: Sum of the number of rows.
Evolution of the number of connections: Sum of the number of rows and distribution per chosen period.
Distribution of connections by location: Group by country.
Distribution of connections by user role: Group by user_role_id.
Views
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
session_type | mustEquals | bo |
asset_objectname | mustObjectHaveTag | damobject |
action_id | mustEquals | view |
Number of viewed media: Sum of the number of rows.
Distribution of media views by country: Group by country.
Distribution of media views by role: Group by user_urole_id.
Distribution of media views by asset: Group by asset_objectname.
List of top media viewers: Group by surfer_uid.
Downloads
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
session_type | mustEquals | bo |
asset_objectname | mustObjectHaveTag | damobject |
action_id | mustEquals | download |
Number of downloads: Sum of the number of rows.
Distribution of downloads by country: Group by country.
Distribution of downloads by role: Group by user_role_id.
Distribution of downloads by asset: Group by asset_objectname.
Ranking of users by number of downloads: Group by surfer_uid.
Search
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/fulltext/csv*
session_type | mustEquals | bo |
asset_objectname | mustObjectHaveTag | damobject |
action_id | mustEquals | search |
Number of searches: Sum of the number of rows.
Distribution of searches by success: Group by actionid.
Distribution of full-text searches by language: Group by fulltextLocales.
Distribution of searches by user: Group by surfer_uid.
Most searched terms in full-text: Group by fulltext.
Filters
The information to build these charts is not exported in the CSV stream.
Media Delivery
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
Volume
session_type | mustIn | “cdnakamai”,“cdnamazon” |
asset_objectname | mustObjectHaveTag | damobject |
referer | mustNotEquals | “your server name” |
Number of hits: Sum of the number of rows.
Evolution of the number of hits: Sum and distribution per chosen period.
Distribution of hits by country: Group by country.
Distribution of hits by pages: Not exported in the CSV, only reference domains.
Distribution of hits by referring domain: Group by referer.
Distribution of hits by media: Group by asset_name or asset_uid.
Tables
The information is calculated by internal processes and is therefore not exported via the ODataTools API.
Web-to-Print
To build eligible charts, in the case of using CSV export, the endpoint is in the following format: /api/wedia/analytics/odataools/dam/csv*
Documents
session_type | mustNotEquals | admin |
asset_objectname | mustEquals | monodoc |
Number of created documents: Add a condition "actionid".mustEquals("insert") and sum the number of rows.
Number of users who created a document: Add a condition "actionid".mustEquals("insert") and sum the number of unique values in the surferuid field.
Number of check-ins: Add a condition "actionid".mustEquals("w2p_cico_checkint") and sum the number of rows.
Number of checkouts: Add a condition "actionid".mustEquals("w2p_cico_checkout") and sum the number of rows.
Evolution of the number of created documents: Add a condition "actionid".mustEquals("insert") and distribute by period.
Evolution of the number of compositions: Add a condition "actionid".mustEquals("w2p_user_sendwxml") and distribute by period.
Users with the most check-ins and checkouts: Add a condition "actionid".mustIn("w2p_cico_checkin", "w2p_cico_checkout") and group by the surfer_uid field.
Documents with the most check-ins and checkouts: Add a condition "actionid".mustIn("w2p_cico_checkin", "w2p_cico_checkout") and group by asset_uid or asset_name.
Users who created the most documents: Add a condition "actionid".mustEquals("insert") and group by surfer_uid.
Documents with the most compositions during the period: Add a condition "actionid".mustEquals("w2p_user_sendwxml") and group by asset_uid or asset_name.
Templates
session_type | mustNotEquals | admin |
asset_objectname | mustIn | monodocmodel, zsnippet |
Number of created templates: Add a condition "actionid".mustEquals("insert") and sum the number of rows.
Number of users who created a template: Add a condition "actionid".mustEquals("insert") and sum the number of unique values in the surferuid field.
Number of check-ins: Add a condition "actionid".mustEquals("w2p_cico_checkint") and sum the number of rows.
Number of checkouts: Add a condition "actionid".mustEquals("w2p_cico_checkout") and sum the number of rows.
Users with the most check-ins and checkouts: Add a condition "actionid".mustIn("w2p_cico_checkin", "w2p_cico_checkout") and group by the surfer_uid field.
Templates with the most check-ins and checkouts: Add a condition "actionid".mustIn("w2p_cico_checkin", "w2p_cico_checkout") and group by asset_uid or asset_name.
Users who created the most templates: Add a condition "actionid".mustEquals("insert") and group by surfer_uid.
Most used snippets in a document: Add a condition "objectname".mustEquals("zsnippet") and group by asset_uid or asset_name.
Most used templates to create a project: Add a condition "actionid".mustEquals("used_media_created") and group by asset_uid or asset_name.