-
Notifications
You must be signed in to change notification settings - Fork 286
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Refactor the Audience Tiles to use new pivot report infrastructure #8726
Comments
Hey @benbowler, thanks for drafting this IB. A few points:
|
Thanks for the update @benbowler. It looks like these two points have been missed, though, please can you take a look?
|
Thanks Ben! This IB LGTM. ✅ |
Thanks @ankitrox - in cases like this, we don't tend to wait for the dependency to go through QA, simply having it merged is enough to move this to CR. Please remember to merge |
Thanks @techanvil . I will move this to CR as soon as #8484 gets merged. I will also take care to update base branch and merge it to feature one. Thank you. |
@kelvinballoo as per our chat on Slack. I have assigned this to you. Once you have completed your testing please unassign yourself and we'll get an engineer to look over it for the |
Hey @kelvinballoo, what I'd suggest for the smoke test is to refer back to this comment I left on #8763 where I point out that we can see the same metrics elsewhere on the dashboard.
You can cross reference the metrics like this to check if anything has changed. If the wider dashboard matches the All Visitors audience tile but you find discrepancies between the figures and what you see on Analytics, this can be raised as a separate issue for investigation. |
QA Update ✅Thanks @techanvil , that really helps. I've verified this way and I can confirm that the tiles data is matching the data on the other part of the SK dashboard. |
QA:Eng ❌While performing QA:Eng for this issue, I've had a horrible realisation that pivot reports aren't actually suitable for the audience tiles in the way we thought they were. This has come to light while examining the report output for audiences which have visitors from different cities. As can be seen in the current audience data for While "Returning visitors" has visitors from Dublin, "(not set)", and Cork: However when both of these audiences are visible, we only see Dublin, "(not set)", and Cork for both audiences, with no sign of London: This was admittedly made harder to spot by the fact we have the open "2nd tile has no data" bug, #8921 which adds a bit of ambiguity. However the drilling into the actual reports as returned by the API indicates this is indeed the case and the reports are simply not returning the data in the way that we would like. Essentially, each pivot in the report effectively results in a sub-query to retrieve all the values for that query similar to a regular report where the It's only when we remove "Returning visitors" from the query - meaning our report is filtering results for just the "Mauritius users" audience - that London is returned, because the other cities are being excluded - they are only associated with the other audience which is no longer included in the filter. To help to understand this further here are some illustrative reports and their responses to compare: Report request with a filter for the "Mauritius users" audience{
"dateRanges": [
{
"endDate": "2024-07-04",
"startDate": "2024-06-07"
}
],
"dimensionFilter": {
"andGroup": {
"expressions": [
{
"filter": {
"fieldName": "hostName",
"inListFilter": {
"values": ["oi.ie", "www.oi.ie"]
}
}
},
{
"filter": {
"fieldName": "audienceResourceName",
"inListFilter": {
"values": ["properties/285794360/audiences/8278021604"]
}
}
}
]
}
},
"dimensions": [
{
"name": "city"
},
{
"name": "audienceResourceName"
},
{
"name": "hostName"
}
],
"keepEmptyRows": true,
"metrics": [
{
"name": "totalUsers"
}
],
"pivots": [
{
"fieldNames": ["city"],
"limit": "3",
"orderBys": [
{
"desc": "true",
"metric": {
"metricName": "totalUsers"
}
}
]
},
{
"fieldNames": ["audienceResourceName"],
"limit": "2"
}
],
"property": "properties/285794360"
} Response for report filtered by the "Mauritius users" audience{
"pivotHeaders": [
{
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "London"
}
]
}
],
"rowCount": 1
},
{
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "properties/285794360/audiences/8278021604"
}
]
}
],
"rowCount": 1
}
],
"dimensionHeaders": [
{
"name": "city"
},
{
"name": "audienceResourceName"
}
],
"metricHeaders": [
{
"name": "totalUsers",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "London"
},
{
"value": "properties/285794360/audiences/8278021604"
}
],
"metricValues": [
{
"value": "1"
}
]
}
],
"metadata": {
"currencyCode": "USD",
"timeZone": "America/Los_Angeles"
},
"kind": "analyticsData#runPivotReport"
} Report request with a filter for the "Returning visitors" audience{
"dateRanges": [
{
"endDate": "2024-07-04",
"startDate": "2024-06-07"
}
],
"dimensionFilter": {
"andGroup": {
"expressions": [
{
"filter": {
"fieldName": "hostName",
"inListFilter": {
"values": ["oi.ie", "www.oi.ie"]
}
}
},
{
"filter": {
"fieldName": "audienceResourceName",
"inListFilter": {
"values": ["properties/285794360/audiences/8281378703"]
}
}
}
]
}
},
"dimensions": [
{
"name": "city"
},
{
"name": "audienceResourceName"
},
{
"name": "hostName"
}
],
"keepEmptyRows": true,
"metrics": [
{
"name": "totalUsers"
}
],
"pivots": [
{
"fieldNames": ["city"],
"limit": "3",
"orderBys": [
{
"desc": "true",
"metric": {
"metricName": "totalUsers"
}
}
]
},
{
"fieldNames": ["audienceResourceName"],
"limit": "2"
}
],
"property": "properties/285794360"
} Response for report filtered by the "Returning visitors" audience{
"pivotHeaders": [
{
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "Dublin"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
}
]
}
],
"rowCount": 151
},
{
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "properties/285794360/audiences/8281378703"
}
]
}
],
"rowCount": 1
}
],
"dimensionHeaders": [
{
"name": "city"
},
{
"name": "audienceResourceName"
}
],
"metricHeaders": [
{
"name": "totalUsers",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "Dublin"
},
{
"value": "properties/285794360/audiences/8281378703"
}
],
"metricValues": [
{
"value": "139"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
},
{
"value": "properties/285794360/audiences/8281378703"
}
],
"metricValues": [
{
"value": "59"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
},
{
"value": "properties/285794360/audiences/8281378703"
}
],
"metricValues": [
{
"value": "32"
}
]
}
],
"metadata": {
"currencyCode": "USD",
"timeZone": "America/Los_Angeles"
},
"kind": "analyticsData#runPivotReport"
} Report request with a filter for both audiences{
"dateRanges": [
{
"endDate": "2024-07-04",
"startDate": "2024-06-07"
}
],
"dimensionFilter": {
"andGroup": {
"expressions": [
{
"filter": {
"fieldName": "hostName",
"inListFilter": {
"values": ["oi.ie", "www.oi.ie"]
}
}
},
{
"filter": {
"fieldName": "audienceResourceName",
"inListFilter": {
"values": [
"properties/285794360/audiences/8278021604",
"properties/285794360/audiences/8281378703"
]
}
}
}
]
}
},
"dimensions": [
{
"name": "city"
},
{
"name": "audienceResourceName"
},
{
"name": "hostName"
}
],
"keepEmptyRows": true,
"metrics": [
{
"name": "totalUsers"
}
],
"pivots": [
{
"fieldNames": ["city"],
"limit": "3",
"orderBys": [
{
"desc": "true",
"metric": {
"metricName": "totalUsers"
}
}
]
},
{
"fieldNames": ["audienceResourceName"],
"limit": "2"
}
],
"property": "properties/285794360"
} Response for report filtered by both audiences{
"pivotHeaders": [
{
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "Dublin"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
}
]
}
],
"rowCount": 151
},
{
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "properties/285794360/audiences/8281378703"
}
]
},
{
"dimensionValues": [
{
"value": "properties/285794360/audiences/8278021604"
}
]
}
],
"rowCount": 2
}
],
"dimensionHeaders": [
{
"name": "city"
},
{
"name": "audienceResourceName"
}
],
"metricHeaders": [
{
"name": "totalUsers",
"type": "TYPE_INTEGER"
}
],
"rows": [
{
"dimensionValues": [
{
"value": "Dublin"
},
{
"value": "properties/285794360/audiences/8281378703"
}
],
"metricValues": [
{
"value": "139"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
},
{
"value": "properties/285794360/audiences/8281378703"
}
],
"metricValues": [
{
"value": "59"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
},
{
"value": "properties/285794360/audiences/8281378703"
}
],
"metricValues": [
{
"value": "32"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
},
{
"value": "properties/285794360/audiences/8278021604"
}
],
"metricValues": [
{
"value": "0"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
},
{
"value": "properties/285794360/audiences/8278021604"
}
],
"metricValues": [
{
"value": "0"
}
]
},
{
"dimensionValues": [
{
"value": "Dublin"
},
{
"value": "properties/285794360/audiences/8278021604"
}
],
"metricValues": [
{
"value": "0"
}
]
}
],
"metadata": {
"currencyCode": "USD",
"timeZone": "America/Los_Angeles"
},
"kind": "analyticsData#runPivotReport"
} As can be seen, when just "Mauritius users" is included in the filter, the cities pivot values are as follows: {
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "London"
}
]
}
],
"rowCount": 1
}, When just "Returning visitors" is included in the filter, the values are as follows: {
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "Dublin"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
}
]
}
],
"rowCount": 151
}, When both audiences are included in the filter, the values are again as follows, because they are the top 3 cities that are associated with either of the audiences. {
"pivotDimensionHeaders": [
{
"dimensionValues": [
{
"value": "Dublin"
}
]
},
{
"dimensionValues": [
{
"value": "(not set)"
}
]
},
{
"dimensionValues": [
{
"value": "Cork"
}
]
}
],
"rowCount": 151
}, Note that event if we completely remove The "cities" case has been illustrated but the general principle applies to the "top content" metric as well. From what I've seen so far it doesn't seem possible to use a pivot report in the way we'd like to, returning a different selection of pivot values for each audience. It could the case that I've missed something and there is some way to achieve this, and we can investigate this further at a later date, but for now we need to revert the changes in this issue. |
Note that due to the above, this issue will be closed as "not planned" and not included in the forthcoming release. |
The PR #8969 that reverts all changes made by this issue has been merged. As discussed above, I'm closing this issue as not planned. |
Feature Description
As discussed on Slack, while we are initially implementing the Audience Tiles to use separate, per-audience reports to retrieve the cities and "top content" metrics (one report per audience per metric), we can reduce the number of reports needed by using pivot reports. This will allow us to retrieve metric data for all of the audiences in a single report (i.e., one report per metric).
We should add support for running pivot reports, and refactor the Audience Tiles to use them.
This is not critical to the release and can be done post-launch, hence the P2 priority.
Please also note this comment relating to the
AudienceTile
andAudienceTiles
refactoring: #8484 (comment)This ticket has been split from #8484, and only concerns updating the Audience Tiles to use the new pivot report infrastructure, which will be completed in that ticket.
Do not alter or remove anything below. The following sections will be managed by moderators only.
Acceptance criteria
AudienceTiles
component (introduced via Add the Audience Tiles widget (Storybook) #8136) should be refactored to use pivot reports for the "top cities" and "top content" metrics, thus reducing the corresponding request count by a factor of the number of selected audiences.AudienceTiles
andAudienceTile
components should be further refactored so the reports that are retrieved inAudienceTiles
are passed directly toAudienceTile
, and the corresponding data parsing/extraction logic is moved fromAudienceTiles
toAudienceTile
. Hopefully this logic can be simplified in the process.AudienceTile
stories to replace the hardwired mock data with generated mock report data.Implementation Brief
Audience Segmentation Report Updates
Update the
assets/js/modules/analytics-4/components/audience-segmentation/dashboard/AudienceTilesWidget.js
component:topCitiesReportOptions
to the following report structure:topCitiesReport
to use the newgetPivotReport
selector instead ofgetReportForAllAudiences
, passingtopCitiesReportOptions
as the only prop.topContentReportOptions
to the following report structure:topContentReport
to use the newgetPivotReport
selector instead ofgetReportForAllAudiences
, passingtopContentReportOptions
as the only prop.topContentPageTitlesReportOptions
to the following report structure:topContentPageTitlesReport
to use the newgetPivotReport
selector instead ofgetReportForAllAudiences
, passingtopContentPageTitlesReportOptions
as the only prop.Remove the
getReportForAllAudiences
selector and all related code/tests.Update
assets/js/modules/analytics-4/components/audience-segmentation/dashboard/AudienceTiles.js
:.rows
, based on thedimensionValues[0].value === audienceResourceName
, (audienceResourceName
is from the parent map). This will return two rows per metric, one for each date range.topContentPageTitlesReport
, filter the rows as in the previous bullet point, passing through all 15 top page titles and paths as theAudienceTilePagesMetric.js
component will continue to do the selection of titles based ontopContent
andtopContentTitles
props.percentageOfTotalPageviews
, by dividing thescreenPageViews
metric from the current date range, with theRESERVED_TOTAL
of thescreenPageViews
metric over the same date range.AudienceTile
component props.AudienceTile Updates
AudienceTile
to use the new prop structure defined above.AudienceTile
stories to use this new pivot report data-mock functionality defined in Add support for GA4 pivot reports #8484Test Coverage
QA Brief
A round of smoke test to ensure that this feature has not changed anything in the Audience tiles widget. Also that data should be intact within those tiles.
Ensure that top cities are displaying in the widget. Verify the data from Google Analytics dashboard that it is displaying correctly.
Ensure that "Top content by pageviews" are displaying in the widget. Verify the data from Google Analytics dashboard that it is displaying correctly.
QA:Eng
In the browser dev tools check that pivot reports are loading and getting the response.
Changelog entry
The text was updated successfully, but these errors were encountered: