Aide · silicon ioi

Pivot Expert - Guide rapide

Fiche

Introduction #

ioi Pivot Expert est un tableau croisé dynamique qui transforme vos données brutes en analyses visuelles interactives.

Fonctions principales :

  • Regroupe et filtre les données par client, agent, produit, période…
  • Calculs automatiques : somme, moyenne, min/max, comptage…
  • Tableaux interactifs modifiables en temps réel

Accès : Liste des vues → Pivot Expert


Structure de l’interface #

Bouton Refresh #

Actualise les données pour refléter les dernières modifications.

Query Profiles #

Gestion des analyses :

  • Sélectionner une analyse existante
  • Créer/modifier/supprimer des profils
  • Importer des profils

3 façons de créer un profil :

A. Sur base d’un DocType #
  • Sélectionner le DocType
  • Double-cliquer sur les champs à ajouter
  • Configuration automatique
B. Sur base de ioi List Expert #
  • Importer la structure d’une vue Expert existante
  • Les modifications sont indépendantes
C. Sur base d’une requête SQL #
  • Écrire ou coller une requête SQL
  • Tester la requête avant sauvegarde
  • Utiliser les variables système : {user}, {company}, {site}

Options importantes :

  • Is public : Rendre l’analyse accessible aux autres utilisateurs
  • Is standard : Marquer comme analyse standard (non modifiable)
  • Limit to roles : Restreindre l’accès à certains rôles
  • Paramètres : Filtres dynamiques (dates, items, etc.)

Display Profiles #

Plusieurs présentations pour une même analyse

Configuration :

  • Gérer l’affichage des lignes/colonnes
  • Options visuelles (lignes alternées, largeur auto, etc.)
  • Figer colonnes/lignes
  • Afficher totaux généraux
  • Format d’export (CSV, Excel)

Options disponibles :

  • Alternating row background : Lignes en alternance gris/blanc
  • Columns auto width : Ajustement automatique largeur colonnes
  • Collapse columns : Résumer les colonnes
  • Collapse rows : Résumer les lignes
  • Freeze columns : Figer colonnes de gauche
  • Show column total : Colonne total général
  • Show row total : Ligne total général
  • Read only tree : Bloquer modification configuration
  • Vertical columns header text : Titres colonnes verticaux

Structure du tableau #

Zone Values (Valeurs) #

Définit les méthodes d’agrégation :

  • Sum : Somme
  • Average : Moyenne
  • Min/Max : Minimum/Maximum
  • Count : Nombre total (avec doublons)
  • CountUnique : Nombre de valeurs uniques
  • Median : Médiane
  • StDev/Var : Écart-type et variance

Zone Columns (Colonnes) #

Champs affichés en colonnes du tableau

Zone Rows (Lignes) #

Champs affichés en lignes du tableau

Opérations disponibles :

  • Ajouter/supprimer des champs (bouton +/x)
  • Réorganiser par glisser-déposer
  • Filtrer les données
  • Trier par clic sur en-tête

Filtres #

Types de filtres disponibles :

Texte : égal, différent, contient, commence par, se termine par…

Numérique : >, <, ≥, ≤, =, ≠

Date : >, <, ≥, ≤, =, ≠, entre

Astuce

Les champs filtrés sont marqués d’une icône spécifique.


Paramètres dynamiques #

Filtrer dans la requête SQL (plus performant que les filtres du tableau)

Types de paramètres :

  • Data : Texte
  • Date : Date
  • Datetime : Date et heure
  • Float : Numérique décimal
  • Link : Lien vers un DocType

Utilisation dans SQL :

WHERE document_date BETWEEN '{param_date_debut}' AND '{param_date_fin}'
WHERE item_id = '{param_item}'

Variables système disponibles :

  • {user} : Utilisateur actuel
  • {company} : Entreprise actuelle
  • {site} : Site actuel

Outils annexes #

System Console #

Module intégré pour tester des requêtes SQL avant de les utiliser dans Pivot Expert.

Accès : Menu → System Console

Adminer #

Outil de gestion de base de données externe pour créer et tester des requêtes complexes.

Accès : https://db.votre_environnement.ioi.online/adminer.php

Fonctions utiles :

  • Exploration des tables et structure
  • Test de requêtes SQL
  • Export de résultats

Fonctions SQL utiles #

Manipulation de chaînes :

  • CONCAT(a, b) : Concaténer
  • SUBSTRING(text, start, length) : Extraire
  • UPPER(text) / LOWER(text) : Majuscules/minuscules
  • TRIM(text) : Supprimer espaces

Dates :

  • NOW() : Date/heure actuelle
  • CURDATE() : Date actuelle
  • YEAR(date) / MONTH(date) : Extraire année/mois
  • DATE_FORMAT(date, '%Y-%m') : Formater date

Numériques :

  • ROUND(number, decimals) : Arrondir
  • CEILING(number) / FLOOR(number) : Arrondi sup/inf

Conditionnelles :

  • IF(condition, valeur_si_vrai, valeur_si_faux)
  • CASE WHEN ... THEN ... ELSE ... END

Tables principales #

Ventes (ioi Sales) #

  • tabioi Sales Quote / tabioi Sales Quote Detail
  • tabioi Sales Order / tabioi Sales Order Detail
  • tabioi Sales Delivery / tabioi Sales Delivery Detail
  • tabioi Sales Invoice / tabioi Sales Invoice Detail
  • tabioi Customer / tabioi Customer Contact
  • tabioi Sales Journal

Achats (ioi Purchases) #

  • tabioi Purchases Order / tabioi Purchases Order Detail
  • tabioi Purchases Receipt / tabioi Purchases Receipt Detail
  • tabioi Purchases Invoice / tabioi Purchases Invoice Detail
  • tabioi Supplier / tabioi Supplier Contact
  • tabioi Purchases Journal

Stock (ioi Items) #

  • tabioi Item
  • tabioi Stock Entry / tabioi Stock Entry Detail
  • tabioi Warehouse / tabioi Warehouse Stock

Comptabilité (ioi Accounting) #

  • tabioi Account Balance / tabioi Account Transaction
  • tabioi Customer Balance / tabioi Customer Transaction
  • tabioi Supplier Balance / tabioi Supplier Transaction
  • tabioi General Account
  • tabioi Period

Bonnes pratiques #

Astuce

  • Performance : Utilisez les paramètres SQL plutôt que les filtres du tableau pour grandes volumétries
  • Sécurité : Limitez l’accès avec Limit to roles et Is public
  • Organisation : Créez plusieurs Display Profiles pour différents besoins
  • Test : Validez vos requêtes dans System Console avant de les intégrer
  • Documentation : Utilisez la zone Memo pour documenter vos analyses

Cas d’usage courants #

Analyse des ventes par période et client #

SELECT 
    YEAR(a.document_date) AS annee,
    MONTH(a.document_date) AS mois,
    a.invoice_customer_id,
    c.name as client,
    SUM(b.value_line_doc_currency) AS total_ventes
FROM `tabioi Sales Invoice` a
JOIN `tabioi Sales Invoice Detail` b ON b.parent = a.name
JOIN `tabioi Customer` c ON c.name = a.invoice_customer_id
WHERE a.document_date BETWEEN '{param_date_debut}' AND '{param_date_fin}'
    AND a.ioistatus >= 1
GROUP BY YEAR(a.document_date), MONTH(a.document_date), a.invoice_customer_id

Analyse des factures globalisées (POS) #

SELECT 
    a.document_date,
    a.name AS facture,
    a.globalized_document,
    COUNT(DISTINCT b.sales_delivery_id) AS nb_ventes_groupees,
    SUM(a.total_incl_vat) AS total_facture
FROM `tabioi Sales Invoice` a
LEFT JOIN `tabioi Sales Invoice Globalized Link` b ON b.sales_invoice_id = a.name
WHERE a.globalized_document = 1
    AND a.document_date BETWEEN '{param_date_debut}' AND '{param_date_fin}'
GROUP BY a.name

Analyse des stocks par entrepôt #

SELECT 
    w.name AS entrepot,
    i.name AS article,
    i.description,
    ws.available_stock AS stock_disponible,
    ws.reserved_stock AS stock_reserve,
    (ws.available_stock - ws.reserved_stock) AS stock_libre
FROM `tabioi Warehouse Stock` ws
JOIN `tabioi Warehouse` w ON w.name = ws.parent
JOIN `tabioi Item` i ON i.name = ws.item_id
WHERE ws.available_stock > 0

Analyse des paiements clients (balance) #

SELECT 
    c.name AS client,
    c.vat_number AS tva,
    cb.total_debit AS total_factures,
    cb.total_credit AS total_paiements,
    cb.balance AS solde_ouvert,
    DATEDIFF(CURDATE(), cb.oldest_open_date) AS jours_retard
FROM `tabioi Customer Balance` cb
JOIN `tabioi Customer` c ON c.name = cb.customer_id
WHERE cb.balance > 0
ORDER BY cb.balance DESC

Pièges à éviter #

  1. Performances
  • Évitez : SELECT * FROM sur de grandes tables
  • Préférez : Filtrer avec WHERE et limiter les colonnes
  • Utilisez : Index sur les champs de jointure (document_date, customer_id, etc.)
  • Attention : Les jointures multiples sur tables de détails peuvent ralentir

2. Champs calculés et états

  • ioistatus : 0=Brouillon, 1=Attente, 2=Confirmé, 4=Livré partiel, etc.
  • Toujours filtrer sur ioistatus pour exclure les brouillons
  • approval_status : Vérifier ce champ pour workflows d’approbation

3. Relations entre tables

  • Header ↔ Detail : Toujours joindre via b.parent = a.name et b.parenttype = 'DocType Name'
  • Customer/Supplier : Peuvent avoir plusieurs IDs selon le contexte (delivery_customer, invoice_customer, order_customer)
  • Dates : document_date (date du document) vs modified (dernière modification)

4. Factures globalisées spécifiques

  • Une facture globalisée (globalized_document = 1) regroupe plusieurs ventes POS
  • Table de lien : tabioi Sales Invoice Globalized Link
  • Les ventes liées ont globalized_invoice = 1
  • Ne pas mélanger avec les factures normales dans les analyses de lignes

5. Variables et paramètres

  • Variables système : {user}, {company}, {site} - toujours entre accolades
  • Paramètres : {param_xxx} - définis dans Query Profile Settings
  • Attention : Les variables sont sensibles à la casse

6. Format des données

  • TVA : Stockée en décimal (0.21 pour 21%)
  • Montants : value_line_doc_currency pour montant ligne dans devise du document
  • Références : Les champs name sont les IDs uniques (ex: “SINV-2024-00123”)

Ressources #

Composant utilisé : DHTMLX PivotDocumentation : https://docs.dhtmlx.com/pivot/

Base de données : MariaDBSite officiel : https://mariadb.org

Adminer : https://www.adminer.org