F.A.Q. Business-ObjectsConsultez toutes les FAQ

Nombre d'auteurs : 15, nombre de questions : 101, dernière mise à jour : 10 juillet 2013 

 
OuvrirSommaire Reporter / Desktop Intelligence (Client lourd) Editeur de Requêtes
Les objets disponibles dans un univers sont de trois types :
  • Dimension (en forme de cube bleu).
  • Information (en forme de pyramide verte).
  • Indicateur (en forme de sphère rose).

Objets Dimension (cubes bleus) : Sont des données alphanumériques qui permettent d'organiser les résultats.
Ces objets répondent aux questions que l'utilisateur se pose :
Quel est le chiffre d'affaires par vendeur, le salaire moyen par fonction, le nombre de commandes par fournisseur ou les dépenses engagées par mois ...

Objets Information (pyramides vertes) : Sont des données alphanumériques rattachées à un et un seul objet Dimension.
Ils apportent des informations complémentaires à l'objet Dimension auquel ils se rattachent.
Le N° de fax du Fournisseur, sa raison sociale, son adresse.
Le libellé d'un produit, l'intitulé d'un compte ...

Objets indicateurs (sphères roses) : Sont des données numériques, résultat d'un dénombrement (nombre de) ou mesure d'une quantité.
Ils sont susceptibles de se voir appliquer toutes les opérations arithmétiques nécessaires aux calculs souhaités.
Nombre de commandes, Montant de la facture, Quantité en stocks ...
Ces objets numériques sont en général pourvus d'une fonction de sommation automatique qui adapte leur valeur lorsque l'on change de niveau d'agrégation.

Mis à jour le 5 décembre 2007  par Bruno2r

Une requête BO créée avec l'éditeur de requête génère une sélection en langage SQL. Il s'agit du langage universel utilisé pour interroger les bases de données (SQL : Short Query Language).

Une requête SQL basique est construite de la manière suivante :

  • une partie SELECT qui permet de choisir les données à récupérer.
  • une partie FROM qui indique dans quelles tables récupérer ces données.
  • un partie WHERE qui permet de poser des des clauses restrictives (conditions) et de définir les jointures entre les tables.
Exemple
Sélectionnez
SELECT   nom, prénom, poste   FROM    utilisateurs   WHERE   poste = 'vendeur' ;

Selon vos droits attribués dans le Superviseur / CMC, vous pouvez ou non avoir accès à ce code SQL au niveau de l'éditeur de requête, un bouton " SQL " vous permet alors de l'afficher.

Vous pouvez ensuite grâce à l'éditeur SQL de BO, regénérer, valider ou enregistrer-sous le code SQL.
Si vous désirez modifier le SQL, pour exécuter ensuite la requête avec votre code, vous devez cocher la case " Ne pas générer le SQL avant l'exécution ".

Attention, il faut toujours que le nombre d'objets dans la clause SELECT soit le même que le nombre d'objet sélectionnés dans la requête BO.
De plus si vous remplacez un champ par un autre dans la clause SELECT, à l'affichage dans BO, la valeur de la cellule sera celle du SQL, mais l'entête de la colonne sera celle de l'objet BO.

Créé le 6 décembre 2007  par bastoonet

Dans l'éditeur de requêtes, utiliser le bouton " Option " situé en bas à gauche.
Vous pouvez choisir ici de ne récupérer que les 10, 20 ou n premières lignes de la requête (max = 9999999999 ).

Attention, il s'agit là de limiter les résultats de la requête et non de masquer des données récupérées par une requête.
Si vous avez une somme dans votre rapport sur cette requête, elle sera alors basée sur ces n lignes.

Créé le 8 décembre 2007  par bastoonet

Pour combiner des requêtes, il faut se placer au niveau de l'éditeur de requête, et une fois la requête principale créée, cliquer sur l'icône représentant 2 cercles imbriqués.
Une deuxième requête est alors créée dans le même fournisseur de données, on peut naviguer entre ces requêtes grâce aux onglets situés en bas de l'éditeur.
Par défaut, la combinaison de requêtes créée est un « UNION » (symbole U), mais en cliquant sur le symbole, on peut changer le type de combinaison et choisir un « INTERSECT » (symbole n) ou un « MINUS »( symbole - )

On peut combiner au maximum 8 requêtes, en précisant la combinaison entre chaque requête.
Les requêtes combinées doivent contenir les mêmes objets et ne peuvent différer que par la partie « Conditions ».

Soit 2 requêtes Toto et Tata tel que :

  • Toto récupère les données suivantes : A, B, C, D.
  • Tata récupère les données suivantes : B, C, D, E.
  • Toto UNION Tata = Tata UNION Toto = A, B, C, D, E.
  • Toto INTERSECT Tata = Tata UNION Toto = B, C, D.
  • Toto MINUS Tata = A.
  • Tata MINUS Toto = E.
Créé le 8 décembre 2007  par bastoonet

Il arrive bien souvent que le Designer qui a créé l'univers n'ait pas prévu, dans les listes de valeurs, d'associer aux codes leurs libellés.

Vous pouvez améliorer ces listes de la façon suivante :

  1. Menu Outils / Commande Univers.
  2. Dans la boîte de dialogue qui s'affiche.
  3. Sélectionnez l'univers qui contient la liste de valeurs à modifier.
  4. Cliquez sur la liste de valeurs.
  5. Dans la boîte de dialogue Listes de valeurs, ouvrez la classe contenant l'objet sur lequel porte la liste de valeurs.
  6. Cliquez sur Editer.
  7. Dans l'éditeur de requête ajoutez l'objet Libellé correspondant.
  8. A ce stade, il vous est possible de choisir si le tri de la liste restera sur le code ou si vous préférez organiser cette liste par un tri alphabétique sur les libellés.
  9. Cliquez sur Exécuter pour remplir la liste de valeurs dans sa nouvelle version.
  10. Pour visualiser la liste, cliquez sur Afficher.
  11. Cliquez sur OK pour fermer la boîte de dialogue.

Avantage de la méthode:
Les modifications apportées aux listes de valeurs sont stockées dans leurs fichiers qui sont reconnaissables par leur extension .lov qui signifie list of values.
Ces fichiers se trouvent par défaut dans des sous-répertoires du répertoire UserDocs en versions 5 et 6.
Ces fichiers sont automatiquement créés lorsque vous affichez la liste de valeurs.
Ils sont utilisés chaque fois que vous utilisez l'univers auquel les listes sont rattachées.

Créé le 12 décembre 2007  par Bruno2r

Objectif : A partir d'une invite de type "Quelle année ?", rapatrier automatiquement les données de l'année et celles de l'année précédente. (N et N-1)

Méthode : Il suffit de créer un objet personnel qui permette d'utiliser la même invite pour N et N-1.
La création d'un objet personnel peut se faire dans une requête ou en passant par Menu Outils / Commande Univers / Objets personnels.

Prenons l'exemple de notre requête dans laquelle nous avons déjà posé la condition sur un objet Dimension ANNEE tiré de la classe CALENDRIER
ANNEE Egal à Invite ('Quelle Année ?')

Avant toute chose, déterminez si l'objet Année tiré de votre univers est de type caractère ou numérique, cela vous sera utile par la suite.

Si vous ne savez pas :

  • Allez dans le Gestionnaire de données.
  • Sélectionnez l'objet dans son fournisseur de données.
  • Passez sur l'onglet Définition.
  • Relevez le type de l'objet.

Création de l'objet personnel ANNEEPLUS1 :

De retour dans votre requête :

  1. Cliquez sur le bouton Objets personnels (à droite du bouton SQL).
  2. Cliquez sur Ajouter.
  3. Dans l'onglet Définition nommez votre nouvel objet ANNEEPLUS1.
  4. L'objet ANNEE déposé dans la condition étant de type dimension, donnez également le type Dimension à l'objet personnel.
  5. Passez dans l'onglet Formule.
Si ANNEE est une donnée de type caractère
Sélectionnez
Formule = En_caractère ( En_nombre ( [CALENDRIER\ANNEE} ) +1 )
Si ANNEE est numérique
Sélectionnez
Formule = [CALENDRIER\ANNEE} + 1

Validez avec la touche OK.
L'objet personnel est maintenant disponible dans la classe Objets personnels dans toute requête utilisant le même univers.

Utilisation de l'objet personnel ANNEEPLUS1 :

  1. Créer avec cet objet une 2ème condition.
  2. Faites glisser dans la zone condition l'objet personnel ANNEEPLUS1.
  3. Double clic sur Egal à ...
  4. Double clic sur Afficher une liste d'invites ...
  5. Choisir la même invite que pour la 1ère condition Invite('Quelle Année ?').

Vous avez maintenant deux conditions articulées par ET

  • Double clic sur ET le transforme en OU.
  • Exécutez votre requête.
  • Répondez à l'invite.

Les données obtenues sont celles de l'année choisie en invite et de l'année précédente

Créé le 12 décembre 2007  par Bruno2r

La plage des douze mois antérieurs à une date choisie peut être obtenue à l'aide de deux objets personnels posés en condition :
DATE1 demandée par invite et DATE12Mois calculée à partir de DATE1
Ces objets personnels mis au point seront réutilisable dans toutes les requêtes à venir pointant sur le même univers.

Pour créer les deux objets personnels dans l'éditeur de la requête :

1) objet personnel DATE1 de type Date et Qualification Dimension

Formule :
Sélectionnez
Invite Date ( "QUELLE DATE ?" )

2) objet personnel DATE12Mois de type Date et Qualification Dimension

Formule :
Sélectionnez
Ajouter mois ( [Objets personnels\DATE1] , 12 )

Remarquer au passage qu'on ne met pas de signe = dans la formule

Puis dans la condition de la requête il suffit de choisir l'objet Date et de lui appliquer l'opérateur Entre:

 
Sélectionnez
[Date] Entre [DATE1] et [DATE12Mois]

Les objets personnels se trouvent dans la dernière classe de la liste : Classe Objets personnels

Créé le 10 avril 2008  par Bruno2r

La synchronisation de deux fournisseurs de données permet d'afficher dans un même tableau les données provenant de requêtes différentes en évitant tout produit cartésien.
Pour cela, les dimensions communes aux deux requêtes sont liées entre elles.

Exemple : Deux requêtes BO ramènent des infos relatives à des clients.
Client est un objet dimension qui a été lié entre R1 et R2

Pour ne pas perdre d'enregistrements BO, doit établir une liste exhaustive des clients composée :
  • Des Clients présents dans R1 et R2.
  • Des Clients présents uniquement dans R1.
  • Des Clients présents uniquement dans R2.
  • Puis ramener pour chaque Client les infos lorsqu'elles existent dans R1, dans R2 ou dans R1 et R2..
En SQL on pourrait traduire ça de la façon suivante :
Sélectionnez
SELECT R.Client, R1.infos, R2.Infos
FROM
R2, R1,
(SELECT Client FROM R1
UNION
SELECT Client FROM R2) R
WHERE R.Client = R1.Client(+)
AND R.Client = R2.Client(+) )

Si la dimension étudiée est présente dans l'une des requêtes mais absente de la deuxième, aucune info n'est ramenée de cette dernière.
Noter au passage que BO remplace les listes des clients de R1 et R2 par la liste exhaustive (sous requête R dans le SQL).

Pour n'afficher que les clients présents dans le résultat des deux requêtes, le plus simple est de mettre en place un double filtre complexe (c'est-à-dire basé sur une condition à vérifier plutôt qu'une simple valeur de l'objet).

Comment faire :
  • Cliquer en dehors du tableau (sur le fond blanc) pour déselectionner tout objet
  • Clic droit Formater les filtres.
  • Ouvrir le dossier correspondant au tableau en cliquant sur +.
  • Cliquer sur Ajouter.
  • Dans "Variables à filtrer", choisir une variable info de R1.
  • Cliquer sur Définir.
  • Entrer la formule suivante :
 
Sélectionnez
= Non (EstNul([Info(R1)]))
  • Valider par OK.
  • De retour dans la boite dialogue Filtres, cliquer sur Appliquer.
Vous n'avez plus que les lignes pour lesquelles les infos existent dans R1
  • Cliquer sur Ajouter.
  • Dans "Variables à filtrer", choisir une variable info de R2.
  • Cliquer sur Définir.
  • Entrer la formule :
 
Sélectionnez
=Non (EstNul([Info(R2)]))
  • Valider par OK.
  • OK pour Sortir.

Votre tableau ne contient plus que les lignes communes aux deux requêtes.

Mise en garde : Le choix des variables à filtrer doit se porter sur des objets toujours renseignés.

Créé le 10 avril 2008  par Bruno2r

Le principe de base d'une condition est d'assurer la pertinence des informations recherchées par l'utilisateur.
Il s'agit donc de limiter le nombre de lignes ramenées en définissant les critères de la condition (appelée aussi clause restrictive).

Pour cela, BO met à notre disposition :

  • des opérateurs qui définissent la mise en relation des données avec la/les valeurs de critère.
  • des opérandes qui déterminent le mode d'établissement des valeurs de critère.

Les opérateurs se distinguent de la façon suivante :

Opérateur Permet de retourner les lignes dont les valeurs sont
Egal à égales à la valeur définie par l'opérande
Différent de toutes différentes de la valeur définie par l'opérande
supérieur, supérieur ou égal, inférieur, inférieur ou égal fonction de la relation choisie
Entre comprises entre les valeurs définies par l'opérande 1 et l'opérande 2
Pas entre comprises entre les valeurs définies par l'opérande 1 et l'opérande 2
Dans liste égales à une des valeurs de la liste à définir
Pas dans liste égales à aucune des valeurs de la liste d'opérandes
Renseigné renseignées (c'est-à-dire non null)
Non renseigné non renseignées (c'est-à-dire null)
Correspond au modèle semblables à un modèle de chaine de caractères pré défini. La chaîne de caractères peut être complétée par des caractères joker ? % ? (quelque soient les caractères) et ? _ ? (quelque soit le caractère à cette position).
Différent du modèle différentes de ce modèle de chaine de caractères (usage de "%" et "_" identique)
A la fois égales aux valeurs obtenues à la fois par l'opérande 1 et par l'opérande 2 (correspond à une intersection).
Sauf Moins celles obtenues par l'opérande (correspond à un minus sur 2 requêtes)


Selon l'opérateur choisi, un ou plusieurs opérandes vous seront proposés aux significations suivantes :

Saisir une nouvelle constante Saisir la (les) valeurs auxquelles l'objet sera comparé
Afficher la liste de valeurs Choisir la (les) valeurs parmi la liste de valeurs existantes pour cet objet
Saisir une nouvelle invite Définir le libellé de la question qui sera posée à l'utilisateur à chaque rafraichissement de la requête. L'utilisateur pourra y répondre par une ou des valeurs (selon l'opérateur choisi précédemment) saisie(s) ou choisie(s) dans une liste lorsqu'elle existe.
Afficher une liste d'invites Affiche une invite ou une liste d'invite(s) déjà créée(s) dans le même document quelque soit la requête.
Dans ce cas, la question ne sera posée qu'une fois pour toutes les requêtes du document lors du rafraichissement.
Sélectionner un objet Limiter aux valeurs d'un objet personnel.
Créer une sous requête Limiter aux valeurs rapatriées par une sous requête
Un onglet est créé pour définir la sous requête
Calcul Tenir compte du résultat d'un calcul défini à l'aide d'un assistant.
Sélectionner les résultats de la requête Limiter aux valeurs d'un objet équivalent ramenées par une requête déjà créée dans le même document.
Créé le 14 janvier 2008  par Bruno2r

Les invites sont des variables communes accessibles à tous les fournisseurs de données d'un même document BO.

La preuve en est que si on fait une nouvelle requête et que l'on essaie de créer une invite avec un libellé déjà utilisé, BO refusera de le faire en signalant qu'elle existe déjà.
On peut donc parfaitement poser des invites date1 et date2 dans un SQL à la carte :

 
Sélectionnez
select *
from table1
where date between @variable('date1') and @variable('date2')

Il est conseillé de libeller toujours les invites avec un point d'interrogation ce qui permet de les repérer parmi les autres variables.
De la même façon signaler entre parenthèses le pluriel indique la possibilité de choisir des valeurs multiples dans le cas d'un Dans liste au lieu de Egal à

 
Sélectionnez
@variable('Quelle Année ?')  une seule réponse
@variable('Quelle(s) Année(s) ?') une ou plusieurs réponses
Créé le 4 février 2008  par Bruno2r

Par exemple, comment afficher tous les mois dans un tableau, même s'il n'y a rien eu certains mois ?

A) Soit, il existe quelque part ailleurs dans une table le même champ où cette donnée existe (par exemple peut-être que vous n'avez pas vendu l'article X ce mois-là, mais que si on prend la table avec tous les articles vendus, vous en avez vendu d'autres durant le mois en question).

Dans ce cas-là, faites une seconde requête, avec moins de conditions, qui ramène uniquement la donnée dont vous avez besoin (par exemple, dans la table avec vos ventes, ramenez uniquement le champ de date, sans condition d'objet). Cela va créer dans BO une donnée synchronisée, et dans votre tableau utilisez-la à la place de la donnée créée par votre requête principale.

B) Soit, la donnée manquante n'existe nulle part ailleurs (votre entreprise est fermée en juillet, vous ne vendez jamais rien ce mois-là).

Dans ce cas, créez un faux tableau croisé, mettez en tête de colonne le nom que vous voulez faire apparaître (vos 12 mois par exemple) et dans le corps du tableau, sous chaque colonne, mettez une formule comme :

 
Sélectionnez

=IF([donnée]="tete de colonne";[résultat];0)

Autre solution, si la donnée manquante est dans une liste de valeurs courte, on peut créer une requête SQL pour gérer le problème de la même façon que dans A), par exemple pour les mois :

 
Sélectionnez

SELECT 1 AS Mois FROM dual
UNION ALL
SELECT 2 AS Mois FROM dual
UNION ALL
SELECT 3 AS Mois FROM dual
UNION ALL
SELECT 4 AS Mois FROM dual
UNION ALL
SELECT 5 AS Mois FROM dual
UNION ALL
SELECT 6 AS Mois FROM dual
UNION ALL
SELECT 7 AS Mois FROM dual
UNION ALL
SELECT 8 AS Mois FROM dual
UNION ALL
SELECT 9 AS Mois FROM dual
UNION ALL
SELECT 10 AS Mois FROM dual
UNION ALL
SELECT 11 AS Mois FROM dual
UNION ALL
SELECT 12 AS Mois FROM dual
Créé le 10 juillet 2013  par EmmanuelleC, TomDuBouchon
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2008 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.