Skip to content
GitHub

Table

Table manifests describe tables bound to datasets. They control formatting, grouping, scenarios, and optional drilldown views.

apiVersion: bino.bi/v1alpha1
kind: Table
metadata:
  name: revenue_table
spec:
  dataset: revenue_by_customer
  tableTitle: "Top customers"
  filter: "region = 'DE'"
  order: ac1                         # category | categoryindex | rowgroup | rowgroupindex | ac1-4 | fc1-4 | pp1-4 | pl1-4 | auto
  orderDirection: desc
  measureScale: M
  measureType: currency              # volume | currency
  measureUnit: "EUR"
  internationalisation: "_system"
  internationalisationMode: "default"
  translation: "table.revenue.by_customer"
  categoryWidth: w25                 # w5 | w10 | w15 | w20 | w25 | w50 | inf
  dataFormat: decimal                # percent | decimal
  dataFormatDigitsDecimal: 1
  dataFormatDigitsPercent: 1
  grouped: true
  showGroupTitle: true
  showMeasureScale: true
  limit: 10
  type: list                         # list | sum | opt | sumnototal | optnototal
  scenarios: ["ac1", "py1"]          # ac1-4 | fc1-4 | pp1-4 | pl1-4 | auto
  variances: ["dpy1_ac1_pos"]
  barColumns: []                     # columns to render as inline bar charts
  barColumnWidth: w10                # w5 | w10 | w15 | w20 | w25 | w30 | w40 | w60 | w80 | w100
  scale: auto                        # "" | none | auto | 0.5 | 1.2 | …
  unitScaling: 0.01                  # pixels per unit for absolute variance bars
  percentageScaling: 0.5             # pixels per percentage for relative variance pins
  thereof: []
  partof: []
  columnthereof: null
  • dataset – required dataset reference.
  • tableTitle – optional human-readable title.
  • filter – optional filter expression.
  • order – sort key; using scenario names requires them to appear in scenarios. Set to auto to detect from the dataset silently. Default: category.
  • orderDirection – sort direction (asc or desc).
  • measureScale, measureType, measureUnit – control how measures are interpreted and displayed.
  • categoryWidth – width of the category column (w5..w50, inf).
  • dataFormat, dataFormatDigitsDecimal, dataFormatDigitsPercent – number formatting.
  • grouped, showGroupTitle – group rows by rowgroup and optionally show group headers.
  • showMeasureScale – toggle measure unit in table header.
  • limit – maximum rows per group; extra rows are cumulated as REST.
  • type – table type (list, sum, opt, sumnototal, optnototal).
  • scenarios – list of scenario measures, or auto. When set to auto, scenarios are detected from the dataset silently. When left blank (and variances are also blank), they are detected with a warning.
  • variances – list of variance definitions of the form d<scenarioB>_<scenarioA>_[pos|neg|neu].
  • barColumns – list of column names to render as inline IBCS-compliant bar charts instead of numbers.
  • barColumnWidth – maximum width of inline bar/pin chart columns in em (w5..w100). Default: w10.
  • unitScaling – pixels per unit for absolute variance bars (d_ prefix columns). Default: 0.01.
  • percentageScaling – pixels per percentage point for relative variance pins (dr_ prefix columns). Default: 0.5.
  • scale – proportional scaling of the entire table (font size, em-based spacing, SVG bar charts, pins, patterns). All visual dimensions scale together.
    • not set or "" – auto-scale to fit the parent width; emits an AUTO_scale warning with the applied factor.
    • "none" – no scaling; render at the base font size regardless of available space.
    • "auto" – auto-scale to fit the parent width silently (no warning).
    • A positive number ("0.5", "1.2", …) – fixed factor applied to the base font size.
  • thereof, partof, columnthereof – drilldown configuration.
---
apiVersion: bino.bi/v1alpha1
kind: Table
metadata:
  name: revenue_grouped_table
spec:
  dataset: revenue_detail
  tableTitle: "Revenue by segment and product"
  measureScale: M
  measureType: currency
  measureUnit: "EUR"
  grouped: true
  showGroupTitle: true
  categoryWidth: w25
  type: list
  limit: 5
  scenarios: ["ac1", "py1"]
  variances: ["dpy1_ac1_pos"]
  thereof:
    - rowGroup: "Revenue"
      category: "Applications"
      subCategory: "Applications-A"
  partof:
    - rowGroup: "Revenue"
      category: "Applications"
  columnthereof:
    - scenario: "ac1"
      name: "DE"
      subGroups: ["Berlin", "Hamburg"]

Render variance and scenario columns as inline IBCS-compliant bar charts using barColumns:

---
apiVersion: bino.bi/v1alpha1
kind: Table
metadata:
  name: revenue_with_bars
spec:
  dataset: revenue_by_segment
  tableTitle: "Revenue variance analysis"
  measureScale: M
  measureUnit: "EUR"
  scenarios: ["ac1", "pp1"]
  variances: ["dac1_pp1_pos", "drac1_pp1_pos"]
  barColumns: ["dac1_pp1_pos", "drac1_pp1_pos"]
  unitScaling: 0.02
  percentageScaling: 1
Column prefixVisualizationDescription
d_ (absolute variance)Horizontal barBar extends left (negative) or right (positive) from center axis. Green for positive-good, red for negative-bad.
dr_ (relative variance)Pin/dot chartThin colored line from axis with dot at end. Arrow for extreme values (>100%). Italic percentage label.
ac, pp, fc, pl (scenarios)IBCS grayscale barsAC: dark gray solid, PP: light gray solid, FC: dark gray hatched, PL: dark gray outlined.
---
apiVersion: bino.bi/v1alpha1
kind: Table
metadata:
  name: scenario_bars
spec:
  dataset: quarterly_data
  tableTitle: "Quarterly comparison"
  scenarios: ["ac1", "pp1", "fc1"]
  barColumns: ["ac1", "pp1", "fc1"]

Use scale to shrink or grow the entire table proportionally. Font size, em-based padding, border widths, SVG bar charts, pin lengths, dot radii, and hatch patterns all scale together.

---
apiVersion: bino.bi/v1alpha1
kind: Table
metadata:
  name: scaled_table
spec:
  dataset: revenue_by_segment
  tableTitle: "Revenue (auto-fit)"
  scenarios: ["ac1", "pp1"]
  scale: auto           # shrink to fit the available card width
ValueBehaviour
not set / ""Auto-scale to fit the parent width. Emits an AUTO_scale warning with the applied factor.
noneNo scaling. The table renders at its base font size regardless of available space.
autoAuto-scale to fit the parent width silently (no warning).
0.5, 1.2, …Fixed factor applied to the base font size. All dimensions scale proportionally.

Instead of repeating scenarios, variances, order, and orderDirection on every component, you can inherit them from an ancestor LayoutPage or LayoutCard. Set any of these fields to a special keyword:

ValueResolves from
inherited-closestNearest ancestor LayoutCard or LayoutPage
inherited-pageNearest ancestor LayoutPage only (skips cards)

The inherited value is read from the ancestor’s corresponding titleScenarios, titleVariances, titleOrder, or titleOrderDirection field. If no ancestor is found, the component falls back to its normal auto-detection logic.

children:
  - kind: Table
    spec:
      dataset: revenue_data
      grouped: true
      type: sum
      scenarios: inherited-page       # uses page's titleScenarios
      variances: inherited-page       # uses page's titleVariances

See the ChartStructure inherited props section for full examples.

AttributeTypeRequiredDefaultDescription
apiVersionstringyesMust be bino.bi/v1alpha1.
kindstringyesMust be Table.
metadata.namestringyesUnique identifier.
metadata.labelsobjectnoKey-value pairs for categorization and constraint matching.
metadata.annotationsobjectnoArbitrary key-value metadata, not used by the system.
metadata.descriptionstringnoFree-form description.
metadata.constraintsarraynoConditional inclusion rules. See Constraints.
AttributeTypeRequiredDefaultDescriptionSample
spec.datasetstring or objectyesDataset reference (name or inline definition). Provided by the withDataset mixin in the template engine.dataset: revenue_by_customer
spec.tableTitlestringno""Descriptive title displayed above the table.tableTitle: "Top customers"
spec.filterstringno""AlaSQL WHERE clause fragment to filter rows before rendering.filter: "region = 'DE'"
spec.orderstringnocategorySort key. Values: category, categoryindex, rowgroup, rowgroupindex, ac1ac4, fc1fc4, pp1pp4, pl1pl4, auto, inherited-closest, inherited-page.order: ac1
spec.orderDirectionstringnoascSort direction. Values: asc, desc, inherited-closest, inherited-page.orderDirection: desc
spec.measureScalestringnogreatestSI prefix for measure scaling. Values: _, k, M, G, T, P, E, Z, Y, m, μ, n, p, f, a, z, y, GREATEST, LEAST.measureScale: M
spec.measureTypestringnovolumeMeasure interpretation. Values: volume, currency.measureType: currency
spec.measureUnitstringno""Unit string displayed in headers.measureUnit: "EUR"
spec.categoryWidthstringnow15Width of the category column. Values: w5, w10, w15, w20, w25, w50, inf.categoryWidth: w25
spec.dataFormatstringnodecimalNumber formatting. Values: percent, decimal.dataFormat: decimal
spec.dataFormatDigitsDecimalintegerno1Number of decimal digits in table cells.dataFormatDigitsDecimal: 2
spec.dataFormatDigitsPercentintegerno2Number of percent digits in table cells.dataFormatDigitsPercent: 1
spec.groupedbooleannofalseGroup rows by rowGroup dimension.grouped: true
spec.showGroupTitlebooleannotrueShow group header rows when grouped.showGroupTitle: true
spec.showMeasureScalebooleannofalseToggle measure unit in table header.showMeasureScale: true
spec.limitintegerno0Maximum rows per group. Extra rows are cumulated as REST. 0 means unlimited.limit: 10
spec.typestringnolistTable type. Values: list, sum, opt, sumnototal, optnototal.type: sum
spec.scenariosstring or arraynoScenario measures to display. Values: ac1ac4, fc1fc4, pp1pp4, pl1pl4, auto, inherited-closest, inherited-page.scenarios: ["ac1", "py1"]
spec.variancesstring or arraynoVariance definitions. Pattern: d<scenarioB>_<scenarioA>_[pos|neg|neu]. Also accepts inherited-closest or inherited-page.variances: ["dpy1_ac1_pos"]
spec.barColumnsstring or arraynoColumn names to render as inline IBCS-compliant bar/pin charts.barColumns: ["dac1_pp1_pos"]
spec.barColumnWidthstringnow10Maximum width of inline bar chart columns. Values: w5, w10, w15, w20, w25, w30, w40, w60, w80, w100.barColumnWidth: w20
spec.unitScalingnumberno0.01Pixels per unit for absolute variance bars (d_ prefix columns).unitScaling: 0.02
spec.percentageScalingnumberno0.5Pixels per percentage point for relative variance pins (dr_ prefix columns).percentageScaling: 1
spec.scalestring or numbernoauto-scale with warningProportional scaling of the entire table. "" or omitted: auto-scale with warning. "none": no scaling. "auto": auto-scale silently. Positive number: fixed factor.scale: auto
spec.internationalisationstringnoi18n namespace for the table. Maps to the internationalisation HTML attribute.internationalisation: "_system"
spec.internationalisationModestringnoi18n mode. Maps to the internationalisation-mode HTML attribute.internationalisationMode: "default"
spec.translationstringnoTranslation key prefix for table labels.translation: "table.revenue"
spec.thereofstring or arrayno[]Drilldown rows (subCategory level).see below
spec.partofstring or arrayno[]Part-of groupings (category level).see below
spec.columnthereofstring, array, or nullnonullColumn-level drilldown configuration.see below
spec:
  thereof:
    - rowGroup: "Revenue"
      category: "Applications"
      subCategory: "Applications-A"
spec:
  partof:
    - rowGroup: "Revenue"
      category: "Applications"
spec:
  columnthereof:
    - scenario: "ac1"
      name: "DE"
      subGroups: ["Berlin", "Hamburg"]