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

Nombre d'auteurs : 15, nombre de questions : 101, dernière mise à jour : 17 décembre 2014  Ajouter une question

 

Cette F.A.Q. a été réalisée à partir des questions fréquemment posées sur le forum BO de www.developpez.com et de l'expérience personnelle des auteurs.

Elle pourra traiter de tout type de questions portant sur les technologies BusinessObjects. Nous espérons que cette F.A.Q. saura répondre à un maximum de vos questions et vous souhaitons une bonne lecture.

Un grand merci à Ricky81 pour sa veille technique, et ClaudeLELOUP pour sa relecture avisée.

L'équipe BO de Developpez.com


Sommaire DesignerDéfinition des objets (5)
précédent sommaire suivant
 

Pour créer un objet il faut faire « click droit / objet » sur une classe dans la fenêtre de gauche du designer « classe et objets ».

Ensuite dans la fenêtre des « propriétés de l'objet, il existe 3 / 5 onglets selon la version de BO :

  • Définition.
  • Propriétés.
  • Paramètres avancées.
  • Clés (depuis la version XI).
  • Sources d'information (depuis la version XI).


1 - Définition : dans cet onglet vous allez définir l'objet selon 5 champs :

  • Le nom : c'est le nom de l'objet que l'utilisateur visualisera. Le nombre de caractères est limité à 35 en V5, mais n'est plus limité en XI.
  • Le type : il existe 4 types (date, alphanumérique, numérique, texte long), ce type doit obligatoirement correspondre au type du champ interrogé dans la base de données (clause SELECT).
  • La description : celle-ci est limitée environ à 30 000 caractères et permet à l'utilisateur lors de la création d'une requête d'avoir des détails sur l'objet utilisé.
  • Le SELECT : cela correspond à la clause « SELECT » ajoutée au SQL lors de l'utilisation de cet objet dans une requête BO.
  • Le WHERE : cela correspond à la clause WHERE ajoutée au SQL lors de l'utilisation de cet objet dans une requête BO.
  • Les tables : ce bouton permet de choisir parmi les tables supplémentaires de l'univers à ajouter à la requête SQL lors de l'utilisation de cet objet dans une requête BO.


2 - Propriétés : dans cet onglet on définit :

  • le type de l'objet : Dimension (en forme de cube bleu), Information (en forme de pyramide verte) et Indicateur (en forme de sphère rose). (voir " Pourquoi trois types d'objets dans les univers ?").
  • la liste de valeurs de l'objet : ce sont les valeurs associées à cet objet qui seront affichées dans l'éditeur de requête, notamment lors de l'utilisation d'invites. Il y a également diverses options relatives à cette liste (actualisation automatique, export avec l'univers, affichage hiérarchique, droit de modification à l'utilisateur).


3 - Paramètres avancés : dans cet onglet on définit :

  • le niveau de sécurité : public, contrôlé, restreint, confidentiel ou privé.
  • le mode d'utilisation : au niveau de la requête, dans résultat, conditions, tri.
  • le format de la base de données.


4 - Clés : cet onglet permet de définir une clé primaire et une clé étrangère pour l'objet

5 - Sources d'information : permet de notifier des informations sur l'objet (informations techniques, mise en correspondance et enregistrement en ligne)

Une fois défini, on peut analyser l'objet grâce au bouton « analyser » afin de vérifier si le SQL généré est OK.

Mis à jour le 8 décembre 2007 bastoonet

Les filtres proposés dans la suite du message permettent de filtrer les contrats de travail d'une société.
Pour des raisons de clarté la table des contrats utilisée est simplifiée.

Code sql : Sélectionner tout
1
2
3
4
5
6
CREATE TABLE contrat 
( 
    id_contrat  NUMBER(3) PRIMARY KEY, 
    date_debut  DATE      NOT NULL, 
    date_fin    DATE      NOT NULL 
);
Etape 1 : Création des invites types

Les invites types pourront être réutilisés plusieurs fois sans devoir être réécrits à chaque utilisation et simplifient donc la maintenance en cas de modification.

Dans une classe INVITE, créer les objets suivants

Nom : Date observation
Qualification : Dimension
Type : Date
Description : Date d'observation utilisée
Select : @Prompt('Date observation ?','D',,MONO,FREE)

Nom : Date début observation
Qualification : Dimension
Type : Date
Description : Date de début de la période d'observation utilisée
Select : @Prompt('Date début observation ?','D',,MONO,FREE)

Nom : Date fin observation
Qualification : Dimension
Type : Date
Description : Date de fin de la période d'observation utilisée
Select : @Prompt('Date fin observation ?','D',,MONO,FREE)

Etape 2 : Création des filtres

Filtre : Contrats à la date du jour

Code sql : Sélectionner tout
SYSDATE BETWEEN contrat.date_debut AND contrat.date_fin
Filtre : Contrats à la date d'observation

Code : Sélectionner tout
1
2
contrat.date_debut <= @Select(INVITE\Date observation) 
AND contrat.date_fin >= @Select(INVITE\Date observation)
Filtre : Contrats dans la période d'observation

Code : Sélectionner tout
1
2
contrat.date_debut < = @Select(INVITE\Date fin observation) 
AND contrat.date_fin >= @Select(INVITE\Date début observation)
ATTENTION !! Dans le cas où les dates peuvent être à NULL, alors les filtres doivent être adaptés car l'opérateur BETWEEN ne fonctionne pas avec une expression NULL.
Dans notre exemple, si la date de fin des contrats peut être NULL, alors le filtre Contrats à la date d'observation devient

Code : Sélectionner tout
1
2
contrat.date_debut <= @Select(INVITE\Date observation) 
AND NVL(contrat.date_fin,TO_DATE('31/12/9999','DD/MM/YYYY')) >= @Select(INVITE\Date observation)
ou

Code : Sélectionner tout
1
2
contrat.date_debut <= @Select(INVITE\Date observation) 
AND (contrat.date_fin >= @Select(INVITE\Date observation) OR contrat.date_fin IS NULL)

Mis à jour le 10 avril 2008 dcollart

Réduire le nombre de lignes retournées par la base de données

Lorsque l'utilisateur exécute une requête, BusinessObjects génère le SQL de cette requête à partir des objets et filtres choisis par l'utilisateur, des jointures et contextes définis dans l'univers et aussi des différentes conditions posées par l'utilisateur. Le SQL généré est ensuite soumis à la base de données qui renvoie à BusinessObjects les différentes lignes résultant de la requête. Ces lignes constituent la source de données de BusinessObjects, source à partir de laquelle les rapports sont constitués.

Si la base de données renvoie moins de lignes alors

  • le nombre de données transférées sur le réseau est réduit
  • la source de données de BusinessObjects contient moins de lignes
  • BusinessObjects doit traiter moins de lignes pour la constitution des rapports
  • entraînant une réduction du temps d'exécution.

Comment réduire le nombre de lignes retournées par la base données ?
  • En privilégiant les conditions dans les requêtes aux filtres dans les rapports
  • En optimisant les indicateurs dans l'univers

Comment optimiser les indicateurs dans l'univers ?
Les indicateurs sont très souvent associés à une fonction pour l'agrégation des données dans BusinessObjects : Max, Min, Moyenne, Nombre ou Somme.
Optimiser les indicateurs consiste à les associer à des fonctions d'agrégation SQL pour qu'une première agrégation des données soit réalisée par le SGBD.
Les fonctions d'agrégation SQL correspondant aux fonctions d'agrégation BusinessObjects Max, Min, Moyenne, Nombre ou Somme sont respectivement MAX, MIN, AVG, COUNT et SUM.
Une seconde agrégation est ensuite réalisée par BusinessObjects lorsque l'utilisateur décide de ne pas utiliser toutes les dimensions présente dans la source de données.

Exemple :
Notre exemple utilisera la base données simplifiée des restaurants d'un groupe international.
Les restaurants sont répartis par spécialité, par ville et par pays.

Pays Ville Spécialité Nombre
FRANCE LILLE FRANCAISE 2
FRANCE LILLE TURQUE 1
FRANCE PARIS CHINOISE 2
FRANCE PARIS FRANCAISE 10
FRANCE PARIS ITALIENNE 5
FRANCE PARIS TURQUE 3
FRANCE TOULOUSE CHINOISE 2
FRANCE TOULOUSE ITALIENNE 2
FRANCE TOULOUSE TURQUE 1
ITALIE ROME ITALIENNE 7
USA NEW YORK CHINOISE 2
USA NEW YORK FRANCAISE 5
USA NEW YORK ITALIENNE 4
USA WASHINGTON CHINOISE 3
USA WASHINGTON FRANCAISE 6
USA WASHINGTON ITALIENNE 4
USA WASHINGTON TURQUE 3

Pour n'afficher que la répartition des restaurants par pays, l'utilisateur n'utilise que les objets Pays et Nombre.
Le résultat obtenu dans le rapport est le suivant :

Pays Nombre
FRANCE 28
ITALIE 7
USA 27

Lorsque l'indicateur Nombre est associé uniquement à la fonction d'agrégation Somme() de BusinessObjects, alors la source de données est la suivante :

FRANCE 10
FRANCE 3
FRANCE 5
FRANCE 2
FRANCE 2
FRANCE 1
FRANCE 1
FRANCE 2
FRANCE 2
USA 5
USA 4
USA 2
USA 6
USA 3
USA 4
USA 3
... ...
ITALIE 7

17 lignes retournées par le SGBD pour 3 lignes affichées dans le rapport BusinessObjects.

Lorsque que l'indicateur Nombre est associé à la fonction d'agrégation Somme de BusinessObjects mais aussi la fonction d'agrégation SQL SUM (ajout de SUM dans le Select de l'objet) alors la source de données est la suivante :

Pays Nombre
FRANCE 28
ITALIE 7
USA 27

3 lignes retournées par le SGBD pour 3 lignes affichées dans le rapport BusinessObjects.
Pour afficher la répartition des restaurants par pays, ville et spécialité l'utilisateur utilise maintenant les objets Pays, Ville, Spécialité et Nombre

Le résultat obtenus dans le rapport est le suivant

Pays Ville Spécialité Nombre
FRANCE LILLE FRANCAISE 2
FRANCE LILLE TURQUE 1
FRANCE PARIS CHINOISE 2
FRANCE PARIS FRANCAISE 10
FRANCE PARIS ITALIENNE 5
FRANCE PARIS TURQUE 3
FRANCE TOULOUSE CHINOISE 2
FRANCE TOULOUSE ITALIENNE 2
FRANCE TOULOUSE TURQUE 1
ITALIE ROME ITALIENNE 7
USA NEW YORK CHINOISE 2
USA NEW YORK FRANCAISE 5
USA NEW YORK ITALIENNE 4
USA WASHINGTON CHINOISE 3
USA WASHINGTON FRANCAISE 6
USA WASHINGTON ITALIENNE 4
USA WASHINGTON TURQUE 3
       

La source de données contient les mêmes lignes que le rapport et la fonction d'agrégation SQL n'a donc pas d'effet puisque que la requête n'a pas dimension sur laquelle faire de groupements. Par contre, dans le rapport si l'utilisateur décide ne plus afficher la dimension Spécialité alors c'est la fonction d'agrégation Somme de BusinessObjects qui réalise l'agrégation des données. Les données sont agrégées dans le rapport et non pas dans la source de données.

Pays. Ville Nombre
FRANCE LILLE 3
FRANCE PARIS 20
FRANCE TOULOUSE 5
ITALIE ROME 7
USA NEW YORK 11
USA WASHINGTON 16
Remarque importante : Les fonctions d'agrégation SUM, AVG, MAX ou MIN renvoient le marqueur NULL lorsqu'il n'y a aucune valeur dans la colonne, contrairement à COUNT qui renvoie zéro.

Mis à jour le 10 avril 2008 dcollart

Méthode 1 : Utiliser les règles de détermination des années bissextiles

Une année est bissextile lorsqu'elle est

  • Une année est bissextile lorsqu'elle est
  • soit un multiple de 400
  • soit un multiple de 4 mais pas un multiple de 100

Méthode 2 : Compter le nombre de jours dans l'année
Une année bissextile comporte 366 jours tandis qu'une année non bissextile n'en comporte que 365.

Méthode 3 : Déterminer le dernier jour du mois de février
Dans une année bissextile le mois de février comporte 29 jours tandis que dans une année non bissextile il n'en comporte que 28

Implémentation SQL

La requête suivante permet de lister les année 1900 à 3000 et détermine si elles sont bissextiles ou pas en utilisant les 3 méthodes.

Code sql : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
--Environnement d'exécution : Oracle 9i 
SELECT annee, 
       CASE WHEN MOD(annee,400) = 0 OR (MOD(annee,4) = 0 AND MOD(annee,100) <>> 0) 
            THEN 'bissextile' END AS methode1, 
       CASE WHEN   TO_DATE('31/12/' || TO_CHAR(annee), 'DD/MM/YYYY') 
                 - TO_DATE('01/01/' || TO_CHAR(annee), 'DD/MM/YYYY') + 1 = 366 
            THEN 'bissextile' END AS methode2, 
       CASE WHEN  EXTRACT(DAY FROM LAST_DAY(TO_DATE('02/' || TO_CHAR(annee), 'MM/YYYY'))) = 29 
            THEN 'bissextile' END AS methode3 
  FROM 
     ( 
         SELECT 1900 + (ROWNUM - 1) AS annee 
           FROM dual  
        CONNECT BY 1900 + (ROWNUM - 1) <= 3000 
     );
Extrait du résultat obtenu

ANNEE METHODE1 METHODE2 METHODE3
1900      
1901      
1902      
1903      
1904 bissextile bissextile bissextile
1905      
1906      
1907      
1908 bissextile bissextile bissextile
1909      

Implémentation dans un univers BusinessObjects

On souhaite déterminer si l'année de naissance des agents d'une société est bissextile ou pas.
La date de naissance des agents est stockée dans le champs date_naissance de la table agent de la base de données (dans notre exemple Oracle 9i)

Dans la classe AGENT de notre univers TEST

Nom : Année de naissance
Qualification : Dimension
Type : Numérique
Description : Année de naissance de l'agent
Select : EXTRACT(YEAR FROM agent.date_naissance)

Nom : Année Bissextile
Qualification : Information
Dimension associée : Année de naissance (AGENT)
Type : Alphanumérique
Description : Indique si l'année de naissance de l'agent est une année bissextile
oui : l'année est bissextile
non : l'année n'est pas bissextile

Code sql : Sélectionner tout
Decode ( CASE WHEN MOD(@Select(AGENT\Année de naissance),400) = 0 OR (MOD(@Select(AGENT\Année de naissance),4) = 0 AND MOD(@Select(AGENT\Année de naissance),100) <> 0) THEN 'bissextile' END, NULL, 'non', 'oui')

Mis à jour le 10 avril 2008 dcollart

Pour calculer l'âge d'un individu, il suffit de compter le nombre d'années entières entre la date de naissance et la date du jour.

Implémentation dans un univers BusinessObjects

La date de naissance des individus est stockée dans le champs date_naissance de la table individu de la base de données (dans notre exemple Oracle 9i).

Dans la classe INDIVIDU de notre univers TEST...

Nom : Date de naissance
Qualification : Dimension
Type : Date
Description : Date de naissance de l'individu
Select : individu.date_naissance

Nom : Age
Qualification : Dimension
Type : Numérique
Description : Age de l'individu à la date du jour (en nombre d'années entières)

Code sql : Sélectionner tout
FLOOR(MONTHS_BETWEEN(SYSDATE, @Select(INDIVIDU\Date de naissance))/12)
Dans l'hypothèse où certaines dates de naissance pourraient être non renseignées ou supérieures à la date du jour, le Select peut être légèrement modifié pour ne pas obtenir des âges négatifs.

Code sql : Sélectionner tout
1
2
3
4
5
CASE WHEN @Select(INDIVIDU\Date de naissance) IS NOT NULL 
          AND @Select(INDIVIDU\Date de naissance) <= SYSDATE 
     THEN FLOOR(MONTHS_BETWEEN(SYSDATE, @Select(INDIVIDU\Date de naissance))/12) 
     ELSE 0 
END

Mis à jour le 10 avril 2008 dcollart

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

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 © 2016 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.

 
Contacter le responsable de la rubrique Business Intelligence