· Par Équipe HeyData
Série : Fonctions et mots-clés méconnus de Qlik Sense : une série · article 8 sur 13
Le préfixe Semantic dans Qlik Sense : naviguer de parent en enfant d’un clic
Dans un organigramme, on veut parfois avancer pas à pas : partir du service commercial, voir ses équipes, puis les agences de l’une d’elles. Hierarchy donne des niveaux et HierarchyBelongsTo des sous-arbres entiers, mais aucun des deux ne permet de « descendre d’un cran » depuis la sélection courante. C’est le rôle du préfixe Semantic, l’un des mots-clés les moins connus du script.
Cet article fait partie de notre série sur les fonctions et mots-clés méconnus de Qlik Sense. Il s’appuie sur l’aide Qlik, qui est à notre connaissance la seule documentation détaillée du préfixe ; les liens sont en fin d’article.
Le principe : une table de relations
Semantic se place devant un LOAD de trois ou quatre champs, dans un ordre fixe :
- un objet ;
- le nom de la relation, lue du premier objet vers le second ;
- l’objet lié ;
- facultatif : le nom de la relation dans l’autre sens.
Le préfixe crée un champ particulier, ici Relation, dont les valeurs sont les noms de relation. Sélectionner une de ces valeurs fait passer des objets sélectionnés aux objets liés.
Une ligne d’organigramme, lue dans les deux sens.
Org:
LOAD ID, Name, If(Len(ParentID), ParentID) as ParentID
INLINE [
ID, Name, ParentID
1, Direction,
2, Commercial, 1
3, Opérations, 1
4, France, 2
5, Allemagne, 2
6, Logistique, 3
7, Lyon, 4
8, Paris, 4
];
Relations:
Semantic
LOAD ID as ID, 'Parent' as Relation, ParentID as ID, 'Child' as Relation
RESIDENT Org;
Le détail qui compte : les champs 1 et 3 portent le même nom, ID, celui de la table Org. L’aide Qlik explique que c’est ce qui permet d’enchaîner les relations : le résultat d’un clic devient le point de départ du suivant. Avec deux noms différents, on n’obtient que les voisins directs, ce que l’aide juge de peu d’intérêt pratique.
Naviguer de proche en proche
Sur une feuille, placez une table avec ID et Name, et un volet de filtre sur Relation. Sélectionnez « Commercial », puis cliquez sur Child : la table ne montre plus que France et Allemagne. Un second clic sur Child descend encore : Lyon et Paris. Parent remonte d’un niveau.
Chaque clic sur Child descend d’un niveau.


Dans Qlik Cloud : Commercial sélectionné, puis Relation = Child. Il ne reste que les deux services rattachés à Commercial.
C’est une navigation, pas une agrégation : Semantic ne calcule ni niveaux ni chemins. Pour sommer les ventes d’une branche entière, HierarchyBelongsTo reste l’outil adapté (voir notre article sur les hiérarchies).
Trois champs : une seule étiquette
Sans quatrième champ, le nom de la relation sert dans les deux sens. Qlik en fait alors deux valeurs fléchées, une par sens : remplacé par -> et <- remplacé par. C’est pratique pour une relation qui n’est pas un arbre, comme le remplacement d’un produit par un autre :
Succession:
Semantic
LOAD OldProduct as Product, 'remplacé par' as Relation, NewProduct as Product
INLINE [
OldProduct, NewProduct
P1, P2
P2, P3
];
Depuis P1, remplacé par -> mène à P2, puis à P3. Dans l’autre sens, <- remplacé par remonte vers les prédécesseurs. Rien n’oblige les relations à former un arbre : un produit peut remplacer deux références, un document peut en citer plusieurs. Semantic décrit un graphe, là où Hierarchy exige un seul parent par nœud.
Semantic ou Hierarchy ?
| Besoin | Outil |
|---|---|
| Des niveaux pour un tableau croisé, un chemin | Hierarchy |
| Sélectionner une branche entière, des droits | HierarchyBelongsTo |
| Avancer d’un niveau à la fois depuis un choix | Semantic |
| Des relations qui ne forment pas un arbre | Semantic |
Les trois peuvent cohabiter dans la même application, sur la même table source.
À retenir
- Un champ pour naviguer. Semantic crée un champ dont les valeurs, comme Parent et Child, déplacent la sélection vers les objets liés.
- Trois ou quatre champs, dans l’ordre. Objet, relation, objet lié, puis la relation inverse si besoin.
- Le même nom pour les objets. Les champs 1 et 3 doivent porter le même nom pour enchaîner les clics.
- Un graphe, pas seulement un arbre. Plusieurs liens par objet sont permis.
- Navigation, pas calcul. Pour les niveaux et les sous-arbres, Hierarchy et HierarchyBelongsTo restent les bons outils.
Essayer dans Qlik Sense
Ce script reprend les exemples de l’article avec les données des schémas, chargées en INLINE : il ne dépend d’aucun fichier ni d’aucune base. Collez-le dans l’éditeur de chargement de données d’une application vide, choisissez l’exemple avec la variable vExemple, puis rechargez.
// Le préfixe Semantic dans Qlik Sense : script d'essai (HeyData)
// Collez-le dans l'éditeur de chargement de données d'une application vide, choisissez
// l'exemple, rechargez, puis créez une table et un volet de filtre sur Relation.
SET vExemple = 1; // 1 à 3
IF $(vExemple) <> 2 THEN
Org:
LOAD ID, Name, If(Len(ParentID), ParentID) as ParentID
INLINE [
ID, Name, ParentID
1, Direction,
2, Commercial, 1
3, Opérations, 1
4, France, 2
5, Allemagne, 2
6, Logistique, 3
7, Lyon, 4
8, Paris, 4
];
END IF
IF $(vExemple) = 1 THEN
// Exemple 1 : quatre champs, Parent et Child (premier et deuxième schémas)
Relations:
Semantic
LOAD ID as ID, 'Parent' as Relation, ParentID as ID, 'Child' as Relation
RESIDENT Org;
// Table ID, Name ; volet de filtre Relation.
// Sélectionnez Commercial dans Name, puis Child : France et Allemagne. Child encore : Lyon et Paris.
END IF
IF $(vExemple) = 2 THEN
// Exemple 2 : trois champs, une relation qui n'est pas un arbre
Products:
LOAD * INLINE [
Product, ProductName
P1, Modèle 2024
P2, Modèle 2025
P3, Modèle 2026
];
Succession:
Semantic
LOAD OldProduct as Product, 'remplacé par' as Relation, NewProduct as Product
INLINE [
OldProduct, NewProduct
P1, P2
P2, P3
];
// Sélectionnez P1, puis « remplacé par -> » : P2. « <- remplacé par » remonte aux prédécesseurs.
END IF
IF $(vExemple) = 3 THEN
// Exemple 3 : Semantic et Hierarchy sur la même source
Relations:
Semantic
LOAD ID as ID, 'Parent' as Relation, ParentID as ID, 'Child' as Relation
RESIDENT Org;
Levels:
Hierarchy (ID, NodeParentID, NodeName)
LOAD ID, ParentID as NodeParentID, Name as NodeName
RESIDENT Org;
// Levels, reliée à Org par ID, porte NodeName1 à NodeName4 ; Relation sert à naviguer.
END IF
Sources
- Aide Qlik Cloud : Semantic, syntaxe, rôle des quatre champs et exemple de navigation.
- Aide Qlik Cloud : Hierarchy et HierarchyBelongsTo, pour la comparaison.
Le texte et les exemples sont de HeyData. Cet article fait partie de notre série sur les fonctions et mots-clés méconnus de Qlik Sense : découvrir la série.