4D Chart

Jean-Yves FOCK-HOON

Faire des graphes est très aisé, mais comment faire des graphiques par programmation ? Trois commandes vous permettent cela : ch_Tableaux vers graphe, ch_Donnees vers graphe, ch_Selection vers graphe. Le choix de la commande est lié au type de données à manipuler. Quelle commande choisir ? ♪

- Titre : 4D Chart

- Auteur : Jean-Yves FOCK-HOON

- Parution : 1 novembre 2004

- Licence : Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.

Sommaire

- I. Résumé

- II. Introduction

- III. ch_Tableaux vers graphe

- IV. ch_donnees vers graphe

- V. ch_Selection vers graphe

- VI. La base de démonstration

- VII. Conclusion

I - Résumé

Le plugin 4D Chart n'en est plus vraiment un ! Ce qu'il fallait acheter séparément est désormais intégré depuis 4D 6.0. 4D Chart est un outil pour présenter graphiquement vos données sous forme de graphes. Cette Note technique vous montre comment générer vos graphes au sein même de 4D.

II - Introduction

A priori, vous savez déjà tous comment utiliser 4D Chart en mode utilisation ou dans une zone de plugin sur un formulaire. Tout ce que vous avez à faire est de sélectionner le type de graphe, les champs ou les formules à utiliser. Mais comment faire des graphiques par programmation ? Quatre commandes vous permettent cela : ch_Tableaux vers graphe, ch_Donnees vers graphe, ch_Selection vers graphe (https://4d.developpez.com/documentation/4DDoc2004/), et la commande GRAPHE, qui est une commande devenue obsolète et donc nous ne traiterons pas ici.

Si donc trois commandes peuvent être utilisées pour créer un graphe, elles n'en sont évidemment pas pour autant identiques. Voyons comment déterminer nos choix.

III - ch_Tableaux vers graphe

Pour générer un graphe à partir d'un tableau, vous aurez recours à ch_Tableaux vers graphe.

https://4d.developpez.com/documentation/4DDoc2004/CMF/CMF14526.HTM

L'idée est simple : si vous avez X valeurs en abscisse et Y valeurs en ordonnées vous devez générer une matrice à Z valeurs (où Z = X*Y) pour avoir votre graphe. Mais parfois les commandes les plus évidentes peuvent devenir les plus difficiles à comprendre.

Prenons un exemple : un commercial a vendu un certain nombre de voitures dans l'année. Nous voulons voir ses ventes mensuelles. Supposons que nous ayons 55 factures, nous devons les éclater dans douze éléments d'un tableau 4D où chaque élément figure un mois de l'année. Le tableau construit, nous connaissons le nombre de véhicules vendus par mois et nous pouvons dessiner le graphe. Nous avons le nom du vendeur, les douze mois et le contenu de chacun de ces mois. Dans la mesure où nous avons déjà calculé notre résultat mois par mois, la façon la plus directe de générer le graphe est la commande ch_Tableaux vers graphe.

ch_Tableaux vers graphe a besoin de trois tableaux :

- Valeur en X (catégories)  : un tableau à 1 élément soit ici le nom du commercial ;

- Valeur en Y (séries)  : un tableau de douze éléments figurant les mois ;

- Valeur en Z (valeurs) : un tableau de douze éléments contenant les résultats.

Vous n'aurez pas manqué de noter que le tableau Z contient douze valeurs numériques soit la taille du tableau X multipliée par celle du tableau Y.

Passons à une hypothèse un peu plus compliquée. Imaginons que notre garage ait eu non pas un, mais cinq vendeurs. Sur la base de toutes les factures, nous devons les ventiler par vendeur et par mois.

Alors que dans notre premier exemple nous avons utilisé un tableau de douze éléments, ici nous emploierons un tableau à deux dimensions : 5*12. Cinq éléments pour les vendeurs et douze pour les mois.

Tout comme dans le premier exemple, trois tableaux :

- Valeur en X : un tableau de cinq éléments pour y mettre les commerciaux ;

- Valeur en Y : un tableau de douze éléments figurant les mois ;

- Valeur en Z : un tableau à deux dimensions 5*12 contenant les résultats.

Remarquez que le tableau à deux dimensions contient 60 valeurs, soit le produit du nombre de commercial par le nombre de mois. Et là encore, ch_Tableaux vers graphe est la commande idéale pour ce que nous voulons faire.

En clair, si vous êtes dans la situation où vous avez à calculer votre résultat, par exemple une somme, un calcul ou ce que vous voulez, alors stockez-les dans un tableau et tirez parti de ch_Tableaux vers graphe. Facile non ? Pensez juste à faire correspondre le tableau des valeurs en Z soit X*Y = Z.

Dans la base exemple, sélectionnez le menu ch_Tableaux vers graphe pour voir un graphe en 3D.

Note : remarquez que le tableau Z ne pas doit être à deux dimensions. Vous devez le convertir en un seul tableau à une dimension contenant tous les résultats. Les premiers éléments de ce tableau converti contiendront les valeurs de la première colonne du tableau à deux dimensions alors que les éléments suivants contiendront les colonnes suivantes.

Voici un exemple :

notre tableau à deux dimensions « tableau (3 ; 4) » et le tableau converti correspondant « rValeur » avec nos douze éléments :

1. tableau{1}{1}->rValeur{1};

2. tableau{1}{2}->rValeur{2};

3. tableau{1}{3}->rValeur{3};

4. tableau{1}{4}->rValeur{4};

5. tableau{2}{1}->rValeur{5};

6. tableau{2}{2}->rValeur{6};

7. tableau{2}{3}->rValeur{7};

8. tableau{2}{4}->rValeur{8};

9. tableau{3}{1}->rValeur{9};

10. tableau{3}{2}->rValeur{10};

11. tableau{3}{3}->rValeur{11};

12. tableau{3}{4}->rValeur{12};

IV - ch_donnees vers graphe

Parfois vos données sont déjà toutes prêtes dans vos enregistrements et il n'y a rien à calculer. Vous avez deux champs et vous aimeriez générer un graphe sur ces deux champs. La commande qui convient alors est ch_donnees vers graphe.

https://4d.developpez.com/documentation/4DDoc2004/CMF/CMF14527.HTM

Pour revenir à notre exemple précédent, considérons que nous voulions détailler le nombre de véhicules par marque et par vendeur. Marques et quantités sont des données présentes dans la table [Ventes]. Comme nous l'avons déjà vu, nous pourrions aussi mettre ces données dans un tableau. Mais dupliquer les données dans des tableaux peut inutilement, si ces tableaux sont de taille importante, consommer de la mémoire vive en grande quantité.

ch_Donnees vers graphe a besoin de trois types d'informations :

- Valeur en X : l'ID du champ pour la catégorie ;

- Valeur en Y : l'ID du champ pour la série ;

- Valeur en Z : l'ID du champ pour la valeur.

Dans notre cas, la marque du véhicule sera la catégorie, les noms des vendeurs seront la série et les quantités seront les valeurs.

Ainsi sur la sélection courante, il est aisé de construire le graphe sans avoir recours aux tableaux.

ch_Donnees vers graphe a un autre intérêt. Nous l'avons vu avec ch_Tableaux vers graphe, il fallait ventiler nos valeurs dans des tableaux, ce qui signifie que, techniquement, nous devions créer un nouvel élément pour chaque enregistrement.

Dans la mesure où certains éléments peuvent être la réplique d'autres, nous les groupons et réduisons le nombre de colonnes. Voilà pourquoi nous bouclons sur la sélection pour déterminer où cumuler les valeurs. Avec ch_Donnees vers graphe nous pouvons passer un paramètre qui dira à 4D s'il doit ou non grouper nos valeurs. Avec cent enregistrements, nous pouvons nous attendre à avoir un graphe de cent colonnes (1 colonne égale 1 enregistrement) ou alors de quelques colonnes si nous demandons à grouper certaines catégories.

Dans la base exemple, sélectionnez le menu ch_Donnees vers graphe pour voir un graphe en colonnes avec des valeurs groupées.

V - ch_Selection vers graphe

Parfois vos graphes sont le fruit de valeurs issues de divers champs. Dans ce cas-là, vous gagnerez à utiliser la commande ch_Selection vers graphe.

https://4d.developpez.com/documentation/4DDoc2004/CMF/CMF14525.HTM

Dans notre nouvel exemple, la table des commerciaux a six autres champs qui contiennent une répartition des véhicules vendus par catégorie. Affichons un graphe de ces valeurs. ch_Tableaux vers graphe est encore possible. Nous pouvons analyser la sélection, récupérer les valeurs et les cumuler dans des tableaux pour finir par notre graphe… Ou bien utiliser ch_Selection vers graphe !

ch_Selection vers graphe a besoin de deux types d'informations :

- Valeur en X : l'ID du champ pour la catégorie (dans notre exemple : Employés) ;

- Valeur en Z : un tableau qui contient les ID des champs sera utilisé pour les séries (les champs 3, 4, 5, 6 et 7 de la table 2).

Les valeurs en Y peuvent être définies si plusieurs valeurs ont été définies pour Z.

Cela signifie que cette commande est parfaite pour des graphiques en 2D. Cependant dans ce cas le tableau fourni pour Z ne contiendra qu'un élément, le n° du champ à utiliser.

Cette commande comporte un paramètre qui permet, tout comme ch_Donnees vers graphe, de grouper par catégories. Alors même si elles se ressemblent, ces deux commandes ont tout de même leurs différences.

Nous l'avons vu plus avant, ch_Donnees vers graphe requiert trois champs pour X, Y et Z. Les valeurs définies en Y seront utilisées pour définir les séries. Si votre sélection d'enregistrements comporte jusqu'à huit valeurs différentes, votre graphe aura huit valeurs pour les séries. Avec ch_Selection vers graphe Y peut seulement être défini par le nombre de champs Z que vous donnez. Les valeurs définies pour Y seront le nom des champs définis pour Z.

Dans la base exemple, sélectionnez le menu ch_Donnees vers graphe pour voir un graphe en colonne avec des valeurs groupées.

VI - La base de démonstration

Le menu démonstration affiche un dialogue dans lequel vous demandez un graphique créé à partir d'une de ces trois commandes.

Téléchargez la base :

Base pour Windows

Base pour Mac OS

VII - Conclusion

Faire des graphes est très aisé, mais peut-être ne savez-vous pas comment vous y prendre. Le choix de la commande est lié au type de données à manipuler.

ch_Donnees vers graphe est une manière très rapide pour afficher vos données. La plupart du temps vous l'utiliserez pour des données stockées dans trois champs de la table courante.

Par exemple si une table [Clients] contient, en plus des coordonnées du client, un champ récapitulant la totalité de ses achats, vous pouvez utilisez ch_Donnees vers graphe pour générer un graphe montrant le total des ventes par ville ou par pays.

ch_Selection vers graphe sera utilisée pour des données stockées dans différents champs. Par exemple la table [Clients] contient dans trois champs la somme de ses factures acquittées, la somme de celles non encore payées et la somme des factures payables par un tiers payeur. Vous pouvez utiliser cette commande pour afficher ces montants par client.

Si vous avez besoin de plus de calcul, si vous avez besoin de travailler sur des tables liées, votre choix sera la construction de tableaux et donc d'utiliser la commande ch_Tableaux vers graphe.