IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Deski Discussion :

[BO 11.5 - Deski] Comment n'afficher que les lignes communes des requêtes synchro? [Fait]


Sujet :

Deski

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 31
    Points
    31
    Par défaut [BO 11.5 - Deski] Comment n'afficher que les lignes communes des requêtes synchro?
    Bonjour,

    Je cherche à n'afficher que les lignes communes à mes deux requêtes dans mon rapport BI. J'ai vu dans le FAQ de BO qu'il explique comment faire cela (Nom du sujet :Comment n'afficher que les lignes communes des requêtes synchronisées ?). Le problème est que je ne comprends pas le code suivant :

    = Non (EstNul([Info(R1)]))


    dans l'explication. Y a t il une erreur et "Non" est en fait "Not"? Et même si je change cela ma requête ne fonctionne puisqu'elle affiche les données de mes deux requêtes même celles qui ne sont pas communes aux deux...

    Merci pour vos réponses!

  2. #2
    Membre averti Avatar de eryk71
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 322
    Points : 323
    Points
    323
    Par défaut
    Bonjour,

    Merci de nous indiquer dansq quelle version de BO tu travaillles et également si tu es en client lourd ou léger.
    = Non (EstNul([Info(R1)]))
    a t il une erreur et "Non" est en fait "Not"?
    Je pense que tu crois que c'est du SQL, mais cette formule n'est pas à mettre dans le sql, mais sous BO dans le filtre (comme indiqué dans la FAQ).
    Sous BO tu as des opérateurs et des fonctions que tu peux utiliser.

    Bien dans la FAQ, BO est configuré en Français.

  3. #3
    Membre éprouvé
    Avatar de Ayana
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    901
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 901
    Points : 1 180
    Points
    1 180
    Par défaut
    C'est une version française, donc c'est bien "Non", tout comme c'est "EstNul" et non pas "IsNull"

    Ta requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Non (EstNul([Info(R1)]))
    Peux-tu nous dire ce que tu as mis à la place de "[Info(R1)]" ?

    La requête que tu nous indiques doit te ressortir tous les éléments non nuls, autrement dit toutes les valeurs existantes pour "[Info(R1)]".

    J'aurais plutôt fait quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = [Info][Info(R1)]=[Info(R2)]
    ou alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = si([Info(R1)]=[Info(R2)];[Info(R1)];"")
    [B]--= Ayana =--
    Team BAB - Spécialistes BO

    Rubrique BI de developpez.com

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    En fait j'ai deux requêtes.

    - La première contient des numéros de contrats de client existants ou plus existants

    - La seconde contient des numéros de contrats des clients existants seulement.

    J'ai crée un tableau dynamique avec les infos de la premiere requête (donc avec les clients existants et plus existants)

    J'ai voulu faire un filtre avec la seconde requête pour n'avoir plus que les existants.

    J'ai donc suivi la démarche du FAQ. J'ai crée un filtre sur les numéros de client de la requête 2 (Numéro de clients existants) et je l'ai défini avec le code suivant :

    = Not(EstNul(<N° Contrat(Contrats existants et plus existants)>))

    Mais au final le filtre ne filtre rien...

    J'espère avoir été assez clair...
    -

  5. #5
    Membre averti Avatar de eryk71
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 322
    Points : 323
    Points
    323
    Par défaut
    Bonsoir,

    J'ai voulu faire un filtre avec la seconde requête pour n'avoir plus que les existants.
    Tu veux dire sur un deuxième tableau? Dans ce cas si tu utilises juste les valeurs de la deuxième requête, ça devrait suffire.


    J'ai crée un filtre sur les numéros de client de la requête 2 (Numéro de clients existants) et je l'ai défini avec le code suivant :
    = Not(EstNul(<N° Contrat(Contrats existants et plus existants)>))
    Mais au final le filtre ne filtre rien
    Le filtre ne peut pas fonctionner dans ton cas. C'est normal que tu ne filtre rien.
    La définition de ton filtre est d'afficher les numéros de contrat qui ne sont pas null.
    La seconde contient des numéros de contrats des clients existants seulement.
    Or dans ta requête 2, tu as pour résultat tous les numéros des contrats de clients existents. Tu ne possède pas de numéros de contrat de valeur null dans cette requête c'est pourquoi ton filtre ne filtre rien. (en plus n'oublie pas de mettre "NON" à la place de "NOT")

    Je cherche à n'afficher que les lignes communes à mes deux requêtes dans mon rapport BI.
    Pour afficher les lignes communes sur 2 requêtes, il faut faire une requête imbriquée avec comme opérateur ensembliste Intersection.

    REQ1 Intersection REQ2 = Valeurs communes des 2 requêtes

  6. #6
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Citation Envoyé par eryk71 Voir le message
    Bonsoir,
    Le filtre ne peut pas fonctionner dans ton cas. C'est normal que tu ne filtre rien.
    La définition de ton filtre est d'afficher les numéros de contrat qui ne sont pas null.

    Or dans ta requête 2, tu as pour résultat tous les numéros des contrats de clients existents. Tu ne possède pas de numéros de contrat de valeur null dans cette requête c'est pourquoi ton filtre ne filtre rien. (en plus n'oublie pas de mettre "NON" à la place de "NOT")
    Je ne suis pas tout à fait d'accord avec eryk71.
    C'est bien sur la variable des contrats existants que l'on trouvera des null puisque que par définition ces contrats sont une partie d'un tout les contrats des clients existants + ceux des inexistants.
    Donc Nb contrats dans Requête 1 > Nb de contrats dans Requête 2
    Donc en face des contrats de R1 correspondants à des clients inexistants absence de contrats de R2 donc null.
    A condition que notre ami(e) Sofie109 ait pensé à synchroniser ces deux requêtes et constitué un tableau contenant les objets des deux fournisseurs de données.
    • Il faudrait que nous indiques les données ramenées par tes deux requêtes : noms des objets
    • leur type (numérique, alphanumérique ou date)
    • leur qualification (Dimension, Information ou Indicateur)
    Nous dire si tu as synchronisé ces requêtes et sur quels objets.
    Citation Envoyé par eryk71 Voir le message
    Pour afficher les lignes communes sur 2 requêtes, il faut faire une requête imbriquée avec comme opérateur ensembliste Intersection.

    REQ1 Intersection REQ2 = Valeurs communes des 2 requêtes
    C'est envisageable si les requêtes s'appuient sur le même univers et sont identiques (mêmes objets dans les deux)
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  7. #7
    Membre averti Avatar de eryk71
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 322
    Points : 323
    Points
    323
    Par défaut
    Bonsoir,

    Bruno2R a écrit:
    C'est bien sur la variable des contrats existants que l'on trouvera des null puisque que par définition ces contrats sont une partie d'un tout les contrats des clients existants + ceux des inexistants.
    Il n'a pas tort, mais je vais quand même expliquer mon raisonnement.
    - La première contient des numéros de contrats de client existants ou plus existants
    Je pensais que le code SQL de la 1ère requête était du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select NumContrat from contrat, client where Id.client(+) = idcli.contrat
    Nous avons donc pour la première requête tous les numéros de contrat de la base de données pour les clients existants ou pas grâce à la jointure externe.
    Pour les clients n'ayant pas de contrat, le numéro de contrat de valeur null serait donc présent dans cette requête pour moi.

    - La seconde contient des numéros de contrats des clients existants seulement.
    Pour la 2e requête je pensais que le code SQL était du genre :
    Select NumContrat from contrat, client where NumContrat is NOT NULL and Id.client = idcli.contrat
    Nous aurons ici tous les numéros de contrats les clients existents et seulement eux grâce à l'équijointure.

    Il est vrai que ce n'est que des suppositions, nous ne connaissons pas comment et structurer la base de données en question.

    Bruno2R a écrit:
    Donc Nb contrats dans Requête 1 > Nb de contrats dans Requête 2
    Sur ce point on est d'accord

    Bruno2R a écrit :
    C'est envisageable si les requêtes s'appuient sur le même univers et sont identiques (mêmes objets dans les deux)
    Effectivement, lors de la rédaction de la réponse, je n'ai pas pensé qu'il pouvait avoir plusieurs univers qui soit traité. Il faut les mêmes objets dans les 2 requêtes, si je reprend mon exemple de conception de la base de données il y aurait en plus pour la requête 2 une condition du genre [Contrat Client existent]. Cette requête aurait été construit au préalable dans l'univers.

  8. #8
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Citation Envoyé par eryk71 Voir le message
    Bonsoir,
    ...
    Je pensais que le code SQL de la 1ère requête était du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select NumContrat from contrat, client where Id.client(+) = idcli.contrat
    Nous avons donc pour la première requête tous les numéros de contrat de la base de données pour les clients existants ou pas grâce à la jointure externe.
    Pour les clients n'ayant pas de contrat, le numéro de contrat de valeur null serait donc présent dans cette requête pour moi.
    ...
    Pour la 2e requête je pensais que le code SQL était du genre :
    Nous aurons ici tous les numéros de contrats les clients existents et seulement eux grâce à l'équijointure.
    ...
    Il est vrai que ce n'est que des suppositions, nous ne connaissons pas comment et structurer la base de données en question.
    ...
    Effectivement, lors de la rédaction de la réponse, je n'ai pas pensé qu'il pouvait avoir plusieurs univers qui soit traité. Il faut les mêmes objets dans les 2 requêtes, si je reprend mon exemple de conception de la base de données il y aurait en plus pour la requête 2 une condition du genre [Contrat Client existent]. Cette requête aurait été construit au préalable dans l'univers.
    Tout cela est possible, on n'a pas d'info sur le SQL...
    Ma réponse était purement BO (synchronisation, filtre complexe utilisant le non null) puisque la question était comment n'afficher que les lignes communes à deux requêtes synchronisées.
    Attendons d'en savoir plus sur les objets, leur type ....et comment cela est synchronisé comme je lui ai demandé.
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    Merci pour toutes vos réponses! je viens d'arriver au travail, je regarde cela tout de suite!

  10. #10
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    J'avais pris pour exemple les numéros de clients pour faire simple mais pour répondre à Bruno2r ma requête 1 contient comme données :

    - Les numéros de contrats de clients actif ou non (Numéros de contrats toujours actifs et les numéros de contrats plus actifs donc annulés),
    - Le nom de l'agent qui a démarré le contrat,
    - L'équipe de l'agent qui a démarré le contrat,
    - Le jour du démarrage du contrat.

    Ce ne sont que des dimensions

    Avec un filtre sur le statut du contrat : Contrat démarré

    Avec ces données j'ai crée un tableau croisée dynamique avec :

    En ligne : les dates de démarrage du contrat (type jj/mm/aaa)
    En colonne: L'équipe de l'agent vendeur + Le nom de l'agent vendeur
    Dans le corps : les numéros de contrats

    Enfin une fois le tableau crée, je compte les numéros de contrats pour qu'ils me donnent le nombre de contrats démarrés au total par les agents.

    =Nombre(<N° Contrat(Contrats démarrés)>)

    Je problème est que là j'ai tout les contrats démarrés même ceux annulés entre temps. Je voudrais juste les numéros de contrats toujours actifs au moment de l'extraction.

    Pour cela j'ai crée une seconde requête avec les données suivantes :

    - Numéro de contrat.

    Avec un filtre sur le statut du numéro de contrat : Contrat annulé

    En effet pour chaque numéro de contrat j'ai son historique de statut. Pour un contrat passé de demarré à annulé j'aurais deux lignes : une ligne avec le numéro de contrat + le code de statut "démarré et une seconde ligne avec le numéro de contrat + le code de statut "annulé".

    Bref, après avoir crée mes deux requêtes et mon tableau dans un onglet de BI j'ai fait clique droit en dehors du tableau pour pouvoir "mettre en forme les filtres".

    Dans mettre en forme les filtres :

    J'ai appuyé sur la croix du tableau croisé 1, j'ai cliqué sur ajouté et une liste de variable que je peux filtrer est apparue.

    J'ai choisi le numéro de contrat de ma requête 2 ( Numéros de contrats annulés)

    Puis je dois définir le filtre. je voudrais n'avoir que les numéros de contrats de la requête 1 qui n'apparaissent pas dans la requête 2.

    Et c'est la ou je bloque...

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 63
    Points : 31
    Points
    31
    Par défaut
    J'ai essayé sinon avec les requêtes combinée.

    Avec dans ma requête 1 :

    - Numéro de contrat

    Filtres :

    - Statut du contrat : Contrats démarrés
    - Entre deux dates

    Dans ma requête 2 :

    - Numéro de contrat

    Filtres :

    - Statut du contrat : Contrats annulés

    je les ai liées par l'opérateur "minus"

    Quand j'affiche les données j'ai bien les numéros de contrat toujours actifs entre mes deux dates.

    Le problème est que lorsque je veux ajouter dans ma feuille de rapport à côté des numéros de contrats, les agents qui les ont démarrés ( Pour les agents j'ai pris une requête ou j'avais des infos sur les contrats démarrés avec les agents, les equipes,...) Les numéros de contrats non actifs réapparaissent...

  12. #12
    Rédacteur
    Avatar de Bruno2r
    Homme Profil pro
    Exploitation des données
    Inscrit en
    Décembre 2006
    Messages
    2 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Exploitation des données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 566
    Points : 4 780
    Points
    4 780
    Par défaut
    Citation Envoyé par Sofie109 Voir le message
    J'avais pris pour exemple les numéros de clients pour faire simple mais pour répondre à Bruno2r ma requête 1 contient comme données :

    - Les numéros de contrats de clients actif ou non (Numéros de contrats toujours actifs et les numéros de contrats plus actifs donc annulés),
    - Le nom de l'agent qui a démarré le contrat,
    - L'équipe de l'agent qui a démarré le contrat,
    - Le jour du démarrage du contrat.

    Ce ne sont que des dimensions

    Avec un filtre sur le statut du contrat : Contrat démarré

    Avec ces données j'ai crée un tableau croisée dynamique avec :

    En ligne : les dates de démarrage du contrat (type jj/mm/aaa)
    En colonne: L'équipe de l'agent vendeur + Le nom de l'agent vendeur
    Dans le corps : les numéros de contrats

    Enfin une fois le tableau crée, je compte les numéros de contrats pour qu'ils me donnent le nombre de contrats démarrés au total par les agents.

    =Nombre(<N° Contrat(Contrats démarrés)>)

    Je problème est que là j'ai tout les contrats démarrés même ceux annulés entre temps. Je voudrais juste les numéros de contrats toujours actifs au moment de l'extraction.

    Pour cela j'ai crée une seconde requête avec les données suivantes :

    - Numéro de contrat.

    Avec un filtre sur le statut du numéro de contrat : Contrat annulé

    En effet pour chaque numéro de contrat j'ai son historique de statut. Pour un contrat passé de demarré à annulé j'aurais deux lignes : une ligne avec le numéro de contrat + le code de statut "démarré et une seconde ligne avec le numéro de contrat + le code de statut "annulé".

    Bref, après avoir crée mes deux requêtes et mon tableau dans un onglet de BI j'ai fait clique droit en dehors du tableau pour pouvoir "mettre en forme les filtres".

    Dans mettre en forme les filtres :

    J'ai appuyé sur la croix du tableau croisé 1, j'ai cliqué sur ajouté et une liste de variable que je peux filtrer est apparue.

    J'ai choisi le numéro de contrat de ma requête 2 ( Numéros de contrats annulés)

    Puis je dois définir le filtre. je voudrais n'avoir que les numéros de contrats de la requête 1 qui n'apparaissent pas dans la requête 2.

    Et c'est la ou je bloque...
    En fait je pense que la cause de ton problème est le tableau croisé !
    • Tu devrais essayer de faire un tableau simple avec moins de données
    • Mettre en information (rattachées au n° de contrat) toutes les données autres que N° de contrat (puisque c'est la seule dimension commune avec la requête 2 c'est donc la seule qui puisse être liée).
    Enfin puisque la requête 2 ramène les contrats annulés donc (si j'ai bien compris ) ceux que tu ne veux pas ?
    poser le filtre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EstNul([Numéro de contrat (Requête 2)]
    Précisez la VERSION !
    Un message vous a aidé ? Votez en cliquant sur Pensez au bouton
    Tutoriels BO et FAQ BO
    "A vouloir repousser ses limites ... On risque d'en prendre connaissance !!!"

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/12/2013, 18h59
  2. Réponses: 4
    Dernier message: 28/05/2010, 13h55
  3. Réponses: 5
    Dernier message: 19/05/2010, 10h10
  4. Réponses: 6
    Dernier message: 10/11/2009, 11h58
  5. Réponses: 2
    Dernier message: 30/03/2009, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo