{"id":17347,"date":"2024-06-14T18:00:00","date_gmt":"2024-06-14T18:00:00","guid":{"rendered":"https:\/\/www.directimpactsolutions.com\/?p=17347"},"modified":"2024-06-13T22:39:37","modified_gmt":"2024-06-13T22:39:37","slug":"tableaux-croises-dynamiques","status":"publish","type":"post","link":"https:\/\/www.directimpactsolutions.com\/fr\/tableaux-croises-dynamiques\/","title":{"rendered":"Pour des tableaux crois\u00e9s (vraiment) dynamiques"},"content":{"rendered":"<p>Nous sommes des \u00ab&nbsp;Problem Solvers&nbsp;\u00bb et nous utilisons notre outil Low-Code pr\u00e9f\u00e9r\u00e9 (<a href=\"https:\/\/www.directimpactsolutions.com\/fr\/claris-filemaker\/\">FileMaker<\/a>) pour construire des solutions sur-mesure pour nos clients. La finalit\u00e9 la plus \u00e9vidente est d\u2019optimiser et de faciliter les processus de l\u2019entreprise en automatisant des t\u00e2ches qui vont, elles-m\u00eames, produire des donn\u00e9es. Or, ces donn\u00e9es brutes refl\u00e8tent, par d\u00e9finition, l\u2019activit\u00e9 de l\u2019entreprise. Leur analyse permettra aux dirigeants d\u2019avoir une vue fid\u00e8le de celles-ci et aidera \u00e0 prendre les meilleures d\u00e9cisions.<\/p><p>Probl\u00e8me&nbsp;: les donn\u00e9es en elle-m\u00eame sont illisibles en l\u2019\u00e9tat et n\u00e9cessitent d\u2019\u00eatre retravaill\u00e9es, regroup\u00e9es, s\u00e9lectionn\u00e9es, pour en tirer l\u2019information pertinente souhait\u00e9e. C\u2019est ici qu\u2019intervient la partie \u00ab&nbsp;statistiques&nbsp;\u00bb ou \u00ab&nbsp;tableau de bord&nbsp;\u00bb que va nous demander notre client.<\/p><p>Or, pour traiter des informations, il faut par d\u00e9finition qu\u2019elles existent (nous n\u2019h\u00e9siterons pas \u00e0 ouvrir autant de portes ouvertes que n\u00e9cessaire dans cet article&nbsp;!), et l\u2019\u00e9laboration de tableau de bord peut repr\u00e9senter un certain temps, voire un temps certain. Voici pourquoi r\u00e9aliser un tableau de bord peut s\u2019av\u00e9rer le parent pauvre de nos projets par manque du budget n\u00e9cessaire.<\/p><p>En \u00e9tablissant la liste des m\u00e9thodes \u00e0 notre disposition nous verrons que l\u2019une d\u2019elles poss\u00e8de quelques avantages non n\u00e9gligeables, et dont les inconv\u00e9nients pourraient, en outre, peut-\u00eatre \u00eatre surmont\u00e9s.<\/p><p>Imaginons que nous avons une solution&nbsp;produisant des factures dans une table \u00e9ponyme&nbsp;:<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"766\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/b483f38c-0bc5-4b38-8203-333916d358da-1024x766.png\" alt=\"\" class=\"wp-image-17348\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/b483f38c-0bc5-4b38-8203-333916d358da-1024x766.png 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/b483f38c-0bc5-4b38-8203-333916d358da-300x224.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/b483f38c-0bc5-4b38-8203-333916d358da-768x574.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/b483f38c-0bc5-4b38-8203-333916d358da-600x449.png 600w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/b483f38c-0bc5-4b38-8203-333916d358da.png 1385w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>Et que sur la base de de ces factures, notre client nous fasse la demande, sommes-toutes l\u00e9gitime, de savoir combien il a factur\u00e9 par ann\u00e9e depuis l\u2019installation de son logiciel en 2019.<\/p><h1 class=\"wp-block-heading\" id=\"1.-Discours-sur-les-m\u00e9thodes\">1. Discours sur les m\u00e9thodes<\/h1><p>Sans pr\u00e9tendre \u00e0 l\u2019exhaustivit\u00e9, nous pourrions classer les m\u00e9thodes utilisables en 4 familles&nbsp;: les exports excel, l\u2019utilisation des sous r\u00e9capitulatifs dans des rapports, les m\u00e9thodes plus complexes et la confection d\u2019un tableau HTML.<\/p><h2 class=\"wp-block-heading\" id=\"A.------L\u2019export-Excel\">A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;L\u2019export Excel<\/h2><p>M\u00e9thode pris\u00e9e des amoureux d\u2019Excel qui vont illico comprendre qu\u2019un export est possible sur la plateforme qu\u2019ils ma\u00eetrisent, l\u2019export est, reconnaissons-le, une m\u00e9thode assez rapide et peu co\u00fbteuse pour, en quelques minutes, arriver \u00e0 un tableau crois\u00e9 dynamique r\u00e9pondant \u00e0 notre mission.<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"888\" height=\"204\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/2385681e-a1a8-4119-91e9-f30e249776d8.png\" alt=\"\" class=\"wp-image-17351\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/2385681e-a1a8-4119-91e9-f30e249776d8.png 888w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/2385681e-a1a8-4119-91e9-f30e249776d8-300x69.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/2385681e-a1a8-4119-91e9-f30e249776d8-768x176.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/2385681e-a1a8-4119-91e9-f30e249776d8-600x138.png 600w\" sizes=\"auto, (max-width: 888px) 100vw, 888px\" \/><\/figure><p>Son inconv\u00e9nient principal n\u2019est pas neutre: nous voil\u00e0 sortis de FileMaker, travaillons localement sur notre tableau non partag\u00e9 et surtout, la moindre modification des donn\u00e9es am\u00e8ne \u00e0 refaire syst\u00e9matiquement les m\u00eames op\u00e9rations. Le taylorisme \u00e9tant d\u2019un autre temps, nous rappellerons \u00e0 notre client que son temps est pr\u00e9cieux et envisagerons d\u2019autres m\u00e9thodes.<\/p><h2 class=\"wp-block-heading\" id=\"B.-------Les-\u00ab-sous-r\u00e9capitulatifs-apr\u00e8s-tri-sur-\u00bb\">B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Les \u00ab&nbsp;sous r\u00e9capitulatifs apr\u00e8s tri sur&nbsp;\u00bb<\/h2><p>Cet objet de mod\u00e8le, au nom improbable, peut s\u2019av\u00e9rer tr\u00e8s puissant tant il est performant. Il peut s\u2019obtenir gr\u00e2ce \u00e0 un assistant ou en l\u2019ins\u00e9rant manuellement dans une liste&nbsp;; FileMaker est une plateforme qui permet d\u2019avoir facilement beaucoup de rapports, ce qui probablement justifie que j\u2019y ai consacr\u00e9 ma carri\u00e8re, mais aussi nous permet d\u2019envisager de cr\u00e9er notre tableau crois\u00e9 dynamique dans un nouveau mod\u00e8le.<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"181\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/86604e57-686d-4d85-a0eb-74146462eeaa.png\" alt=\"\" class=\"wp-image-17354\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/86604e57-686d-4d85-a0eb-74146462eeaa.png 840w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/86604e57-686d-4d85-a0eb-74146462eeaa-300x65.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/86604e57-686d-4d85-a0eb-74146462eeaa-768x165.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/86604e57-686d-4d85-a0eb-74146462eeaa-600x129.png 600w\" sizes=\"auto, (max-width: 840px) 100vw, 840px\" \/><\/figure><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"510\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-1024x510.png\" alt=\"\" class=\"wp-image-17363\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-1024x510.png 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-300x149.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-768x383.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-1536x765.png 1536w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-2048x1020.png 2048w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/c20ec119-b6ee-4a40-bf37-01da22e1630d-600x299.png 600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>En cr\u00e9ant quelques rubriques compl\u00e9mentaires (dans notre exemple, pas moins de 9 quand m\u00eame) nous pouvons pr\u00e9tendre \u00e0 obtenir le m\u00eame tableau, qui s\u2019actualise en un clic, sans sortir de FileMaker. Le progr\u00e8s est en marche. Peut-on faire mieux&nbsp;?<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"879\" height=\"300\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a03267ac-3498-4db2-9d71-533ac188a46a.png\" alt=\"\" class=\"wp-image-17366\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a03267ac-3498-4db2-9d71-533ac188a46a.png 879w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a03267ac-3498-4db2-9d71-533ac188a46a-300x102.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a03267ac-3498-4db2-9d71-533ac188a46a-768x262.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a03267ac-3498-4db2-9d71-533ac188a46a-600x205.png 600w\" sizes=\"auto, (max-width: 879px) 100vw, 879px\" \/><\/figure><h2 class=\"wp-block-heading\" id=\"C.------Les-solutions-plus-\u00ab-complexes-\u00bb\">C.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Les solutions plus \u00ab&nbsp;complexes&nbsp;\u00bb<\/h2><p>D\u2019autres techniques pourraient \u00eatre \u00e9voqu\u00e9es, permettant elles-m\u00eames d\u2019agr\u00e9ger de l\u2019information.<\/p><p>Nous pourrions utiliser une table \u00ab&nbsp;pivot&nbsp;\u00bb pour calculer, dans notre exemple, que les 5 ann\u00e9es n\u00e9cessaires. Il s\u2019agirait de remplacer les rubriques de type statistique par des calculs utilisant la fonction \u00ab&nbsp;somme&nbsp;\u00bb; l\u2019avantage \u00e9tant d\u2019externaliser les calculs de la table d\u2019origine, et si n\u00e9cessaire, de regrouper les donn\u00e9es de plusieurs tables dans une seule. Les inconv\u00e9nients majeurs seront la perte de performance et\u2026 l\u2019ajout d\u2019une table en plus des rubriques n\u00e9cessaires.<\/p><p>Nous pourrions imaginer \u00e9galement une \u00ab&nbsp;virtual list&nbsp;\u00bb qui reprendrait dans un tableau une liste que nous cr\u00e9erions de toutes pi\u00e8ces probablement par script ou un calcul SQL. Cette m\u00e9thode est finalement assez proche de la technique qui suit, la l\u00e9g\u00e8ret\u00e9 en moins puisqu\u2019il faut, l\u00e0 aussi, cr\u00e9er une table pour afficher notre \u201cvirtual list\u201d.<\/p><h2 class=\"wp-block-heading\" id=\"D.------Le-tableau-HTML\">D.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Le tableau HTML<\/h2><p>Tant qu\u2019\u00e0 construire un fichier texte qui agr\u00e8ge nos donn\u00e9es, pourquoi ne pas imaginer un script qui&nbsp;:<\/p><ul class=\"wp-block-list\"><li>Boucle parmi les factures pour collecter nos donn\u00e9es en les rangeant dans un format plus pratique et plus universel qu\u2019une simple liste, j\u2019ai nomm\u00e9 un objet JSON<\/li>\n\n<li>Boucle ensuite dans ce m\u00eame objet pour construire un code HTML avec un tableau affichant le r\u00e9sultat souhait\u00e9.<\/li>\n\n<li>Afficher ledit code dans un webViewer dont c\u2019est la fonction premi\u00e8re.<\/li><\/ul><p>\u00c0 l\u2019usage, cette solution s\u2019av\u00e8re plus complexe, je le conc\u00e8de, avec toutefois ici un avantage qui appara\u00eet de taille&nbsp;: la portabilit\u00e9. Plus besoin de cr\u00e9er des objets de mod\u00e8les (\u00e0 part un simple webViewer), des rubriques, ni des tables, tout est cr\u00e9\u00e9 par script.<\/p><p>Ce fut en quelque sorte la version 1 de cette m\u00e9thode, qui m\u2019amena \u00e0 constater que bien que tout le reste f\u00fbt simplifi\u00e9, le script en question pouvait ais\u00e9ment arriver \u00e0 200 lignes. Sch\u00e9matiquement, 100 lignes pour agr\u00e9ger les donn\u00e9es dans une variable et 100 lignes pour transformer cette variable en un tableau HTML. Et si la statistique en question devait \u00eatre un peu modifi\u00e9e, il s\u2019agissait de modifier beaucoup de lignes aux bons endroits. Comme les sages l\u2019avaient annonc\u00e9, la libert\u00e9 avait-elle un prix&nbsp;?<\/p><h1 class=\"wp-block-heading\" id=\"2.-La-m\u00e9thode-am\u00e9lior\u00e9e\">2. La m\u00e9thode am\u00e9lior\u00e9e<\/h1><p>Comment am\u00e9liorer notre m\u00e9thode pour n\u2019en garder que les qualit\u00e9s&nbsp;?<\/p><h2 class=\"wp-block-heading\" id=\"A.-------Regrouper-les-donn\u00e9es\">A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Regrouper les donn\u00e9es<\/h2><p>Premi\u00e8rement, notons que la fonction de calcul \u00ab&nbsp;\u00e9x\u00e9cuter SQL&nbsp;\u00bb permet, non seulement, de s\u2019affranchir du contexte, mais outre cela, enrichi d\u2019une instruction \u00ab&nbsp;GROUP BY&nbsp;\u00bb, les donn\u00e9es seront automatiquement agr\u00e9g\u00e9es selon nos souhaits. Pour notre exemple avec ce calcul&nbsp;:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"459\" height=\"109\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/62a72f4c-5e0a-48c1-83fb-6eab1ff4ecef.png\" alt=\"\" class=\"wp-image-17369\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/62a72f4c-5e0a-48c1-83fb-6eab1ff4ecef.png 459w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/62a72f4c-5e0a-48c1-83fb-6eab1ff4ecef-300x71.png 300w\" sizes=\"auto, (max-width: 459px) 100vw, 459px\" \/><\/figure><p>Va nous amener cette liste&nbsp;:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"262\" height=\"289\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/d0c53ab6-d089-4bd5-a1e9-141d66d8df3a.png\" alt=\"\" class=\"wp-image-17372\"\/><\/figure><h2 class=\"wp-block-heading\" id=\"B.-------Ranger-les-donn\u00e9es\">B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ranger les donn\u00e9es<\/h2><p>Nous pouvons ranger nos donn\u00e9es pour en faire un bel et solide objet JSON. Les plus attentifs, ou du moins, ceux qui sont arriv\u00e9s \u00e0 ce stade de ce brillant expos\u00e9, questionneront&nbsp;: \u00ab&nbsp;pourquoi passer par un objet JSON&nbsp;?\u00bb<\/p><p>Les chemins menants tous \u00e0 Rome, cette \u00e9tape n\u2019est en effet pas forc\u00e9ment n\u00e9cessaire, pour autant cela permet de standardiser nos donn\u00e9es, de g\u00e9rer plus facilement les valeurs nulles (avez-vous not\u00e9 qu\u2019il n\u2019y a pas de factures d\u2019Architectes en 2023&nbsp;?), d\u2019adjoindre des totaux\u2026etc.<\/p><p>Pour nous \u00e9conomiser les boucles par script, pourquoi ne pas imaginer une fonction de calcul pour boucler dans la liste et construire cet objet&nbsp;?<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1007\" height=\"618\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/ea6b5a14-6c2e-48ea-b76f-1b77fbdf2b04.png\" alt=\"\" class=\"wp-image-17375\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/ea6b5a14-6c2e-48ea-b76f-1b77fbdf2b04.png 1007w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/ea6b5a14-6c2e-48ea-b76f-1b77fbdf2b04-300x184.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/ea6b5a14-6c2e-48ea-b76f-1b77fbdf2b04-768x471.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/ea6b5a14-6c2e-48ea-b76f-1b77fbdf2b04-600x368.png 600w\" sizes=\"auto, (max-width: 1007px) 100vw, 1007px\" \/><\/figure><p>Le r\u00e9sultat de notre requ\u00eate prendra ainsi cette forme&nbsp;:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"312\" height=\"514\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/493164e8-3aeb-464e-b4e3-129134ab3554.png\" alt=\"\" class=\"wp-image-17378\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/493164e8-3aeb-464e-b4e3-129134ab3554.png 312w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/493164e8-3aeb-464e-b4e3-129134ab3554-182x300.png 182w\" sizes=\"auto, (max-width: 312px) 100vw, 312px\" \/><\/figure><h2 class=\"wp-block-heading\" id=\"C.------Afficher-les-donn\u00e9es\">C.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Afficher les donn\u00e9es<\/h2><p>Apr\u00e8s avoir rang\u00e9 nos donn\u00e9es dans le format le plus standard du moment, notre souhait est d\u00e9sormais de cr\u00e9er, \u00e0 la vol\u00e9e, un tableau HTML qui affichera ces donn\u00e9es. Notre fonction personnalis\u00e9e _sqlToHTML en charge de transformer le r\u00e9sultat d\u2019une requ\u00eate SQL en tableau HTML va :<\/p><ul class=\"wp-block-list\"><li>faire appel \u00e0 plusieurs fonctions secondaires<\/li>\n\n<li>faire une boucle dans le r\u00e9sultat JSON pour cr\u00e9er les lignes du tableau et une autre boucle \u00e0 l\u2019int\u00e9rieur de chaque ligne pour cr\u00e9er chaque cellule. Les boucles \u201cWhile\u201d peuvent \u00eatre imbriqu\u00e9es, \u00e0 notre plus grand bonheur!<\/li><\/ul><p>Le fonctionnement g\u00e9n\u00e9ral pourrait \u00eatre sch\u00e9matis\u00e9 comme suit :<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"634\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/8d2fc69b-9683-414f-b55f-76431b0ce02c-1024x634.png\" alt=\"\" class=\"wp-image-17381\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/8d2fc69b-9683-414f-b55f-76431b0ce02c-1024x634.png 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/8d2fc69b-9683-414f-b55f-76431b0ce02c-300x186.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/8d2fc69b-9683-414f-b55f-76431b0ce02c-768x476.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/8d2fc69b-9683-414f-b55f-76431b0ce02c-600x372.png 600w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/8d2fc69b-9683-414f-b55f-76431b0ce02c.png 1112w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1003\" height=\"657\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/baa34527-a725-46c9-bce5-96d9b48820cd.png\" alt=\"\" class=\"wp-image-17384\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/baa34527-a725-46c9-bce5-96d9b48820cd.png 1003w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/baa34527-a725-46c9-bce5-96d9b48820cd-300x197.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/baa34527-a725-46c9-bce5-96d9b48820cd-768x503.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/baa34527-a725-46c9-bce5-96d9b48820cd-600x393.png 600w\" sizes=\"auto, (max-width: 1003px) 100vw, 1003px\" \/><\/figure><p>A noter l\u2019utilisation des autres fonctions personnalis\u00e9es :<\/p><ul class=\"wp-block-list\"><li>\u201csqlHtmlCSS\u201d qui, simplement, externalise notre code CSS<\/li>\n\n<li>\u201csqlColumns\u201d qui va parcourir le JSON des r\u00e9sultats pour lister, de fa\u00e7on exhaustive, les colonnes n\u00e9cessaires.<\/li>\n\n<li>\u201cscriptGraph\u201d que nous aborderons plus loin<\/li><\/ul><p>Au total, en ins\u00e9rant simplement notre requ\u00eate SQL directement dans notre WebViewer et en lui appliquant notre fonction personnalis\u00e9e&nbsp;:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"706\" height=\"422\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/4341682e-d857-4244-9156-e877ccff3ba5.png\" alt=\"\" class=\"wp-image-17387\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/4341682e-d857-4244-9156-e877ccff3ba5.png 706w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/4341682e-d857-4244-9156-e877ccff3ba5-300x179.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/4341682e-d857-4244-9156-e877ccff3ba5-600x359.png 600w\" sizes=\"auto, (max-width: 706px) 100vw, 706px\" \/><\/figure><p>Nous obtenons \u00e0 l\u2019affichage du webViewer ceci&nbsp;:<\/p><figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"895\" height=\"245\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/1c184a6d-8288-4db8-8211-6c967edd2d9c.png\" alt=\"\" class=\"wp-image-17390\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/1c184a6d-8288-4db8-8211-6c967edd2d9c.png 895w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/1c184a6d-8288-4db8-8211-6c967edd2d9c-300x82.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/1c184a6d-8288-4db8-8211-6c967edd2d9c-768x210.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/1c184a6d-8288-4db8-8211-6c967edd2d9c-600x164.png 600w\" sizes=\"auto, (max-width: 895px) 100vw, 895px\" \/><\/figure><p>Tout ceci est donc possible avec un jeu de quelques fonctions personnalis\u00e9es. La portabilit\u00e9 est maximale puisqu\u2019il suffit de copier un jeu de fonctions personnalis\u00e9es et d\u2019en appeler une seule (qui contient toutes les autres) dans&nbsp; notre WebViewer.<\/p><h1 class=\"wp-block-heading\" id=\"3.-La-m\u00e9thode-ultime\">3. La m\u00e9thode ultime<\/h1><h2 class=\"wp-block-heading\" id=\"A.------Des-am\u00e9liorations-encore-possibles?\">A.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Des am\u00e9liorations encore possibles?<\/h2><p>Ne ne souffrons pas d\u2019exc\u00e8s de perfectionnisme, mais regardons les quelques limites restantes. Nous avons en effet maintenant un tableau de statistiques g\u00e9n\u00e9r\u00e9 automatiquement en inscrivant une requ\u00eate SQL dans un WebViewer. Et donc l\u2019envie de multiplier les diff\u00e9rents tableaux (pourquoi pas le chiffre d\u2019affaires par typeChantier, ou le chiffre d\u2019affaires mensuel de commerciaux par mois en 2023 ?)<\/p><p>Utiliser cette m\u00e9thode nous obligerait \u00e0 multiplier les WebViewers et donc les mod\u00e8les d\u2019affichage.<\/p><p>En int\u00e9grant directement la requ\u00eate SQL dans le WebViewer il est, en outre, n\u00e9cessaire de bien connaitre le SQL ainsi que le nom des tables et rubriques.<\/p><p>Certes nous vantions la portabilit\u00e9 maximale qui \u00e9vitait d\u2019avoir \u00e0 cr\u00e9er des tables ou des rubriques, pour autant si l\u2019on sacrifie \u00e0 ce dogme on pourrait imaginer cr\u00e9er une table et des rubriques permettant :<\/p><ul class=\"wp-block-list\"><li>de cr\u00e9er et sauvegarder autant de tableaux que souhait\u00e9 (un par enregistrement)<\/li>\n\n<li>de construire simplement une requ\u00eate SQL, ouvrant la possibilit\u00e9 \u00e0 notre client de faire lui m\u00eame ses propres statistiques.<\/li><\/ul><p>Avouons que les avantages en valent probablement la peine\u2026<\/p><h2 class=\"wp-block-heading\" id=\"B.------Quid-des-graphiques?\">B.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Quid des graphiques?<\/h2><p>La g\u00e9n\u00e9ration d\u2019un graphique, \u00e9tant la repr\u00e9sentation visuelle de notre requ\u00eate dans FileMaker, n\u00e9cessiterait probablement de cr\u00e9er des rubriques, pour y d\u00e9poser sous forme de listes, les r\u00e9sultats de nos diff\u00e9rents calculs sous une forme attendue, des fonctions personnalis\u00e9es suppl\u00e9mentaires, des scripts, des rubriques\u2026 Adieu la simplicit\u00e9!<\/p><p>Bien nous en a pris, nous avons choisi d\u2019afficher notre r\u00e9sultat sous un format bien plus universel, en l\u2019occurrence du HTML : en adjoignant \u00e0 notre code des biblioth\u00e8ques Javascript adapt\u00e9es nous pourrions imaginer obtenir les graphiques souhait\u00e9s et, sans faire offense \u00e0 Claris, probablement plus jolis et interactifs.<\/p><p>Ici nous avons choisi d\u2019int\u00e9grer un outil extr\u00eamement puissant qui part directement du tableau que nous avons g\u00e9n\u00e9r\u00e9 : HighCharts. C\u2019est un outil payant qui justifie son prix par sa facilit\u00e9 d\u2019impl\u00e9mentation, vous trouverez la tarification ici : <a href=\"https:\/\/shop.highcharts.com\/\">Buy Highcharts License | Highcharts Online Shop<\/a><\/p><p>Dans notre exemple il suffit simplement de nommer notre tableau et Highcharts fait le reste!<\/p><p>A noter que des biblioth\u00e8ques gratuites existent et pourraient probablement \u00eatre utilis\u00e9es, partant du JSON avec les donn\u00e9es et non du tableau directement, n\u00e9cessitant dans ce cas une nouvelle fonction pour convertir notre requ\u00eate et obtenir le format d\u00e9sir\u00e9.<\/p><h2 class=\"wp-block-heading\" id=\"C.------Pourquoi-une-seule-table-pour-nos-statistiques?\">C.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Pourquoi une seule table pour nos statistiques?<\/h2><p>Notre m\u00e9thode fonctionnant sur la base d\u2019une calcul Ex\u00e9cuterSql (), elle est ind\u00e9pendante du sacro-saint contexte propre \u00e0 FileMaker, nous pourrions donc envisager, d\u2019obtenir les donn\u00e9es r\u00e9sum\u00e9es d\u2019une autre table, par exemple, la cat\u00e9gorie socio-professionnelle de nos clients selon leur ville, ou encore leur tranche d&rsquo;\u00e2ge.<\/p><p>Voici quelques exemples graphiques tir\u00e9s des exemples cit\u00e9s ci-dessus :<\/p><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"637\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a3455b7a-90a2-438f-819a-749833286227-1024x637.png\" alt=\"\" class=\"wp-image-17393\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a3455b7a-90a2-438f-819a-749833286227-1024x637.png 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a3455b7a-90a2-438f-819a-749833286227-300x187.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a3455b7a-90a2-438f-819a-749833286227-768x478.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a3455b7a-90a2-438f-819a-749833286227-600x373.png 600w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/a3455b7a-90a2-438f-819a-749833286227.png 1241w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"636\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/5a8c4340-cab2-46c8-a8ff-6a7a363da668-1024x636.png\" alt=\"\" class=\"wp-image-17396\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/5a8c4340-cab2-46c8-a8ff-6a7a363da668-1024x636.png 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/5a8c4340-cab2-46c8-a8ff-6a7a363da668-300x186.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/5a8c4340-cab2-46c8-a8ff-6a7a363da668-768x477.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/5a8c4340-cab2-46c8-a8ff-6a7a363da668-600x373.png 600w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/5a8c4340-cab2-46c8-a8ff-6a7a363da668.png 1243w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"638\" src=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/092b77d9-26be-4912-903a-93fce2e11df2-1024x638.png\" alt=\"\" class=\"wp-image-17399\" srcset=\"https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/092b77d9-26be-4912-903a-93fce2e11df2-1024x638.png 1024w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/092b77d9-26be-4912-903a-93fce2e11df2-300x187.png 300w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/092b77d9-26be-4912-903a-93fce2e11df2-768x479.png 768w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/092b77d9-26be-4912-903a-93fce2e11df2-600x374.png 600w, https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/092b77d9-26be-4912-903a-93fce2e11df2.png 1242w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure><p>Enfin cette vid\u00e9o de 12 minutes vous montrera la facilit\u00e9 d\u2019impl\u00e9mentation de cette m\u00e9thode sur une solution existante :<\/p><figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"ast-oembed-container\" style=\"height: 100%;\"><iframe loading=\"lazy\" title=\"Cross Table Demo\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/z5KMBliaXA0?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure><h1 class=\"wp-block-heading\" id=\"Conclusion\">Conclusion<\/h1><p>La g\u00e9n\u00e9ration de tableaux et de graphiques sur une m\u00eame page, pour que notre client dispose des \u00e9l\u00e9ments d\u00e9cisionnels les plus pertinents, est certainement une partie de la solution avec une grande valeur ajout\u00e9e. Cette partie pouvait n\u00e9cessiter des heures, voire des jours de d\u00e9veloppement suppl\u00e9mentaires pour \u00eatre men\u00e9e \u00e0 bien, et chaque nouveau besoin du client amenait son surplus de d\u00e9veloppement.<\/p><p>La combinaison de fonctions de calculs, pour certaines, plus si r\u00e9centes, nous permet de proposer une fa\u00e7on de faire tr\u00e8s facile \u00e0 installer sur n\u2019importe quelle solution FileMaker.<\/p><p>La m\u00e9thode pr\u00e9sent\u00e9e ne pr\u00e9tend pas solutionner tous les cas de figure, mais probablement que plus de 80% des cas de figure, ou plus, peuvent \u00eatre r\u00e9alis\u00e9 en quelques minutes. En laissant la main au client, nous pouvons m\u00eame lui laisser lui-m\u00eame cr\u00e9er ses propres statistiques auxquelles, probablement, il n\u2019aurait pas pens\u00e9. Nul doute que notre client en sera satisfait, et la satisfaction de nos clients, chez Direct Impact, est au coeur de nos valeurs!<\/p><div class=\"wp-block-uagb-buttons uagb-buttons__outer-wrap uagb-btn__default-btn uagb-btn-tablet__default-btn uagb-btn-mobile__default-btn uagb-block-d9101944\"><div class=\"uagb-buttons__wrap uagb-buttons-layout-wrap \"><div class=\"wp-block-uagb-buttons-child uagb-buttons__outer-wrap uagb-block-10424f09 wp-block-button\"><div class=\"uagb-button__wrapper\"><a class=\"uagb-buttons-repeater wp-block-button__link\" aria-label=\"\" href=\"\/fr\/contact\/\" rel=\"follow noopener\" target=\"_self\"><div class=\"uagb-button__link\">CONTACTEZ-NOUS<\/div><\/a><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Nous sommes des \u00ab&nbsp;Problem Solvers&nbsp;\u00bb et nous utilisons notre outil Low-Code pr\u00e9f\u00e9r\u00e9 (FileMaker) pour construire des solutions sur-mesure pour nos clients. La finalit\u00e9 la plus \u00e9vidente est d\u2019optimiser et de faciliter les processus de l\u2019entreprise en automatisant des t\u00e2ches qui vont, elles-m\u00eames, produire des donn\u00e9es. Or, ces donn\u00e9es brutes refl\u00e8tent, par d\u00e9finition, l\u2019activit\u00e9 de l\u2019entreprise. &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"\" href=\"https:\/\/www.directimpactsolutions.com\/fr\/tableaux-croises-dynamiques\/\"> <span class=\"screen-reader-text\">Pour des tableaux crois\u00e9s (vraiment) dynamiques<\/span> Lire la suite >><\/a><\/p>\n","protected":false},"author":26,"featured_media":17403,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","footnotes":""},"categories":[34],"tags":[],"class_list":["post-17347","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-low-code"],"uagb_featured_image_src":{"full":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414.jpg",1389,754,false],"thumbnail":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-150x150.jpg",150,150,true],"medium":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-300x163.jpg",300,163,true],"medium_large":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-768x417.jpg",768,417,true],"large":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-1024x556.jpg",1024,556,true],"1536x1536":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414.jpg",1389,754,false],"2048x2048":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414.jpg",1389,754,false],"woocommerce_thumbnail":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-300x300.jpg",300,300,true],"woocommerce_single":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-600x326.jpg",600,326,true],"woocommerce_gallery_thumbnail":["https:\/\/www.directimpactsolutions.com\/wp-content\/uploads\/2024\/06\/iStock-1791212414-100x100.jpg",100,100,true]},"uagb_author_info":{"display_name":"Martial Le Boulch","author_link":"https:\/\/www.directimpactsolutions.com\/fr\/author\/martial\/"},"uagb_comment_info":0,"uagb_excerpt":"Nous sommes des \u00ab&nbsp;Problem Solvers&nbsp;\u00bb et nous utilisons notre outil Low-Code pr\u00e9f\u00e9r\u00e9 (FileMaker) pour construire des solutions sur-mesure pour nos clients. La finalit\u00e9 la plus \u00e9vidente est d\u2019optimiser et de faciliter les processus de l\u2019entreprise en automatisant des t\u00e2ches qui vont, elles-m\u00eames, produire des donn\u00e9es. Or, ces donn\u00e9es brutes refl\u00e8tent, par d\u00e9finition, l\u2019activit\u00e9 de l\u2019entreprise.\u2026","_links":{"self":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts\/17347","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/users\/26"}],"replies":[{"embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/comments?post=17347"}],"version-history":[{"count":3,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts\/17347\/revisions"}],"predecessor-version":[{"id":17414,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/posts\/17347\/revisions\/17414"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/media\/17403"}],"wp:attachment":[{"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/media?parent=17347"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/categories?post=17347"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.directimpactsolutions.com\/fr\/wp-json\/wp\/v2\/tags?post=17347"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}