menu
languageFrançais
save_alt Télécharger

Tableaux croisés dynamiques

Crée des tableaux croisés dynamiques à partir de résultats de requête, de sélections ou de tables, et exporte-les en Excel, PDF, Markdown, CSV, HTML ou image.

par rathboma Plugin communautaire

Readme

Ce texte a été écrit par un tiers et traduit automatiquement. Lire l'original en anglais

Transforme n’importe quel résultat de requête, sélection de la grille ou table dans Beekeeper Studio en tableau croisé dynamique, puis partage-le en classeur Excel, PDF, image, Markdown, CSV, HTML ou JSON.

Création d'un tableau croisé dynamique : glisser des champs dans les lignes, colonnes et valeurs, regrouper les dates par année, ajouter des sous-totaux, une heatmap et un filtre, puis exporter

Enregistré dans l’environnement de dev du plugin avec 5000 commandes d’exemple. Légèrement accéléré.

Fonctionnalités en bref

   
Glisser-déposer Lignes, Colonnes, Valeurs et Filtres, comme un tableau croisé de tableur
11 agrégations Nombre, nombre distinct, somme, moyenne, min, max, médiane, écart type, variance, premier, dernier
% du total Affiche n’importe quelle valeur en part du total général, de ligne ou de colonne
Regroupement par date Année, trimestre, mois, semaine, jour, heure, mois de l’année, jour de la semaine
Filtres et tri Choisis les valeurs avec recherche et décomptes ; trie A→Z, Z→A ou par valeur
Mise en page Totaux, sous-totaux, valeurs en colonnes ou en lignes, décimales fixes, heatmap
8 formats d’export Excel, Excel + données source, PDF, PNG, Markdown, CSV, HTML, JSON
3 façons de copier Cellules de tableur, tableau Markdown, image
N’importe quelle source Sélections de grille, requêtes, tables (avec les filtres de l’onglet), jusqu’à 100000 lignes
Bien intégré Suit le thème clair ou sombre, enregistre la mise en page de chaque onglet, tourne en local sans aucun appel réseau

Construire un tableau croisé

Chaque colonne des données apparaît dans la liste Champs. Glisse un champ dans une zone, ou clique dessus et choisis sa destination :

  • Lignes et Colonnes regroupent les données. Empile plusieurs champs pour imbriquer des groupes, et fais glisser les puces pour les réordonner. Inverser échange lignes et colonnes.
  • Valeurs sont les nombres dans les cellules. Un même champ peut être ajouté plusieurs fois, par exemple pour afficher sa somme et sa moyenne côte à côte. Sans valeur, le tableau compte les lignes.
  • Filtres restreignent les données sans ajouter de ligne ni de colonne.

Fais glisser une puce vers la liste des champs pour la retirer. Clique sur une puce pour voir ses options.

Un nouveau tableau croisé démarre avec une mise en page suggérée :

  • Lignes : une colonne de type catégorie, comme status, plan ou country.
  • Colonnes : la date principale, regroupée par jour, mois, trimestre ou année selon l’étendue des données. Elle va dans Lignes s’il n’y a pas de colonne de catégorie.
  • Valeurs : la somme d’une colonne de type montant, comme total, amount ou quantity, ou un nombre de lignes à défaut.

Les identifiants, les colonnes presque vides, le texte libre et les horodatages comme updated_at ne sont pas utilisés. Réinitialiser la mise en page dans Options revient à la suggestion.

Résumer les valeurs

Clique sur une puce de valeur pour changer ce qu’elle affiche :

Résumer par S’applique à
Nombre, nombre distinct N’importe quelle colonne, ou les lignes si aucun champ n’est choisi
Somme, moyenne, médiane, écart type, variance Nombres, y compris le texte numérique
Minimum, maximum Nombres, dates et texte
Premier, dernier N’importe quelle colonne

Afficher en transforme une valeur en pourcentage du total général, du total de sa ligne ou de sa colonne.

Regroupement, filtrage et tri

Clique sur une puce de ligne, de colonne ou de filtre pour :

  • Regrouper les dates par année, trimestre, mois, semaine ISO, jour, heure, mois de l’année ou jour de la semaine. Les dates sont regroupées telles qu’écrites dans la base de données, les fuseaux horaires ne les décalent donc pas.
  • Afficher les valeurs : une liste à cocher de chaque valeur avec son nombre de lignes, une zone de recherche, Tout / Aucun, et « seulement » pour ne garder qu’une valeur. Les puces filtrées sont mises en évidence.
  • Trier les libellés A→Z ou Z→A (les nombres sont triés numériquement, les nulls en dernier), ou selon la taille de la première valeur, du plus grand au plus petit ou l’inverse.

Options de mise en page

Dans Options de la barre latérale :

  • Colonne de totaux et ligne de totaux pour les totaux généraux, et sous-totaux pour chaque groupe quand les lignes ou colonnes sont imbriquées.
  • Valeurs en colonnes ou en lignes, pour les tableaux à plusieurs valeurs.
  • Décimales : auto (les entiers restent entiers, les autres valeurs ont 2 décimales, les pourcentages 1) ou un nombre fixe de 0 à 4.
  • Heatmap colore chaque valeur de la plus petite à la plus grande.

Le titre en haut nomme l’onglet et apparaît dans les exports.

Export et partage

Exporter enregistre un fichier. Les exports contiennent toujours le tableau entier, même si la grille à l’écran n’affiche que les premières lignes d’un très grand tableau.

Format Ce que tu obtiens
Excel En-têtes fusionnés, formats numériques et pourcentages, totaux en gras, lignes d’en-tête et colonnes de libellés figées
Excel + données source Le même classeur avec une seconde feuille contenant les lignes chargées, prêtes à être recroisées dans Excel
PDF En paysage si le tableau est large. Réduit pour tenir quand c’est possible et découpe les tableaux très larges en pages qui répètent les libellés de ligne
Image Un PNG net avec le titre, la source et les filtres, prêt pour des slides, des docs ou un chat
Markdown Un tableau façon GitHub pour les README, issues et wikis
CSV Une ligne d’en-tête et des nombres bruts, avec les libellés répétés sur chaque ligne
HTML Une page autonome stylée qui conserve les en-têtes fusionnés
JSON Un objet par ligne, indexé par en-tête de colonne

Copier place le tableau dans le presse-papiers sous forme de cellules de tableur (à coller dans Excel ou Google Sheets, pourcentages compris), de tableau Markdown ou d’image.

Voici le PNG produit par l’export Image pour le tableau de la démo :

Export en image du tableau croisé des revenus, avec titre, source et résumé des filtres

Ouvrir un tableau croisé

Où Entrée de menu Données utilisées
Menu déroulant Nouvel onglet (à côté de +), menu Outils Pivot Table Une requête ou une table choisie dans le plugin
Résultats de requête ou données de table : clic droit sur une cellule ou sur le coin supérieur gauche Pivot Table from Selection Les cellules sélectionnées
En-tête de l’onglet de requête ou menu contextuel de l’éditeur de requêtes Pivot Query Results La requête, relancée avec une limite de lignes
Table dans la barre latérale, ou en-tête d’un onglet de table Open in Pivot Table La table, avec les filtres de l’onglet en clause WHERE

Pour croiser tout un jeu de résultats depuis la grille, sélectionne d’abord toutes les cellules (clique sur le coin supérieur gauche de la grille ou appuie sur Ctrl/Cmd+A), puis fais un clic droit.

La source de données peut être changée à tout moment avec le bouton crayon de la barre latérale, qui accepte une requête SQL ou une table avec une clause WHERE facultative. SQL dans la barre d’état affiche la requête exacte qui a chargé les données.

Limites de lignes

Les tableaux croisés sont calculés dans le plugin, donc les données sont chargées avec une limite de lignes : 10000 par défaut, configurable jusqu’à 100000 (ton choix est mémorisé).

  • Les requêtes sont encapsulées en SELECT * FROM (<query>) AS pivot_source LIMIT n (TOP sur SQL Server, ROWNUM sur Oracle, FIRST sur Firebird), c’est donc la base de données qui applique la limite.
  • Si la base de données rejette la requête encapsulée (par exemple une CTE sur SQL Server), on te propose d’exécuter la requête telle quelle et de garder les premières lignes. Les instructions susceptibles de modifier des données ne sont jamais relancées sans confirmation.
  • Les bases de données sans sous-requêtes SQL (MongoDB, Redis, Cassandra et similaires) exécutent la requête telle quelle et gardent les premières lignes.
  • Une bannière s’affiche quand la limite est atteinte. Les totaux ne couvrent que les lignes chargées.
  • Quand un onglet enregistré est rouvert, les sources de type requête attendent un clic sur Exécuter la requête au lieu de s’exécuter automatiquement. Les sélections et les tables se chargent immédiatement.

Thèmes clair et sombre

Le plugin utilise les couleurs du thème de Beekeeper Studio et change en même temps que l’app.

Clair Sombre
Tableau croisé dynamique avec le thème clair Tableau croisé dynamique avec le thème sombre

Installation

Une fois publié, installe Pivot Tables depuis Outils → Gérer les plugins dans Beekeeper Studio (5.5 ou plus récent).

Pour installer un build manuellement, télécharge bk-plugin-pivot-tables-<version>.zip depuis les releases et extrais-le dans le dossier des plugins de Beekeeper Studio :

  • Linux : ~/.config/beekeeper-studio/plugins/bk-plugin-pivot-tables
  • macOS : ~/Library/Application Support/beekeeper-studio/plugins/bk-plugin-pivot-tables
  • Windows : %APPDATA%\beekeeper-studio\plugins\bk-plugin-pivot-tables

Développement

yarn install
yarn dev        # links the project into Beekeeper's plugins directory and serves it with hot reload
yarn harness    # runs the plugin in a browser against a fake Beekeeper Studio
yarn test:run   # unit tests (Vitest)
yarn typecheck
yarn build      # production build into dist/
yarn package    # release zip in release/ (after yarn build)

yarn dev utilise @beekeeperstudio/vite-plugin, qui crée un lien symbolique du projet dans le dossier des plugins. Active les plugins dans Beekeeper Studio, puis ouvre un tableau croisé depuis l’un des menus ci-dessus.

yarn harness sert dev/host.html sur http://localhost:5199/dev/host.html. Il héberge le plugin dans une iframe et répond à ses requêtes API depuis une base SQLite en mémoire contenant 5000 commandes d’exemple, pour travailler sur l’UI et les exports sans Beekeeper Studio. Paramètres de requête :

  • command=new-pivot|pivot-selection|pivot-query|pivot-table choisit l’entrée de menu à émuler.
  • theme=light|dark définit le thème.
  • fresh=1 efface l’état enregistré de l’onglet.
  • prod=1 charge le build de production depuis dist/ (lance d’abord yarn build).

docs/demo.gif est enregistré depuis le harness par scripts/record-demo.cjs, pour pouvoir le refaire après des changements d’UI. Avec yarn harness lancé :

npm install -g playwright && npx playwright install chromium   # once; also needs ffmpeg
NODE_PATH="$(npm root -g)" node scripts/record-demo.cjs

Structure du projet

manifest.json            Plugin manifest: one view, menu entries for each way of opening it
src/App.vue              Startup, data loading, state persistence, export actions
src/components/          Field list, drop zones, menus, pivot table renderer, source editor
src/lib/pivot/           Pivot engine, aggregators, date grouping, grid layout (headers and spans)
src/lib/source/          Loading data: selections, queries and tables with dialect-aware row limits
src/lib/export/          Excel, PDF, image, Markdown, CSV, HTML and JSON exporters
tests/                   Vitest specs
dev/                     Browser harness that emulates Beekeeper Studio

Le moteur de croisement produit une grille de cellules avec des fusions de lignes et de colonnes (src/lib/pivot/grid.ts). Le tableau à l’écran et chaque exporteur partent de cette grille, ils affichent donc tous la même mise en page.

Publication

  1. Lance bin/make-release.sh. Il propose la version suivante à partir des tags existants, définit version dans manifest.json et package.json, commite, puis pousse un tag correspondant comme v1.0.0.
  2. Le workflow de release teste, build et crée une release GitHub en brouillon avec manifest.json et bk-plugin-pivot-tables-<version>.zip. Vérifie-la et publie-la.
  3. Pour apparaître dans le gestionnaire de plugins, ajoute une entrée à plugins.json dans beekeeper-studio-plugins.

Limitations

  • Les filtres des onglets de table sont transmis aux plugins par les builds de Beekeeper Studio qui incluent le changement de filtres serializeTab. Les versions plus anciennes ouvrent la table entière (avec la limite de lignes) ; tu peux toujours saisir une clause WHERE dans l’éditeur de source.
  • La grille affiche les 500 premières lignes et 300 premières colonnes des très grands tableaux (« Afficher plus » charge davantage de lignes). Les exports incluent toujours tout.
  • Les images incluent les 2000 premières lignes.
  • Les exports PDF ne peuvent pas afficher les caractères CJK, non couverts par la police DejaVu intégrée.

Licence

GPL-3.0. Intègre les polices DejaVu (licence Bitstream Vera) pour les exports PDF.