Skip to content
GitHub

ChartTime

ChartTime manifests describe time-based charts. They share many fields with ChartStructure but add date-axis-specific options.

apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_time_chart
spec:
  dataset: revenue_daily
  chartTitle: "Daily revenue"
  chartMode: bar             # bar | line | auto
  maxBars: 28                # threshold for auto mode
  lineFullWidth: true         # stretch line charts to full width
  axisLabelsMode: smart      # smart | long | short
  dateInterval: auto         # year | quarter | month | week | day | hour | minute | second | millisecond | auto
  filter: "region_group = 'EMEA'"
  level: auto                # rowcategory | category | subcategory | auto
  order: auto                # category | categoryindex | rowgroup | rowgroupindex | ac1-4 | fc1-4 | pp1-4 | pl1-4 | auto
  orderDirection: asc
  measureScale: M
  measureUnit: "EUR"
  internationalisation: "_system"
  internationalisationMode: "default"
  translation: "chart.revenue.time"
  showCategories: true
  showMeasureScale: true
  showOverlayAvg: true
  showOverlayMedian: false
  limit: 0
  intervalSpanLimit: 50
  percentageScaling: "default"
  unitScaling: "default"
  syncSpaceLeft: 0
  scenarios: ["ac1", "fc1"]   # ac1-4 | fc1-4 | pp1-4 | pl1-4 | auto
  variances: ["dfc1_ac1_pos"]
  scale: auto                    # "" | none | auto | 0.5 | 1.2 | …
  stack:                       # optional stacked chart config
    by: scenarioss              # scenarios | dimensions
    mode: absolute             # absolute | relative | absolute-relative
    order: dataset             # asc | desc | dataset
  • dataset – required dataset name or array.
  • chartTitle – optional title.
  • chartMode – rendering mode: bar (default), line, or auto. When set to auto, the chart automatically switches to line mode when data points exceed maxBars.
  • maxBars – threshold for auto-switching to line mode (default: 28). Only applies when chartMode is auto.
  • lineFullWidth – when true (default in the renderer), line charts stretch to fill the full parent width instead of using fixed per-data-point spacing. Has no effect in bar mode.
  • axisLabelsModesmart (context-aware labels), long, or short.
  • dateInterval – desired time granularity; auto lets the renderer choose based on dataset meta.
  • filter – optional filter expression.
  • level – aggregation level: rowcategory, category, subcategory, or auto. When set to auto, the level is detected from the dataset silently. When left blank, it is detected with a warning.
  • order – sort key; if you use a scenario, it must appear in scenarios. Set to auto to detect from the dataset silently. When left blank, it is detected with a warning.
  • orderDirection – sort direction (asc or desc).
  • measureScale, measureUnit – SI prefix and unit string.
  • showCategories, showMeasureScale – visibility flags.
  • showOverlayAvg, showOverlayMedian – enables overlay lines.
  • limit – column stack limit; 0 means unlimited.
  • intervalSpanLimit – controls how many columns drive automatic date interval selection.
  • percentageScaling, unitScaling, syncSpaceLeft – scaling and sync options. When unitScaling is set to a numeric value and bars exceed the available container height, an overdrive bar is rendered: the bar is visually split into a base section, a zigzag break indicator, and a proportionally scaled overdrive section above it. This preserves value labels and relative comparisons between overflowing bars instead of clipping them. AC scenario bars break at a higher point than non-AC scenarios (PP, FC, PL) to maintain visual hierarchy.
  • scenarios – list of scenarios (up to 4); values like ac1ac4, fc1fc4, pp1pp4, pl1pl4, or auto. When set to auto, scenarios are detected from the dataset silently. When left blank, they are detected with a warning.
  • variances – list of variance definitions of the form d<scenarioB>_<scenarioA>_[pos|neg|neu].
  • scale – proportional scaling of the chart (font size, spacings, and bar/column dimensions all scale together). Scaling triggers on width overflow (horizontal axis labels cut off).
    • 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).
    • "0.5", "1.2", … – fixed factor applied to the base font size. All dimensions scale proportionally.
  • stack – optional object to enable stacked rendering:
    • by – (required) stacking dimension: scenarios stacks scenario slots end-to-end; dimensions auto-derives the stack column from the level prop (rowGroupcategory, categorysubCategory). When using dimensions, only the first scenario is used; additional scenarios are discarded with a warning.
    • mode – stacking mode: absolute (additive, default), relative (100% stacked), or absolute-relative (absolute height with percentage labels).
    • order – segment order within each stack: asc, desc, or dataset (default).
    • When chartMode is bar, produces stacked columns. When chartMode is line, produces a stacked area chart.
---
apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_monthly_chart
spec:
  dataset: revenue_monthly
  chartTitle: "Monthly revenue"
  axisLabelsMode: smart
  dateInterval: month
  level: category
  order: category
  orderDirection: asc
  measureScale: M
  measureUnit: "EUR"
  showMeasureScale: true
  showOverlayAvg: true
  scenarios: ["ac1"]
ChartTime showing monthly revenue trend as line chart with AC, PY, and FC scenarios

Force line chart rendering with square markers at each data point:

---
apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_line_chart
spec:
  dataset: revenue_daily
  chartTitle: "Daily revenue trend"
  chartMode: line
  dateInterval: day
  measureScale: M
  measureUnit: "EUR"
  scenarios: ["ac1", "pp1"]

Automatically switch to line chart when data points exceed the threshold:

---
apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_auto_chart
spec:
  dataset: revenue_weekly
  chartTitle: "Weekly revenue"
  chartMode: auto
  maxBars: 15
  dateInterval: week
  measureScale: M
  measureUnit: "EUR"
  scenarios: ["ac1", "fc1"]

When rendered in line mode:

  • Square markers (8×8px) at each data point
  • Data values displayed above each marker
  • Scenario labels positioned to the right of the last data point
  • Smart X-axis labels showing start, end, and year boundaries
  • Vertical dashed separator lines at year transitions
  • IBCS color schema:
    • AC (Actual): Black fill, black stroke, solid line
    • PP (Previous Period): Gray fill, gray stroke, solid line
    • FC (Forecast): White fill, black stroke, dashed line
    • PL (Plan): White fill, black stroke, solid line

When unitScaling is set to a fixed numeric value (not auto), bars may exceed the available container height. Instead of silently clipping the bars, the renderer applies overdrive rendering:

  1. Base section – the bar is drawn up to a computed cut height that fits within the container.
  2. Break indicator – a zigzag line across the bar width signals the axis break.
  3. Overdrive section – a proportionally scaled continuation above the break shows how much the bar exceeds the cut point.

Bars that fit within the available space render normally. Among overflowing bars, the overdrive height is proportional to the overflow amount, so a bar overflowing by 200 px gets twice the overdrive of one overflowing by 100 px.

AC scenario bars break at a higher point than PP, FC, and PL bars. This staggered break position maintains the IBCS visual hierarchy between scenario types.

Overdrive bars apply to bar mode only and do not affect line charts, stacked charts, or auto-fit scaling. The existing overflow warning is still emitted alongside the visual treatment.

Stack AC and PP values as additive columns:

---
apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_stacked_chart
spec:
  dataset: revenue_monthly
  chartTitle: "Revenue stacked by scenario"
  dateInterval: month
  unitScaling: 0.05
  scenarios: ["ac1", "pp1"]
  stack:
    by: scenarios
    mode: absolute

Show the relative contribution of each scenario:

---
apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_relative_stacked
spec:
  dataset: revenue_monthly
  chartTitle: "Revenue share by scenario"
  dateInterval: month
  unitScaling: 100
  scenarios: ["ac1", "pp1", "fc1"]
  stack:
    by: scenarios
    mode: relative

Combine chartMode: line with stack to render stacked area fills:

---
apiVersion: bino.bi/v1alpha1
kind: ChartTime
metadata:
  name: revenue_stacked_area
spec:
  dataset: revenue_monthly
  chartTitle: "Revenue trend (stacked area)"
  chartMode: line
  dateInterval: month
  unitScaling: 0.05
  scenarios: ["ac1", "pp1", "fc1"]
  stack:
    by: scenarios
    mode: absolute
AttributeTypeRequiredDefaultDescription
apiVersionstringyesMust be bino.bi/v1alpha1.
kindstringyesMust be ChartTime.
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_daily
spec.chartTitlestringno""Custom chart title.chartTitle: "Daily revenue"
spec.chartModestringnobarRendering mode. Values: bar, line, auto. When auto, switches to line when data points exceed maxBars.chartMode: line
spec.maxBarsintegerno28Threshold for auto-switching to line mode. Only applies when chartMode is auto. Minimum: 1.maxBars: 15
spec.lineFullWidthbooleannotrueStretch line charts to fill full parent width. Has no effect in bar mode.lineFullWidth: true
spec.axisLabelsModestringnoAxis label rendering. Values: smart (context-aware), long, short.axisLabelsMode: smart
spec.dateIntervalstringnoauto-detectTime granularity. Values: year, quarter, month, week, day, hour, minute, second, millisecond, auto.dateInterval: month
spec.filterstringno""AlaSQL WHERE clause fragment to filter rows.filter: "region_group = 'EMEA'"
spec.levelstringnoauto-detect with warningAggregation level. Values: rowcategory, category, subcategory, auto.level: category
spec.orderstringnoauto-detect with warningSort key. Values: category, categoryindex, rowgroup, rowgroupindex, ac1ac4, fc1fc4, pp1pp4, pl1pl4, auto.order: ac1
spec.orderDirectionstringnoascSort direction. Values: asc, desc.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.measureUnitstringno""Unit string for the chart axis.measureUnit: "EUR"
spec.unitScalingstring or numbernoName of a scaling group or numeric pixels-per-unit factor. Numeric values enable overdrive bars on overflow.unitScaling: 0.05
spec.percentageScalingstring or numbernoName of a scaling group or numeric pixels-per-percentage factor.percentageScaling: 50
spec.syncSpaceLeftnumberno-1Synchronize left axis space across charts (pixels). -1 disables.syncSpaceLeft: 80
spec.showCategoriesbooleannotrueShow category labels.showCategories: false
spec.showMeasureScalebooleannofalseShow measure unit in chart header.showMeasureScale: true
spec.showOverlayAvgbooleannotrueShow average overlay line.showOverlayAvg: true
spec.showOverlayMedianbooleannofalseShow median overlay line.showOverlayMedian: true
spec.limitintegerno0Column stack limit. 0 means unlimited.limit: 12
spec.intervalSpanLimitintegerno28Controls how many columns drive automatic date interval selection.intervalSpanLimit: 50
spec.scenariosstring or arraynoScenario measures (up to 4). Values: ac1ac4, fc1fc4, pp1pp4, pl1pl4, or auto.scenarios: ["ac1", "fc1"]
spec.variancesstring or arraynoVariance definitions. Pattern: d<scenarioB>_<scenarioA>_[pos|neg|neu].variances: ["dfc1_ac1_pos"]
spec.scalestring or numbernoauto-scale with warningProportional scaling. "" or omitted: auto-scale to fit parent width with warning. "none": no scaling. "auto": auto-scale silently. Positive number: fixed factor.scale: auto
spec.internationalisationstringnoi18n namespace. Maps to the internationalisation HTML attribute.internationalisation: "_system"
spec.internationalisationModestringnoi18n mode.internationalisationMode: "default"
spec.translationstringnoTranslation key prefix.translation: "chart.revenue.time"
spec.stackobjectnoStacked rendering configuration. When chartMode is bar, produces stacked columns. When chartMode is line, produces stacked area chart.see below
spec:
  stack:
    by: scenarios       # scenarios | dimensions
    mode: absolute      # absolute | relative | absolute-relative
    order: dataset      # asc | desc | dataset
PropertyTypeRequiredDefaultDescription
stack.bystringyesStacking dimension. scenarios: stacks scenario slots end-to-end. dimensions: auto-derives from level prop.
stack.modestringnoabsoluteStacking mode. absolute: additive. relative: 100% stacked. absolute-relative: absolute height with percentage labels.
stack.orderstringnodatasetSegment order within each stack. Values: asc, desc, dataset.