Come Funziona il Concetto di Gerarchia

StratumTree implementa un'architettura dual-engine progettata per scalare su dataset complessi, supportando sia gerarchie categoriche a livelli fissi che grafi ricorsivi genitore-figlio.

🧱

1. Multi-Dimension Level Grouping

Ideale per dati categorici dove ogni riga rappresenta un record con granularità a più livelli sequenziali (es. Region > Country > City > Store o Department > Category > Product).

  • Query SQL generate automaticamente con sequenza di GROUP BY
  • Costruzione albero via `buildMultiDimensionTree` (complessità O(N))
  • Subtotali intermedi calcolati in post-order traversal per ogni livello
  • In-Tree Search con conservazione del path di antenati fino alla foglia
🌳

2. Parent-Child Adjacency Graph

Ideale per strutture ricorsive ad albero con profondità variabile e non vincolata (es. Organigrammi aziendali employee_id → manager_id o Piani dei Conti Finanziari P&L).

  • Risoluzione grafi di adiacenza con rilevamento e prevenzione cicli
  • Calcolo dinamico di profondità depth e percorsi path
  • Query SQL Recursive CTE per motori compatibili (Postgres, Trino, Snowflake, DuckDB)
  • Aggregazione bottom-up scalabile senza esplosione del piano query

Protocollo di Cross-Filtering Nativo Apache Superset 6.1.0 (`setDataMask`)

StratumTree interagisce direttamente con l'Event Bus di Superset. Quando l'utente clicca su un nodo intermedio o su una riga foglia, il plugin costruisce un payload extraFormData contenente un filtro IN con i valori selezionati, trasmettendolo istantaneamente a tutti i chart della dashboard tramite la callback setDataMask.

Esempio Payload Emesso su Click:
{
  "extraFormData": {
    "filters": [
      { "col": "region", "op": "IN", "val": ["Americas", "EMEA"] }
    ]
  },
  "filterState": {
    "value": ["Americas", "EMEA"],
    "label": "region: Americas, EMEA"
  }
}
🔃

Ordinamento Gerarchico In-Tree

A differenza delle tabelle piatte tradizionali che disperdono le righe su sort, StratumTree riordina i nodi figli all'interno di ciascun ramo genitore ricorsivamente, preservando l'integrità dell'albero.

  • Algoritmo ricorsivo O(N log N) isolato per sotto-rami
  • Supporto ordinamento crescente/decrescente su qualsiasi metrica
📥

Motore Variance Δ % & Esportazione CSV

Calcolo dinamico di scostamenti percentuali Period-over-Period (YoY) ed esportatore CSV nativo con indentazione a spazi, percorsi completi e subtotali intermedi inclusi.

  • Badge delta colorati con indicatori grafici ▲ / ▼
  • Download immediato con codifica UTF-8 BOM per Excel
💾

Pattern SQL: Query Ricorsiva CTE per Superset SQL Lab

Per i dataset Parent-Child su larga scala, puoi eseguire direttamente una CTE ricorsiva per pre-calcolare profondità e percorsi:

WITH RECURSIVE HierarchyCTE AS (
  -- Anchor Member: Radici (Level 0)
  SELECT id, parent_id, name, amount, 0 AS depth, CAST(name AS VARCHAR(1000)) AS path
  FROM financial_accounts
  WHERE parent_id IS NULL

  UNION ALL

  -- Recursive Member: Subtree
  SELECT c.id, c.parent_id, c.name, c.amount, p.depth + 1, CAST(p.path || ' > ' || c.name AS VARCHAR(1000))
  FROM financial_accounts c
  JOIN HierarchyCTE p ON c.parent_id = p.id
)
SELECT * FROM HierarchyCTE ORDER BY path;