Pivot Expert - Guide rapide
Mise à jour le 18 septembre 2026·
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énerSUBSTRING(text, start, length): ExtraireUPPER(text)/LOWER(text): Majuscules/minusculesTRIM(text): Supprimer espaces
Dates :
NOW(): Date/heure actuelleCURDATE(): Date actuelleYEAR(date)/MONTH(date): Extraire année/moisDATE_FORMAT(date, '%Y-%m'): Formater date
Numériques :
ROUND(number, decimals): ArrondirCEILING(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 Detailtabioi Sales Order/tabioi Sales Order Detailtabioi Sales Delivery/tabioi Sales Delivery Detailtabioi Sales Invoice/tabioi Sales Invoice Detailtabioi Customer/tabioi Customer Contacttabioi Sales Journal
Achats (ioi Purchases) #
tabioi Purchases Order/tabioi Purchases Order Detailtabioi Purchases Receipt/tabioi Purchases Receipt Detailtabioi Purchases Invoice/tabioi Purchases Invoice Detailtabioi Supplier/tabioi Supplier Contacttabioi Purchases Journal
Stock (ioi Items) #
tabioi Itemtabioi Stock Entry/tabioi Stock Entry Detailtabioi Warehouse/tabioi Warehouse Stock
Comptabilité (ioi Accounting) #
tabioi Account Balance/tabioi Account Transactiontabioi Customer Balance/tabioi Customer Transactiontabioi Supplier Balance/tabioi Supplier Transactiontabioi General Accounttabioi 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 rolesetIs 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
Memopour 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 #
- Performances
- Évitez :
SELECT * FROMsur de grandes tables - Préférez : Filtrer avec
WHEREet 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
ioistatuspour 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.nameetb.parenttype = 'DocType Name' - Customer/Supplier : Peuvent avoir plusieurs IDs selon le contexte (delivery_customer, invoice_customer, order_customer)
- Dates :
document_date(date du document) vsmodified(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_currencypour montant ligne dans devise du document - Références : Les champs
namesont 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