Modules:Analytics ParentChild/fr
Languages: |
English | Français | Translate this article... |
Contents |
Mapping des colonnes heure/date dans Mondrian
Les colonnes heure/date utilise un mapping spécial dans Analytics. Ceci est dû au fait que vous aurez souvent besoin d'analyser des informations pour une année, un trimestre, un mois ou une combinaison de ces membres dimensionnels. Voir la documentation Mondrian pour plus d'informations.
Openbravo supporte deux façons distinctes pour mapper les colonnes heure/date vers une dimension temporelle:
Table Dimension Temps
Cette approche utilise la table Dimension Temps, avec une colonne spécifique, lors de la génération du mapping Mondrian, pour chaque colonne date/heure, Openbravo vérifiera s'il existe une colonne spéciale se référant à la table de dimension temporelle. Si une telle colonne existe, alors Openbravo utilisera cette colonne et la dimension temporelle qui y fait référence pour créer une dimension temporelle spéciale pour Mondrian.
Ce qui donne pour Mondrian:
<Dimension name="salesOrder-orderDate" type="TimeDimension" caption="Sales Order - Order Date" foreignKey="c_order_id"> <Hierarchy hasAll="true" primaryKey="c_order_id" primaryKeyTable="c_order"> <Join leftKey="em_obanaly_dateordered" rightKey="obanaly_time_dimension_id" rightAlias="alias1_24"> <Table name="c_order" alias="alias1_23"> <SQL>alias1_23.ad_org_id in ('E443A31992CB4635AFCAEABE7183CE85','0','DC206C91AA6A4897B44DA897936E0EC3','7BABA5FF80494CAFA54DEBD22EC46F01', 'BAE22373FEBE4CCCA24517E23F0C8A48','19404EAD144C49A0AF37D54377CF452D','B843C30461EA4501935CB1D125C9C25A','2E60544D37534C0B89E765FE29BC0B43')</SQL> </Table> <Table name="obanaly_time_dimension" alias="alias1_24"/> </Join> <Level name="Year" table="alias1_24" column="theyear" uniqueMembers="true" levelType="TimeYears" type="Numeric"/> <Level name="Quarter" table="alias1_24" column="quarter" uniqueMembers="false" levelType="TimeQuarters" type="Numeric"/> <Level name="Month" table="alias1_24" column="month_of_year" uniqueMembers="false" levelType="TimeMonths" type="Numeric"/> <Level name="Day" table="alias1_24" column="day_of_month" ordinalColumn="yyyymmdd" uniqueMembers="false" levelType="TimeDays" type="Numeric"/> </Hierarchy> </Dimension>
Openbravo mettra à jour automatiquement les colonnes de clé étrangère des dimensions temps en utilisant un traitement spécifique. Voir la section configuration dans cette page wiki pour plus d'information. Il est préférable d'utiliser la référence de Dimension Temps plutôt que la solution fournie ci-dessous (fonctions BDD)
La table de Dimension Temps
- a des entrées pour toutes les dates, ainsi aucun 'trou' dans les membres temps lorsque ils sont utilisés dans des rapports.
- est plus efficace car ne nécessite aucune fonction BDD
Traduire la colonne Date(Heure) en un Membre avec des hiérarchies utilisant des fonctions de BDD
Cette approche utilise des fonctions de bases de données pour traduire une colonne date/heure en année, trimestre et mois, ceci est fait automatiquement par Openbravo. Voir ici un exemple de mapping généré.
<Dimension name="salesOrder-accountingDate" caption="Sales Order - Accounting Date" foreignKey="c_order_id"> <Hierarchy hasAll="true" primaryKey="c_order_id" primaryKeyTable="c_order"> <Table name="c_order" alias="alias1_12"/> <Level name="Year" table="alias1_12" column="dateacct" uniqueMembers="true" levelType="TimeYears" type="Numeric"> <KeyExpression> <SQL>extract(year from alias1_12.dateacct)</SQL> </KeyExpression> </Level> <Level name="quarter" column="dateacct" table="alias1_12" uniqueMembers="false" levelType="TimeQuarters" type="Numeric"> <KeyExpression> <SQL>extract(quarter from alias1_12.dateacct)</SQL> </KeyExpression> </Level> <Level name="month" table="alias1_12" column="dateacct" uniqueMembers="false" type="Numeric" levelType="TimeMonths"> <KeyExpression> <SQL>extract(month from alias1_12.dateacct)</SQL> </KeyExpression> </Level> <Level name="day" table="alias1_12" column="dateacct" ordinalColumn="dateacct" uniqueMembers="false" type="Numeric" levelType="TimeDays"> <KeyExpression> <SQL>extract(day from alias1_12.dateacct)</SQL> </KeyExpression> </Level> </Hierarchy> </Dimension>
Relations Parent - Enfant et Mapping vers Mondrian
Les hiérarchies parent - enfant sont importantes pour Analytics car elles permettent l’agrégation de Mesures à travers des hiérarchies métier.
Openbravo permet de définir des structures hiérarchiques à travers le concept d'arbre standard Openbravo.
Dans le core Openbravo les entités suivantes peuvent être organisées en structure arborescentes:
- Organisation
- Catégorie de tiers
- Catégorie d'articles
- Projet
- Comptes (Structures comptables)
Dans Mondrian il est possible de modéliser explicitement des hiérarchies parent-enfant.
Openbravo Analytics utilise la structure arborescente Openbravo et mappe ces structures vers Mondrian de manière générique. On peut visualiser ceci dans la vue générique OB Analytics affichée ci-dessous.
Agréger des informations à travers des hiérarchies parent-enfant multi-niveaux peut s'avérer être une opération intense au niveau des performances. Pour optimiser cela, Mondrian a le concept de tables hiérarchiques. Openbravo Analytics implémente les tables hiérarchiques Mondrian à travers sa propre Table arborescente. Cette table est automatiquement mise à jour quand la table arborescente d'Openbravo est mise à jour.
Relations Parent-Enfant: Arborescence ou colonne Parent plus efficace
Une table arborescente possède des avantages pour agréger les informations dans des hiérarchies parent - enfant. Quand des requêtes SQL directes sont lancées, il est cependant mieux (d'un point de vue performance) d'avoir la colonne parent directement dans la table entité. Openbravo supporte ceci à travers la colonne spéciale d'Id du parent. Lors de la construction de la table arborescente Openbravo détectera si l'entité a une colonne/propriété 'obanalyTreeparentid'. C'est une colonne dont le nom finit par 'obanalyTreeparentid'. Si l'entité possède une telle colonne, alors cette colonne sera mise à jour avec l'id du parent déterminée à partir de l'arbre et cette colonne parent sera utilisée dans le mapping Mondrian.
Classement dans la relation Parent-Enfant: la Colonne Ordonnancement
Les entités qui ne font pas partie d'un arbre parent-enfant seront triées dans chaque niveau en utilisant la première colonne identifiant.
Si une entité est une partie de l'arbre parent-enfant et que le niveau est mappé en utilisant cet arbre (dans le cas où ce n'est pas un mapping en flocon voir les limitations dans le chapitre ci-dessous), alors l'ordre à l'intérieur de l'arbre est utilisée. L'intégration Mondrian - Openbravo essaiera de maintenir l'ordre défini dans l'arbre (lors de l'ajout d'une instance à un arbre, en utilisant le glisser-déposer). Cet tri d'arbre est stocké dans l'enregistrement de l'entité elle-même, utilisant une colonne avec un nom prédéfini. Pour conserver l'ordre dans l'arbre de l'entité la table/entité a besoin d'avoir une colonne avec un nom qui se termine par la chaîne de caractères obanalyTreeordinal. Le module Analytics mettra automatiquement à jour cette colonne de tri de l'arbre quand une modification est détectée dans la table ad_tree.