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
Wrong data segmentation w/ segment w/ multiple action dimension conditions #17388
Comments
Maybe related to #14664 ? |
Hi @heurteph-ei, segments that work on actions (including custom action dimensions), don't select only the actions that match the segment, but visits that have at least one action that matches the segment. Can you check whether the visits in the visitor log in this segment all have the action? If there are visits that don't have an action that matches, then there would be an issue. |
Hi, @heurteph-ei can you provide the exact steps you got to display the segmented visitor log like that? Are you able to reproduce this on https://demo.matomo.cloud ? If not, can you check if the same issue occurs on the latest Matomo version? |
Hi @diosmosis |
Also, I tried several times to be tracked on divezone.net in order to appear on https://demo.matomo.cloud, but it never works. I even tried on my own computer, and on several browsers (Chrome, Edge, Firefox). |
Hi @heurteph-ei, demo.matomo.cloud is a special instance that uses test data to showcase matomo features. It's not directly connected to divezone.net. I can add a segment for the page author today. Would you be able to post the tracking request(s) you'd use here in the meantime? It might help in reproducing locally. |
@diosmosis okay, I have pushed some tracking on matomo.cloud... |
OK, my data are well stored: Anyway, on this sample, I enconter some strange behaviour: PrerequisiteBehaviour > Page Author Step 1Add segment comparison: Step 2Open the Segmented visits log of Page Author |
Apologies for the delay @heurteph-ei, I just added the segment: https://demo.matomo.cloud/index.php?module=CoreHome&action=index&idSite=1&period=day&date=yesterday#?idSite=1&period=day&date=yesterday&segment=dimension2%3D%3DGit-17388&category=Dashboard_Dashboard&subcategory=1 Thanks for providing the extra details! We'll take a look after the weekend. |
No worries :-) Visits logThe Visitors > Visits Log works as expected on the new segment: The log displays the whole session in which the
Page Author behaviourNow I have to wait a few time for the new segment to be processed by the system for Page Author ;-) Enjoy your weekend! |
Thanks @heurteph-ei for going through all the trouble of reproducing it on demo.matomo.cloud! It's certainly a bug. Seems to have to do with segments like |
Dear @diosmosis I invested several hours on this bug to find a solution. First of all I can confirm it is a bug. It was introduced with 48c9f2c which was despite this bug an awesome work by @tsteur 👍 🥇 The LogAggregator is using a temporary table to speed up calculation. Whilst this is super efficient it does not respect action based dimensions. This is what the LogAggregator does:
SuggestionWhile the use of a temporary table is very sufficient for visit based segments it might not be as sufficient for segments containing action based segments. Therefore I would suggest to not use a temporary table when the segment contains an action based dimension. Proposed Code ChangeCurrently matomo/core/DataAccess/LogAggregator.php Lines 347 to 352 in 2b35b46
Suggested Change: private function segmentContainsActionBasedDimensions()
{
if (strpos($this->segment->getString(), 'dimension') < 0) {
// containing no dimension at all
return false;
}
$segmentExpressionSql = $this->segment->getSegmentExpression()->getSql();
// the sql will contain the log_link_visit_action table name if the dimension is action based
return strpos($segmentExpressionSql['where'], 'log_link_visit_action.') >= 0;
}
public function generateQuery($select, $from, $where, $groupBy, $orderBy, $limit = 0, $offset = 0)
{
$segment = $this->segment;
$bind = $this->getGeneralQueryBindParams();
// if segment is based on a custom dimension which is action based do not use TMP table
if (!$this->segment->isEmpty() && $this->isSegmentCacheEnabled() && !$this->segmentContainsActionBasedDimensions()) { If anybody uses this code on her website: make sure to invalidate all reports, since the results get archived/cached. I am willing to provide a PR, but was struggling to create a proper Unit Test. Thank you for your time reading this comment 😄 ❤️ |
@sgotre if I understand it right you are maybe after this feature: #15438 from my perspective it works correct, also for actions just like segmentations should. The behaviour you are maybe after are "Filters": #15438 Existing workarounds for previous behaviour would be to set Let me know if that's not what you are after regarding the Filters feature. |
@tsteur thanks for your super fast reply. You are right, we all have been trying to use segments as filters. Disabling the segment cache has a huge performance impact, right? With about 100 Mio hits per month this might not be the best solution. We will use custom reports instead. For all wondering why @tsteur is right: Segments are by definition visit based. Filters are by definition action based.
|
@sgotre I think this cannot be closed as the segment on 2 action dimensions doesn't work (I am not in the configuration of a filter) |
@heurteph-ei you can set the global config |
@sgotre I don't want to use filter but segment. |
@heurteph-ei You are right, segmentation works as you expected but its not possible to show the segmented visit logs. seems like the query here is using segments as filters. I'll check the sql to see where this error occurs. |
@heurteph-ei this is NOT a SQL issue but an UI issue. When requesting the segmented visit logs the URL is Please notice Query Executed: SELECT log_visit.*
FROM matomo_log_visit AS log_visit
LEFT JOIN matomo_log_link_visit_action AS log_link_visit_action
ON log_link_visit_action.idvisit = log_visit.idvisit
WHERE (log_visit.idsite in (?) AND log_visit.visit_last_action_time >= ? AND log_visit.visit_last_action_time <= ?)
AND
(log_link_visit_action.custom_dimension_3 = ?
AND log_link_visit_action.custom_dimension_3 = ? /** <---- this is not intended*/
AND
((log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 1))) OR
(log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 3))) OR
(log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 2))) OR
(log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 10)))))
GROUP BY log_visit.idvisit
ORDER BY log_visit.idsite DESC, log_visit.visit_last_action_time DESC
LIMIT 0, 12 This would be correct if segment where filters. Correct URLInstead the URL should contain this segment => resulting query: "give me all visits that had action.dimension2=Git-17388 AND (dimension2=Git 17388 OR dimension2==D2) Query Executed: SELECT log_visit.*
FROM matomo_log_visit AS log_visit
LEFT JOIN matomo_log_link_visit_action AS log_link_visit_action
ON log_link_visit_action.idvisit = log_visit.idvisit
WHERE (log_visit.idsite in (?) AND log_visit.visit_last_action_time >= ? AND log_visit.visit_last_action_time <= ?)
AND (log_link_visit_action.custom_dimension_3 = ? AND
(log_link_visit_action.custom_dimension_3 = ? OR log_link_visit_action.custom_dimension_3 = ?) /** <-- thats it */
AND
((log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 1))) OR
(log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 3))) OR
(log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 2))) OR
(log_link_visit_action.idaction_url IN
(SELECT idaction FROM matomo_log_action WHERE (name LIKE CONCAT('%', ?) AND type = 10)))))
GROUP BY log_visit.idvisit
ORDER BY log_visit.idsite DESC, log_visit.visit_last_action_time DESC
LIMIT 0, 12; When the global option |
Expected Behavior
When I use a segmentation on a value for an action dimension, I should have only results on this value on the action dimension.
Current Behavior
Segmentation configuration
In the example below, banque is an action dimension (Note: Est means is).
Segmentation result
Segmented log
This is confirmed when I click on the segmented log icon: No result as expectd when segmented on banque equals E and M
Note: The segmented log on banque equals E work perfectly
Steps to Reproduce (for Bugs)
Custom dimensions configuration
Matomo Tag Manager with the configuration
Context
Your Environment
Browser
Browser: Firefox 78.8.0esr (64 bits) fr-fr but also Chrome Version 89.0.4389.72 (Build officiel) (64 bits)
Operating System: Windows 8.1 Entreprise
Mandatory checks
Version PHP >= 7.2.5: ✔ 7.3.20
PDO Extension: ✔
PDO\MYSQL Extension: ✔
MYSQLI Extension: ✔
Extensions requises: ✔ zlib ✔ SPL ✔ iconv ✔ json ✔ mbstring ✔ Reflection
Fonctions requises: ✔ debug_backtrace ✔ eval ✔ hash ✔ gzcompress ✔ gzuncompress ✔ pack
Configuration PHP requise (php.ini): ✔ session.auto_start = 0 ✔ max_execution_time = 0 OR >= 30
Répertoires avec les droits d'accès en écriture: ✔ $DOC_ROOT/tmp ✔ $DOC_ROOT/tmp/assets ✔ $DOC_ROOT/tmp/cache ✔ $DOC_ROOT/tmp/climulti ✔ $DOC_ROOT/tmp/latest ✔ $DOC_ROOT/tmp/logs ✔ $DOC_ROOT/tmp/sessions ✔ $DOC_ROOT/tmp/tcpdf ✔ $DOC_ROOT/tmp/templates_c
Répertoires avec accès en écriture pour Gestionnaire de balises: ✔ $DOC_ROOT/js
Optional checks
Intégrité du fichier: ✔
Statut du traqueur: ✔
Limite mémoire: ✔ 128M
Fuseau horaire: ✔
Ouvrez l'URL: ✔ curl
PageSpeed désactivé: ✔
GD > 2.x + Freetype (graphiques): ✔
Autres extensions: ✔ json ✔ libxml ✔ dom ✔ SimpleXML
Autres fonctions: ✔ shell_exec ✔ set_time_limit ✔ mail ✔ parse_ini_file ✔ glob ✔ gzopen ✔ md5_file
Système de fichiers: ✔
Setup Cron (faster report loading): ⚠ Warning: Pour des performances optimales et un Matomo rapide, il est vivement recommandé de mettre en place une entré CRON pour archiver automatiquement vos rapports, et de désactiver le déclanchement depuis l'interface depuis les paramètres Matomo.
Setup Cron - Gestion des processus via la ligne de commande: ✔ Ok
Capacités de la base de données: ✔ UTF8mb4 charset ⚠ Warning: LOAD DATA INFILE
L'utilisation de LOAD DATA INFILE va grandement accélérer la vitesse du processus d'archivage de Matomo. Pour le rendre disponible à Matomo, essayez de mettre à jour PHP & MySQL et assurez-vous que votre utilisateur MySQL a les privilèges de FILE.
Si votre serveur Matomo suit des sites à fort trafic (ex. > 100000 pages par mois), nous recommandons d'essayer de corriger ce problème.
Erreur: LOAD DATA INFILE failed... Error was:
Try 1: LOAD DATA INFILE : SQLSTATE[28000]: Invalid authorization specification: 1045 Access denied for user (using password: YES)[28000],
Try 2: LOAD DATA LOCAL INFILE : SQLSTATE[42000]: Syntax error or access violation: 1148 The used command is not allowed with this MySQL version[42000]
✔ CREATE TEMPORARY TABLES ✔ Changing transaction isolation level
Taille maximale des paquets: ⚠ Warning: Il est important de configurer une taille 'max_allowed_packet' dans votre base de données MySQL d'au moins 64MB. 32MB configuré en ce moment.
Connexion SSL forcée: ⚠ Warning: Nous recommandons d'utiliser Matomo uniquement avec des connexions sécurisées SSL. Pour empêcher l'accès non sécurisée par HTTP, ajoutez
force_ssl = 1
à la sectionGeneral
dans votre fichier conf/config.ini.php de Matomo.Géolocalisation: ⚠ Warning: La géolocalisation fonctionne, mais vous n'utilisez pas un des fournisseurs recommandés. Si vous devez importer des fichiers de journaux ou bien effectuer quoi que ce soit d'autre qui requiert la définition des adresses IP, utilisez l'implémentation PHP GeoIP l'extension maxminddb.
Mettre à jour via HTTPS: ✔
Traceur JavaScript inscriptible ("/matomo.js"): ✔
Heatmap & Session Recording Tracking: ⚠ Warning: Requesting '$MATOMO_URLplugins/HeatmapSessionRecording/configs.php?idsite=1&trackerid=5lX6EM&url=http%3A%2F%2Ftest.test%2F' resulted in an SSL error. Maybe you are using a self signed certificate? Please open the URL manually in a browser to see if the response contains 'Piwik.HeatmapSessionRecording'. If not, you might need to modify your server configuration as this file needs to be accessible via a browser from the Internet or Intranet.
Informational results
Matomo Version: 4.0.5
Matomo Update History: 4.0.5,
Matomo Install Version: 4.0.5
PHP_OS: Linux
PHP SAPI: apache2handler
Timezone Version: 0.system
PHP Timezone: UTC
PHP Time: 1614954151
PHP Datetime: 2021-03-05 14:22:31
PHP INI max_execution_time: 30
PHP INI post_max_size: 8M
PHP INI max_input_vars: 1000
PHP INI zlib.output_compression:
Curl Version: 7.29.0, NSS/3.44
Suhosin Installed: 0
DB Prefix: matomo_
DB Charset: utf8mb4
DB Adapter: PDO\MYSQL
MySQL Version: 5.7.33-enterprise-commercial-advanced-log
Num Tables: 69
Browser Segment Archiving Enabled: 1
Development Mode Enabled: 0
Internet Enabled: 1
Multi Server Environment: 0
Custom User Path: 0
Custom Include Path: 0
Plugins Activated: API, AbTesting 4.0.6, Actions, ActivityLog 4.0.2, Annotations, BulkTracking, Cohorts 4.0.2, Contents, CoreAdminHome, CoreConsole, CoreHome, CorePluginsAdmin, CoreUpdater, CoreVisualizations, CustomDimensions, CustomJsTracker, CustomReports 4.0.4, Dashboard, DevicePlugins, DevicesDetection, Diagnostics, Events, Feedback, FormAnalytics 4.0.2, Funnels 4.0.3, GeoIp2, Goals, Heartbeat, HeatmapSessionRecording 4.0.6, ImageGraph, Insights, Installation, Intl, IntranetMeasurable, LanguagesManager, Live, LoginLdap 4.3.0, MobileMessaging, Monolog, Morpheus, MultiSites, Overlay, PagePerformance, PrivacyManager, ProfessionalServices, Proxy, Referrers, Resolution, RollUpReporting 4.0.1, RssWidget, SEO, ScheduledReports, SearchEngineKeywordsPerformance 4.1.1, SegmentEditor, SitesManager, TagManager, Tour, Transitions, TwoFactorAuth, UserCountry, UserCountryMap, UserId, UserLanguage, UsersFlow 4.0.2, UsersManager, VisitFrequency, VisitTime, VisitorInterest, VisitsSummary, WebsiteMeasurable, Widgetize
Plugins Deactivated: CustomVariables, DBStats, Ecommerce, Login, LoginSaml 4.0.3, Marketplace (yes we had to deactivate it!), MediaAnalytics 4.0.2, MobileAppMeasurable, MultiChannelConversionAttribution 4.0.2, Provider, WhiteLabel 4.0.1, WooCommerceAnalytics 4.0.3
Plugins Invalid:
Server Info: Apache
Had visits in last 1 day: 1
Had visits in last 3 days: 1
Had visits in last 5 days: 1
Archive Time Last Started: 0
Archive Time Last Finished: 0
Num invalidations: 80 queued, 0 in progress
User Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Browser Language: fr,fr-fr,en-us,en
Anonymize Referrer:
Do Not Track enabled: 0
The text was updated successfully, but these errors were encountered: