Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
QlikSearcherEverMore
Contributor II
Contributor II

Boucle sur deux tables pour en charger une troisième => Produit cartésien (c'est la solution).

Bonjour la communauté.

L'associativité des données fait parfois obstacle à la construction de rapports qui seraient possibles avec une jointure gauche sous SQL ... J'essaye de passer outre en créant une table qui contient mes données opérationnelles et des données "bidons" qui représentent mes potentiels ... voici le cas :

CLASSE_PRODUIT :
Load * Inline [
CLASSE_PRODUITS
A
B
C
D
]
;

CLIENTS :
Load * Inline [
ID
1
2
3
]
;

Je souhaite faire une TABLE des potentiels qui ressemble à ça :
 Potentiels :
 ***********************************
 * ID_CLIENT * CLASSE_PRODUITS *
 ***********************************
 * 1                    * A                                      *
 * 1                    * B                                      *
 * 1                    * C                                      *
 * 1                    * D                                      *
 * 2                    * A                                      *
 * 2                    * B                                      *
 * 2                    * C                                      *
 * 2                    * D                                      *
 * 3                    * A                                      *
 * 3                    * B                                      *
 * 3                    * C                                      *
 * 3                    * D                                      *
 ***********************************

Parce que j'imagine (un peu naïvement sans doute) qu'en concaténant les données de cette TABLE
avec une autre TABLE qui contient des réalisations ... ce qui donnerait quelque chose comme ça ...
(Bien entendu à la fin de l'opération je n'ai plus qu'une table, je devrais droper les autres)

 *************************************************
 * ID_CLIENT * CLASSE_PRODUITS * ID_PRODUIT *
**************************************************
* 1                      * A                                      * 20995              *
* 1                      * A                                      * 12969              *
* 1                      * B                                      * -                         *
* 1                      * C                                      * 95222              *
* ...                     * ...                                    * ...                        *
**************************************************

Je pourrait construire un RAPPORT qui compte le nombre de classe de produits pour un client sélectionné :
Pour le client en sélection dont d'ID = 1 j'aurais :

******************************************
* CLASSE_PRODUITS * Nb d'ID_PRODUIT *
******************************************
* A                                      * 2                                    *
* B                                      * 0                                    *
* C                                      * 1                                    *
* D                                     * ...                                    *
 ******************************************

Une solution quant au chargement de la table des potentiel ?
Merci.

QlikSearcherEverMore

Labels (1)
1 Solution

Accepted Solutions
brunobertels
Master
Master

Bonjour 

Pour çà il te faut faire un produit cartesien de tes deux tables avec left join 

comme çà : 

CLASSE_PRODUIT :
Load * Inline [
CLASSE_PRODUITS
A
B
C
D
]
;

CLIENTS :
left join (CLASSE_PRODUIT)
Load * Inline [
ID
1
2
3
]
;

 

çà te donnera çà  : 

brunobertels_0-1661764782780.png

 

View solution in original post

4 Replies
brunobertels
Master
Master

Bonjour 

Pour çà il te faut faire un produit cartesien de tes deux tables avec left join 

comme çà : 

CLASSE_PRODUIT :
Load * Inline [
CLASSE_PRODUITS
A
B
C
D
]
;

CLIENTS :
left join (CLASSE_PRODUIT)
Load * Inline [
ID
1
2
3
]
;

 

çà te donnera çà  : 

brunobertels_0-1661764782780.png

 

QlikSearcherEverMore
Contributor II
Contributor II
Author

Super.
Merci ça fonctionne parfaitement.
C'est particulier Qlik. Pour compter des "trous", il faut d'abord en faire; et pour en faire il faut passer par un produit cartésien (ce qu'on ne fait pas volontiers sur d'autres SGBD).😊

brunobertels
Master
Master

Bonjour 

Oui c'est le principe même de Qlik : le principe d'associativité. 

tu peux peut être passer par une formule pour compter des "Vides" c'est a dire des associations qui n'existent pas. 

Ca dépend du model de data au départ mais quand ttes les valeurs de  deux dimensions ne sont pas associées entre elles par exemple des ventes des vendeurs et des régions et que tu veux pouvoir visualiser tous les vendeurs , et toutes les régions même si il n'y a pas de ventes tu peux utiliser 

sum(Sales) + sum({1}0) 

https://community.qlik.com/t5/QlikView-App-Dev/What-does-it-mean-sum-1-0/td-p/64584 

QlikSearcherEverMore
Contributor II
Contributor II
Author

Hello
Oui, j'avais vu ça (aussi).
Mais dés lors qu'on met un set analysis sur une feuille, ce dernier joue sur toute la feuille si l'indicateur est présent dans les autres objets de cette feuille (ce qui est mon cas) - Ici je peux afficher l'indicateur et par ailleurs bloquer les valeurs nulles d'autres variables à l'affichage sur les listes qui coexistent sur cette feuille pour rester lisible.
En fait, l'indicateur que je cherchais à créer a deux objectif :
- Il sert a calculer "un taux d'équipement" (donc éventuellement dire à des commerciaux où aller).
- Il sert à dire à N'Printing ... si l'indicateur et à zéro, bloque la génération du rapport sur les classes de produits qui ne concerne pas la sélection. Et comme cette sélection est variable dans l'espace (zone géographique) et dans le temps (période de date min / max d'un calendrier) je ne peux pas "pré calculer" l'indicateur.
Mais du coup, j'ai avancé comme ça sur mon projet et ça donne les résultats attendus. Donc : super ! (même s'il faudra optimiser plus tard).
Merci.