Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Débuter
Débuter Forum d'entraide pour débuter avec Business Object
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 16h15   #1
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
Par défaut Table dérivée et DB2

Bonjour,

Voici mon soucis pour la conception d'un univers. J'ai besoin d'avoir une dimension numéro de semaine pour mes rapports. J'ai donc pensé à créer une table dérivée calendrier avec une requete SQL DB2 qui fonctionne correctement :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
WITH calend_temp(idJour,jour,mois,annee,numSemaine) AS
    (
        SELECT 
            1 ,to_date('20080201','yyyymmdd'),MONTH(to_date('20080201','yyyymmdd')),YEAR(to_date('20080201','yyyymmdd')), WEEK(to_date('20080201','yyyymmdd'))
            FROM sysibm.dual
        UNION ALL
       SELECT 
           idJour+1,jour+ 1 day,MONTH(jour+1 day),YEAR(jour+1 day), WEEK(jour+1 day)
       FROM 
            calend_temp
       WHERE 
            jour < to_date('20090111','yyyymmdd')
    )
SELECT idJour,jour,mois,annee,numSemaine FROM calend_temp
Mais voilà Designer n'aime pas le format de la requête et me donne comme message d'erreur :
"Chaque colonne calculée doit porter un nom explicite"

J'ai vu dans la FAQ que cela marchait bien avec une requete oracle. Si quelqu'un a une solution pour DB2.

Merci
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h19   #2
Membre Expert
 
Avatar de nuke_y
 
Inscription : mai 2004
Messages : 1 812
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 1 812
Points : 1 609
Points : 1 609
Bonjour. Je dirais que ta question doit aller dans le forum BO, ici c'est le forum général.

Sinon pour ton problème, je dirais qu'il faut essayer sans le WITH, je ne suis pas sûr que XI l'autorise dans les tables dérivées (je me demande quelle allure a la requête s'il l'autorise). Et dans ce cas nomme bien chaque colonne, même dans la sous-requête.
__________________
Il vaut mieux monopoliser son intelligence sur des bêtises que sa bêtise sur des choses intelligentes.

Mon combat pour les droits des consommateurs face aux abus des grandes marques.
nuke_y est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 16h33   #3
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
Ok, alors il faut surtout que j'aille dans le forum DB2 pour trouver comment faire une requete récursif sans utiliser de with.

c'est pas gagné
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 13h12   #4
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 950
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 950
Points : 1 467
Points : 1 467
Hello,

Citation:
Envoyé par nomissamoht Voir le message
Ok, alors il faut surtout que j'aille dans le forum DB2 pour trouver comment faire une requete récursif sans utiliser de with. c'est pas gagné
Il suffit de demander à un modérateur, on est gentil tu sais ( en général )

C'est plus un problème BO que DB2 si tu dis que ta requête marche sous DB2. Donc j'ai déplacé la discussion dans BO/Designer.

Le SQL généré est ok ? Tu l'as testé ?
Hum, je vais trop vite ...

Il faut aliaser les colonnes de ton sql, sous oracle par exemple tu fais
Code :
SELECT 1 a, 'p' b FROM dual
pour avoir les colonnes nommées a et b.
Sous DB2 je ne sais pas comment tu fais ? un as ?
__________________
Avez-vous 60 secondes pour répondre aux sondages sur BO ici et ?
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 17h36   #5
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
Salut Doc,

En effet designer attendait un alias en utilisant le "AS" pour les champs calculés, mais une fois ce détail corrigé je me fais de nouveau jeté par designer.

Le message est "une marque innatendue 'AS' figure à la suite de ,numsemaine)"

C'est pourquoi j'en avais conclu que designer n'aimais pas que l'expression SQL ne commence pas par un select mais avec un with.

Sinon mon sql est testé et ok sous db2

Merci
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 17h51   #6
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 950
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 950
Points : 1 467
Points : 1 467
Le WITH ne devrait pas marcher dans Designer, nuke a raison.

On essaye avec une ligne :
Code :
1
2
3
4
5
 
        SELECT 
            1 AS idjour,
             to_date('20080201','yyyymmdd') AS jour ,MONTH(to_date('20080201','yyyymmdd')) AS mois ,YEAR(to_date('20080201','yyyymmdd')) AS annee, WEEK(to_date('20080201','yyyymmdd')) AS numsemaine
            FROM sysibm.dual
Ca donne quoi ?
( Sous BO et DB2 )
__________________
Avez-vous 60 secondes pour répondre aux sondages sur BO ici et ?
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 01h03   #7
Responsable Business Intelligence
 
Avatar de TomDuBouchon
 
Homme Thomas Cochin
Consultant en Business Intelligence
Inscription : juin 2009
Messages : 3 271
Détails du profil
Informations personnelles :
Nom : Homme Thomas Cochin
Âge : 29
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : juin 2009
Messages : 3 271
Points : 5 670
Points : 5 670
Bonjour,

L'utilisation du WITH n'est absolument pas un problème... Je l'ai souvent utilisé pour générer des tables temporaires à utiliser directement dans la table dérivée (sous Oracle)

Essaies donc de ne pas spécifier de nom pour tes colonnes avant ton AS. La table temporaire reprendra les en-têtes utilisées dans la requête la générant.
Donc, en reprenant tes libellés :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
WITH calend_temp AS
    (SELECT  
     1 AS idJour,     
     to_date('20080201','yyyymmdd') AS jour, 
     MONTH(to_date('20080201','yyyymmdd')) AS mois,    
     YEAR(to_date('20080201','yyyymmdd')) AS annee,
     WEEK(to_date('20080201','yyyymmdd')) AS numSemaine
     FROM sysibm.dual
     UNION ALL
     SELECT 
     idJour+1,
     jour+ 1 day, 
     MONTH(jour+1 day),
     YEAR(jour+1 day), 
     WEEK(jour+1 day)
     FROM 
     calend_temp
     WHERE 
     jour < to_date('20090111','yyyymmdd')
    )
SELECT idJour,jour,mois,annee,numSemaine FROM calend_temp
__________________
Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
Un message vous a aidé ? Votez en cliquant sur
Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton
Vous souhaitez contribuer à la rubrique BI ? Contactez-moi ou un autre responsable de l'équipe BI par MP.
TomDuBouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h17   #8
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
Citation:
Envoyé par TomDuBouchon Voir le message
Essaies donc de ne pas spécifier de nom pour tes colonnes avant ton AS.
La requete n'est pas bonne sous DB2 à cause du Union All, SQLState: 42908, pour créer une table temporaire sans spécifier les colonnes la requete doit retourner un nom unique.

Mais quoi qu'il en soit si je vire le UNION ALL pour avoir un code sql valide

Code :
1
2
3
4
5
6
7
8
9
10
WITH calend_temp AS
    (SELECT  
     1 AS idJour,     
     to_date('20080201','yyyymmdd') AS jour, 
     MONTH(to_date('20080201','yyyymmdd')) AS mois,    
     YEAR(to_date('20080201','yyyymmdd')) AS annee,
     WEEK(to_date('20080201','yyyymmdd')) AS numSemaine
     FROM sysibm.dual     
    )
SELECT idJour,jour,mois,annee,numSemaine FROM calend_temp
Designer me retourne le meme message
"une marque innatendue 'AS' figure à la suite de calend_temp"

Citation:
Envoyé par doc malkovich Voir le message
Ca donne quoi ?
( Sous BO et DB2 )
avec ce simple select pas de problème pour db2 et designer


J'ai finis par opter pour la création d'une vue mais j'aimerai bien trouver la solution via SQL, je vais donc continuer à chercher

Merci de votre aide
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h51   #9
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 950
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 950
Points : 1 467
Points : 1 467
Salut Tom,

Citation:
Envoyé par TomDuBouchon Voir le message
L'utilisation du WITH n'est absolument pas un problème... Je l'ai souvent utilisé pour générer des tables temporaires à utiliser directement dans la table dérivée (sous Oracle)
C'est vrai ? Ca m'étonne , à ma connaissance le WITH se fait en début de SQL, là tu le rajoutes dans la clause FROM via la table dérivée. Il faudra que je teste

Hum, je ne vois pas l'intérêt du WITH dans ta requête, tu reprends les mêmes colonnes que la sous-requête ...

Citation:
avec ce simple select pas de problème pour db2 et designer
Et en enlevant le WITH et en aliasant aussi la 2de requête cela ne marche pas ?
__________________
Avez-vous 60 secondes pour répondre aux sondages sur BO ici et ?
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 13h58   #10
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
Citation:
Envoyé par doc malkovich Voir le message
Hum, je ne vois pas l'intérêt du WITH dans ta requête, tu reprends les mêmes colonnes que la sous-requête ...
Je ne comprends pas ce que tu veux dire... Pour récapituler je vais générer une table calendrier dans mon univers pour avoir tous les numéros de semaine entre 2 Dates meme si il n'y a aucune entrée pour une ou plusieurs semaines dans mes tables de données.

J'ai donc pour cela besoin d'une requete recursive, d'où l'utilité du WITH. à moins que j'ai loupé une solution plus simple

Merci
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h18   #11
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 950
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 950
Points : 1 467
Points : 1 467
Ok j'ai compris ce que tu voulais faire.

Je ne connais pas DB2, mais sous Oracle une telle requête est impossible car tu références dans le sous-select du WITH la table que tu crées via le WITH.

Est-ce là le problème ?
__________________
Avez-vous 60 secondes pour répondre aux sondages sur BO ici et ?
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 14h47   #12
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
Sous DB2 une telle requete est possible et je te confirme qu'elle fonctionne bien mais designer n'en veut pas.

Avec oracle le connect by fonctionne bien avec designer mais il n'y a pas d'équivalent db2
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 10h08   #13
Responsable Business Intelligence
 
Avatar de TomDuBouchon
 
Homme Thomas Cochin
Consultant en Business Intelligence
Inscription : juin 2009
Messages : 3 271
Détails du profil
Informations personnelles :
Nom : Homme Thomas Cochin
Âge : 29
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : juin 2009
Messages : 3 271
Points : 5 670
Points : 5 670
Pour ton erreur de syntaxe, essaies de préciser le nom de la table temporaire après sa définition :
Code :
WITH (SELECT...) AS TABLE
__________________
Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
Un message vous a aidé ? Votez en cliquant sur
Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton
Vous souhaitez contribuer à la rubrique BI ? Contactez-moi ou un autre responsable de l'équipe BI par MP.
TomDuBouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h08   #14
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
j'avais essayé cette solution, je crois avoir essayé la plupart des combinaisons de syntaxe mais une seule reste valide
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h17   #15
Modérateur
 
Avatar de doc malkovich
 
Homme
Consultant en Business Intelligence
Inscription : juillet 2008
Messages : 950
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Nord (Nord Pas de Calais)

Informations professionnelles :
Activité : Consultant en Business Intelligence

Informations forums :
Inscription : juillet 2008
Messages : 950
Points : 1 467
Points : 1 467
Bizarre ...
Je ne sais pas comment BO valide le sql d'une table dérivée. Il me semblait qu'il faisait juste un
Code :
SELECT * FROM ( SQL TABLE Dérivée ) WHERE 1=0
Il faudrait mettre un sniffer de sql pour voir.
__________________
Avez-vous 60 secondes pour répondre aux sondages sur BO ici et ?
doc malkovich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 14h59   #16
Responsable Business Intelligence
 
Avatar de TomDuBouchon
 
Homme Thomas Cochin
Consultant en Business Intelligence
Inscription : juin 2009
Messages : 3 271
Détails du profil
Informations personnelles :
Nom : Homme Thomas Cochin
Âge : 29
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : juin 2009
Messages : 3 271
Points : 5 670
Points : 5 670
Quelle est l'erreur renvoyée lorsque tu testes la dernière syntaxe que je t'ai proposée ?
__________________
Pensez à consulter les FAQs BI, les Tutoriels BI et à effectuer des Recherches.
Un message vous a aidé ? Votez en cliquant sur
Votre problème est résolu ? Merci de l'indiquer en cliquant sur le bouton
Vous souhaitez contribuer à la rubrique BI ? Contactez-moi ou un autre responsable de l'équipe BI par MP.
TomDuBouchon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2011, 16h55   #17
Invité de passage
 
Inscription : octobre 2008
Messages : 18
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 18
Points : 3
Points : 3
A character, token, or clause is invalid or missing.
nomissamoht est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h46.


 
 
 
 
Partenaires

Hébergement Web