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

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

 
OuvrirSommaire DesignerDéfinition des objets

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 :

  1. Définition.
  2. Propriétés.
  3. Paramètres avancées.
  4. Clés (depuis la version XI).
  5. 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.

Créé le 8 décembre 2007  par 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.

 
Sélectionnez
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

 
Sélectionnez
SYSDATE BETWEEN contrat.date_debut AND contrat.date_fin

Filtre : Contrats à la date d'observation

 
Sélectionnez
contrat.date_debut <= @Select(INVITE\Date observation)
AND contrat.date_fin >= @Select(INVITE\Date observation)

Filtre : Contrats dans la période d'observation

 
Sélectionnez
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

 
Sélectionnez
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

 
Sélectionnez
contrat.date_debut <= @Select(INVITE\Date observation)
AND (contrat.date_fin >= @Select(INVITE\Date observation) OR contrat.date_fin IS NULL)
Créé le 10 avril 2008  par 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.

Créé le 10 avril 2008  par 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.

 
Sélectionnez
--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

Select :
Sélectionnez
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')
Créé le 10 avril 2008  par 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)

Select :
Sélectionnez
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.

 
Sélectionnez
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
Créé le 10 avril 2008  par dcollart
  

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.