Catégoriser les user_activity : parcours LX / LG / LB, bibliothèque et kiosque
Comment savoir, pour une user_activity, si elle a été réalisée dans le cadre d'un
parcours (LX, LG ou LB) ou bien depuis la bibliothèque / le kiosque (articles) ?
Il n'existe pas un critère unique : la règle dépend de l'app qui a créé l'UA, car les deux back-learner n'utilisent pas le même mécanisme de parcours.
| Repo / Produit | container.product_code |
Mécanisme « parcours » | Signature du parcours en DB |
|---|---|---|---|
learner-exam |
EXAM (LX) |
un planning (user_planning) |
user_planning_id IS NOT NULL |
learner-general |
GENERAL (LG) / BUSINESS_ENGLISH (LB) |
une suite de mode_items | mode_item_id IS NOT NULL |
Le piège LX
En LX, un entraînement lancé depuis la bibliothèque est une activité STANDARD avec
container_id et mode_item_id remplis — structurellement identique à une étape de
parcours. Seul user_planning_id les distingue. C'est pourquoi mode_item_id ne peut
servir de critère que pour LG / LB, et user_planning_id uniquement pour LX.
À noter : mode_id est rempli dans tous les cas (parcours comme bibliothèque) — ce
n'est jamais un discriminant.
La requête
{{date_min}} est un filtre de date optionnel au format Metabase : laissé vide, la ligne
entière est ignorée ; renseigné, seules les UA démarrées à partir de cette date sont comptées.
Les filtres deleted_at IS NULL excluent les lignes soft-deleted. Sur container et activity
ils sont placés dans le ON (et non le WHERE) pour préserver le LEFT JOIN et ne jamais
faire disparaître une UA dont le container/activity a été supprimé.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
Variantes
- Fusionner LG et LB : remplacer les deux branches par
WHEN c.product_code IN ('GENERAL','BUSINESS_ENGLISH') AND ua.mode_item_id IS NOT NULL THEN 'parcours_LG_LB'. - Garder le kiosque dans la bibliothèque : supprimer la branche
kiosque(les articles ontcontainer_id IS NULLetactivity_type_code = 'ARTICLE'). - Inclure les UA supprimées : retirer les trois conditions
deleted_at IS NULL(≈ 28,4 M d'UA sont soft-deleted, soit ~39 % du total). - Autre champ de date : remplacer
ua.started_atparua.ended_atouua.created_at.
Résultats (snapshot prod, UA non supprimées, sans filtre de date — 2026-06-03)
| Catégorie | Nombre d'UA |
|---|---|
| bibliotheque | 20 261 689 |
| parcours_LX | 12 811 195 |
| parcours_LG | 7 953 371 |
| parcours_LB | 3 888 467 |
| kiosque | 187 568 |
| TOTAL | 45 102 290 |
Composition de la bibliothèque par activity_type_code : STANDARD ≈ 8,3 M (entraînements
LX hors planning), PRACTICE_SKILL_STUDY_SHEET ≈ 5,3 M (fiches de révision),
PRACTICE ≈ 4,2 M (exercices), CERTIFICATION + ADAPTIVE + ADAPTIVE_V2 ≈ 1,7 M
(examens blancs LX), EVAL ≈ 0,8 M (tests de positionnement).
Keywords
select user_activity parcours bibliothèque kiosque planning mode_item product_code LX LG LB metabase