2010-02-12 6 views
0

Dernièrement, nous avons testé QlikView au bureau. La première impression est bonne: elle a une interface attrayante et fonctionne très vite. Nous voulons l'utiliser comme interface de base de données pour nos clients. Nous essayons également de déterminer s'il peut prendre en charge certaines parties de notre structure de base de données relationnelle. Cependant, nous sommes dans le doute si ses fonctions de base de données sont assez avancées pour être plus qu'une interface attrayante.Jointures non standard dans QlikView?

Plus précisément, nous rencontrons le problème suivant. L'équivalent des opérations JOIN (equijoin) normales peut être effectué dans QlikView simplement en définissant des noms de champs égaux entre les tables - ces champs seront alors liés. Toutefois, l'une de nos opérations SQL JOIN traditionnelles utilise une requête "BETWEEN" pour déterminer si une date est dans une certaine plage et joindre les données sur celle-ci.

Est-il possible de spécifier une telle relation de "non-équivalence" entre les tables de QlikView? Ou s'agit-il d'une limitation inhérente à la structure dite de "base de données associative"?

Répondre

0

Sure can - Je pense que ce que vous voulez la fonction IntervalMatch.

+0

La fonction IntervalMatch ne peut être utilisée que dans le script Load. Cela équivaut à pré-joindre les données dans un serveur de base de données et de les charger ensuite. Ce que je veux, c'est que QlikView charge deux tables telles qu'elles sont, puis définisse une relation "BETWEEN" entre elles. Mais je pense que ce n'est pas possible. – thomaspaulb

+0

Ce n'est pas possible, sauf dans le loadcript. Quoi qu'il en soit, votre réponse est la meilleure que QlikView peut faire, alors voici les points! – thomaspaulb

3

La réponse de Marcus est correcte. La façon de faire est d'utiliser IntervalMatch. Vous pouvez avoir les deux tables telles quelles et ajouter une relation "entre", en utilisant IntervalMatch. Vous ne pouvez pas ajouter de relations après l'exécution du script de chargement.

D'abord, vous devrez charger la table qui a la plage de dates (les requêtes sql sont omises). Disons que:

Ranges: 
LOAD 
    rangeID, 
    validfrom, // date 
    validto, // date 
    commonkey, // common key for the two tables 
    price;  // the data that's needed as a result of the linking 

Deuxièmement, vous chargez une autre table avec la date

Data: 
LOAD 
    column1, 
    column2, 
    date, 
    commonkey; 

Ensuite, vous devrez utiliser le intervalmatch. C'est une façon de le faire:

Left Join (Data) 
IntervalMatch(date, commonkey) 
LOAD 
    validfrom, 
    validto, 
    commonkey 
Resident Ranges; 

Maintenant, vous avez le lien entre les deux tables. Vous pouvez supprimer la clé de synthèse résultant en ajoutant ceci:

Left Join (Data) 
LOAD 
    validfrom, 
    validto, 
    commonkey, 
    rangeID 
Resident Ranges; 

DROP Fields validfrom, validto FROM Data; 

Maintenant, les tableaux sont liés à l'aide de la touche rangeID. Si les tables n'ont pas de clé en commun, comme un identifiant de catégorie ou quelque chose, (c'est-à-dire que seules les dates doivent correspondre), vous pouvez simplement ignorer le commonkey dans l'exemple ci-dessus. Je voulais juste l'inclure dans l'exemple parce que j'en avais besoin dans mon cas et j'espère que cela aidera quelqu'un avec un problème similaire.

Vous pouvez le trouver dans l'aide Qlikview intitulée "IntervalMatch (extended)". Le Qlikview cookbook (fillrowsintervalmatch.qvw) m'a également aidé avec ce problème.

Questions connexes