tasks/workstreams/graph-library/initiatives/m2-table-formatting-and-linking-architecture/research.md

Research

Research Questions

Deep Inventory (As of 2026-03-22)

1) Metabase table formatting + linking

Documented table capabilities include: - Table structure and utility controls: rearrange/add/hide columns, custom columns, row numbers, resize columns. - Column-heading operations: filter by column, distribution, distinct values, combine columns, extract date parts, extract URL parts, sum over time. - Cell click behaviors and detail views from key columns. - Per-column formatting: - Text: title, text alignment, wrap, display as text/link/email/image/automatic. - Date: date style, abbreviation, show time, time style, alignment. - Number: mini bar chart, style (number/percent/scientific/currency), separators, decimals, multiply, prefix/suffix. - Currency: unit, label style, where currency unit is shown. - Conditional formatting: - Single color rules (numeric or text match/contains), optional whole-row highlight. - Color range rules for numeric columns. - Rule ordering with precedence. - Dashboard-context behavior: custom destinations for columns, table pagination on dashboard cards.

2) Apache Superset / Preset table formatting + linking

From Preset Table Chart and recent Superset changes: - Table chart controls include: - Row limits. - Column rearrangement (viewer interaction). - Per-column customization (width, alignment, number format via D3/small-number formatting controls). - Color +/- conventions for numeric sign coloring. - Conditional formatting rules. - Recent Superset table conditional formatting expansion introduces explicit target/object concepts including: - ENTIRE_ROW - BACKGROUND_COLOR - TEXT_COLOR - CELL_BAR - String conditional formatting support and handling fixes for empty/null values are called out in release notes.

Note: Superset table options vary across legacy table and AG Grid table modes; the above reflects currently documented Preset/Superset table-chart controls and recent upstream changes.

3) Looker table chart + LookML formatting/linking

Looker table chart formatting (visualization-level) includes: - Sizing/layout: - Size Columns to Fit. - Minimum column width. - Per-column width. - Per-column customization: - Custom label. - Numeric value format (predefined or custom Excel-style format). - Cell text layout controls: font color, background fill, bold/italic/underline, horizontal alignment. - Cell visualization (in-cell bars), palette selection/customization, value labels. - Collapse subtotals. - Formatting menu: - Color collection and palettes. - Row text size. - Header font size, text color, background color, horizontal alignment. - Conditional formatting: - Up to 3 rules. - Rule ordering/precedence. - Apply to all numeric fields or selected fields. - Scale-based or logical-condition-based formats. - Scale options: custom palette, steps, mirrored ranges, min/mid/max control with numeric or percentile anchors. - Include totals toggle. - Include null as zero toggle.

LookML formatting and clickable behavior includes: - value_format (Excel-style value formatting). - value_format_name (named/built-in reusable formats). - style (tier formatting behavior). - html (HTML field formatting). - Click/drill behavior control via field parameters (e.g., drill_fields, link).

4) TanStack Table (headless)

TanStack is intentionally unopinionated on visual style, but exposes a strong formatting model through column defs: - Column categories: accessor, display, grouping. - Data/value extraction: - accessorKey, accessorFn, unique id rules. - Rendering hooks: - cell, aggregatedCell, header, footer. - Clear separation of data model concerns (sorting/filtering/grouping) from renderer output.

5) MUI Data Grid

Documented formatting/styling surface includes: - Value pipeline: - valueGetter (derive value used by filter/sort/render baseline). - valueFormatter (display formatting only). - renderCell (custom React rendering). - Header formatting: - headerClassName, headerAlign. - Cell formatting: - cellClassName, column align. - Row formatting: - getRowClassName for row-level dynamic class styling. - Theme/system styling: - sx prop and custom CSS overrides. - striped rows and section styling patterns.

6) DataTables

DataTables formatting-related primitives center on renderer + row callbacks: - columns.render: - Per-cell render function or config. - Orthogonal data support by operation (display, filter, sort, type, plus extension-specific types). - Can return DOM node for display in newer versions. - createdRow: - Hook for row creation styling/manipulation. - rowCallback: - Hook for row-level post-processing each draw.

7) Tabulator

Tabulator has one of the broadest table formatting surfaces: - Column styling/layout props: - hozAlign, vertAlign, headerHozAlign, width/min/max, resizable, frozen, tooltip, cssClass. - Formatter architecture: - formatter, formatterParams. - titleFormatter, titleFormatterParams. - export-specific formatters: formatterPrint, formatterClipboard, formatterHtmlOutput (+ params variants). - rowFormatter for row-level styling. - Built-in formatter catalog includes (documented page list): - plaintext, textarea, html, money, image, link, datetime, datetime diff, tick/cross, color, star, traffic light, progress, array, lookup, json, toggle, row number, row handle, row selection, responsive collapse, adaptable, button variants. - Interaction linkage: - cellClick and related callbacks.

8) AG Grid

AG Grid formatting/styling surface is split across column, cell, and row APIs: - Cell/column: - valueFormatter, valueGetter, cellRenderer. - cellStyle, cellClass, cellClassRules. - headerName, headerClass, headerTooltip (and related header customization). - Row: - rowStyle, getRowStyle. - rowClass, getRowClass. - rowClassRules with dynamic re-evaluation on data change. - Hover/interaction style helpers: - row and column highlight options (ag-row-hover, ag-column-hover behavior patterns).

9) In-cell visuals across tools (bars/sparks)

Cross-tool evidence supports treating bars/sparklines as formatting-owned cell visuals: - Metabase: number columns can display mini bar charts in cells. - Looker: table options include cell visualizations (bars) alongside value/text formatting. - Superset: conditional formatting includes a CELL_BAR object type. - Tabulator: progress/traffic/star and related formatters are cell formatter variants, not separate chart objects.

Implication for Dataface: - In-cell bars/sparklines should live under the same formatting schema as number/text/link behavior. - Existing spark support should be migrated into this unified formatting namespace, not kept as a parallel feature path.

Tableau: Full Table Formatting Feature Set

Tableau’s table/crosstab-related formatting is broad and layered. The full documented feature set relevant to tables includes:

A) Workbook-level formatting

B) Worksheet-level formatting (table-centric core)

C) Field and value formatting

D) Table size and cell geometry controls

E) Text elements and tooltip formatting

F) Totals and subtotals in table workflows

G) Scope and copy behavior

Cross-Tool Synthesis

Recommendation Impact for Dataface

Sources