Précédent   Forum des professionnels en informatique > Logiciels > Solutions d'entreprise > Business Intelligence > Business Objects > Webi
Webi Forum d'entraide Webi (client léger)
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 21/06/2011, 17h18   #1
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Bonjour,

J'ai la requête SQL suivante
Code :
1
2
SELECT hi_num01 , hi_num02, hi_num03, count(DISTINCT (tu_code_emet)) AS nb_ut_actif, count(*) AS nb_tot_crea FROM historique
WHERE HI_DATE_CREA BETWEEN to_date('&2', 'dd/mm/yyyy') AND to_date('&3', 'dd/mm/yyyy') AND TCALG_CODE IS NULL GROUP BY hi_num01 , hi_num02, hi_num03
Je dois mettre cette requête sous BO et avec mes très modestes connaissances de BO (environ 3 jours ) j'ai constaté que j'ai deux possibilités :
1 - je crée une table dérivée avec mon code tel qu'il est (bien sûr en trasformant les '&X' en @Prompt).
2 - Je crée une table dérivée avec le code sans le group by et ensuite je fais le dans mon rapport.
Ma question est la suivante : laquelle de deux solutions est meilleure.
Si c'est la solution 2 (Personnellement je la trouve plus flexible), comment puis je faire un
Code :
count(DISTINCT (tu_code_emet))
. Ou plutôt comment puis je mettre en place cette deuxième solution.

Merci d'avance
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 11h29   #2
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Bonjour,
La première solution va très bien si c'est la seule utilisation des données dans l'univers.
Pour une solution plus flexible, tu peux
  1. Créer une table dérivée avec ce code (je reprends les prompts de ton post précédent) :
    Code :
    1
    2
    3
    SELECT hi_num01 , hi_num02, hi_num03, tu_code_emet
    FROM historique
    WHERE HI_DATE_CREA BETWEEN to_date(@Prompt('DateDebutCreationAction (JJ/MM/AAAA)','A',,mono,free) ,'DD/MM/YYYY')  AND to_date(@Prompt('DateFinCreationAction (JJ/MM/AAAA)','A',,mono,free) ,'DD/MM/YYYY')
  2. Créer les objets dimensions avec les champs hi_num01, hi_num02, hi_num03
  3. Créer deux indicateurs :
    Code :
    1
    2
    nb_ut_actif=count(DISTINCT tu_code_emet)
    nb_tot_crea=count(*)
Ainsi, le group by dépendra des dimensions choisies dans le rapport, les compteurs pourront être calculés pour les trois dimensions ou seulement une partie.
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 11h44   #3
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Re-Bonjour,

Justement comment et où dois je créer mes indicateurs ? dans l'univers ou au niveau du rapport.
Dans les deux cas, quelles sont les fonctions BO que je peux/dois utiliser.

Merci
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 12h09   #4
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Re-bonnjour,
Toutes les actions que je décris sont à faire dans l'univers.

Pour créer un indicateur : Insertion / Objet, dans l'onglet définition renseigner le champ "Select" avec la formule, dans l'onglet Propriétés choisir le type "Indicateur"

Les objets dimensions son à créer de la même manière, ou plus simplement en cliquant sur un champ de la table dérivée et en le tirant dans la partie gauche.
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h05   #5
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Re-bonjour,

Merci pour ton aide mais je n'y arrive toujours pas.
En fait pour les objets dimension je pense que c'est bon.
Par contre quand tu me dis que pour créer l'indicateur je dois taper ma formule dans le champs Select mais c'est quoi la formule ici ? est ce tout simplement le count
Code :
count(DISTINCT tu_code_emet)
? comment puis je lui indique que le group by concerne les trois colonne hiXXX?

Désolé de t'avoir encore embêter

Merci
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 14h43   #6
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Re-bonjour,
Ce qu'il faut mettre dans le champ Select est bien ce que tu as tapé.
Le group by est généré automatiquement par BO au moment où on construit la requête.
Par exemple, si dans ton rapport tu sélectionnes les objets hi_num01 et nb_ut_actif, BO va générer la requête suivante (approximativement, je l'écris à la main)):
Code :
1
2
3
4
5
6
7
8
9
 
SELECT hi_num01, count(DISTINCT tu_code_emet)
FROM
   (SELECT hi_num01 , hi_num02, hi_num03, tu_code_emet
    FROM historique
    WHERE HI_DATE_CREA BETWEEN to_date(@Prompt('DateDebutCreationAction (JJ/MM/AAAA)','A',,mono,free) ,'DD/MM/YYYY')  
    AND to_date(@Prompt('DateFinCreationAction (JJ/MM/AAAA)','A',,mono,free) ,'DD/MM/YYYY')
   )
GROUP BY hi_num01
Et si tu sélectionnes les objets hi_num01, hi_num02, nb_ut_actif et nb_tot_crea, il génèrera
Code :
1
2
3
4
5
6
7
8
9
 
SELECT hi_num01, hi_num02, count(DISTINCT tu_code_emet), count(*)
FROM
   (SELECT hi_num01 , hi_num02, hi_num03, tu_code_emet
    FROM historique
    WHERE HI_DATE_CREA BETWEEN to_date(@Prompt('DateDebutCreationAction (JJ/MM/AAAA)','A',,mono,free) ,'DD/MM/YYYY')  
    AND to_date(@Prompt('DateFinCreationAction (JJ/MM/AAAA)','A',,mono,free) ,'DD/MM/YYYY')
   )
GROUP BY hi_num01, hi_num02
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 15h00   #7
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Merci c'est beaucoup plus clair mais ça risque de ne pas correspondre à ce que je veux mais n'hésite pas à me corrigé.

Est ce que pour afficher mes deux count dans le rapport je suis obligé d'affiche les hi_X.
En effet, dans certain rapports j'ai besoin du nombre total (càd count(*) ou count(disticnt)) mais pas des libellés.

Cordialement
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 15h44   #8
Membre Expert
 
Femme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 480
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France, Ain (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 480
Points : 1 024
Points : 1 024
Re-bonjour,
Pas de problème pour prendre les indicateurs sans les dimensions, le count() se fera pour tous les enregistrements sans group by...
C'est toute la force de BO, il fait automatiquement les aggrégations.

Par exemple, tu peux faire une requête avec hi_num01 et hi_num02 et les deux indicateurs. Admettons que le résultat soit le suivant :
Code :
1
2
3
4
5
hi_num01 | hi_num02 | nb_ut_actif | nb_tot_crea
1        | 1        | 10          | 15
1        | 2        | 20          | 25
2        | 1        | 15          | 30
2        | 2        | 25          | 50
Puis dans le rapport, faire Est-ce que ça rend les choses plus claires ? Ce n'est pas toujours évident à expliquer
tedo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 16h23   #9
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Merci beaucoup pour tes efforts.
C'est beaucoup plus clair et je suis en train d'essayer de le mettre en place car je ne connais pas BO et pour créer le rapport je mets du temps.

Une personne m'a dit que je dois passer par la création d'une variable qui sera la concaténation des champs de mon group by.
est ce cela nécessaire ?
Pour le moment je ne sais pas comment mais d'abord j'aimerais savoir si je suis sur le bon chemin
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2011, 14h21   #10
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Merci beaucoup.
Franchement c'est très gentil de ta part.
Grâce à vous j'arrive à avancer sans que j'aie une formation BO.
Il me reste quand même des problème de mise en page et d'insertion d'un tableau dans un autre mais je pense qu'il te sera difficile de m'aider sur ces aspects

Merci encore infiniment
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/06/2011, 10h58   #11
Futur Membre du Club
 
Inscription : juin 2006
Messages : 100
Détails du profil
Informations forums :
Inscription : juin 2006
Messages : 100
Points : 17
Points : 17
Par défaut count (distinct) avec BO

Bonjour,

Je complète la réponse sur cette question.

En fait, j'ai trouvé une notion pas mal du tout dans BO qui permet de faire un équivalent du group by d'une manière très simple.
Il s'agit d'appliquer une rupture sur la colonne sur laquelle on veut faire le group by (la rupture se fait au niveau du rapport dans InfoView).
Avec le concept "rupture", j'ai pu réaliser ce que je veux.
En fait, une fois que la rupture est créée, on peut utiliser diverses fonctions proposées par BO (Nombre, Somme ....) pour effectuer le calcul.


Merci pour votre aide
ammah est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h56.


 
 
 
 
Partenaires

Hébergement Web