ObjectStackObjectStack

Analytics

Analytics protocol schemas

Analytics/Semantic Layer Protocol

Defines the "Business Logic" for data analysis.

Inspired by Cube.dev, LookML, and dbt MetricFlow.

This layer decouples the "Physical Data" (Tables/Columns) from the

"Business Data" (Metrics/Dimensions).

Source: packages/spec/src/data/analytics.zod.ts

TypeScript Usage

import { AggregationMetricType, AnalyticsQuery, Cube, CubeJoin, Dimension, DimensionType, Metric, TimeUpdateInterval } from '@objectstack/spec/data';
import type { AggregationMetricType, AnalyticsQuery, Cube, CubeJoin, Dimension, DimensionType, Metric, TimeUpdateInterval } from '@objectstack/spec/data';

// Validate data
const result = AggregationMetricType.parse(data);

AggregationMetricType

Allowed Values

  • count
  • sum
  • avg
  • min
  • max
  • count_distinct
  • number
  • string
  • boolean

AnalyticsQuery

Properties

PropertyTypeRequiredDescription
cubestringoptionalTarget cube name (optional when provided externally, e.g. in API request wrapper)
measuresstring[]List of metrics to calculate
dimensionsstring[]optionalList of dimensions to group by
filtersObject[]optional
timeDimensionsObject[]optional
orderRecord<string, Enum<'asc' | 'desc'>>optional
limitnumberoptional
offsetnumberoptional
timezonestring

Cube

Properties

PropertyTypeRequiredDescription
namestringCube name (snake_case)
titlestringoptional
descriptionstringoptional
sqlstringBase SQL statement or Table Name
measuresRecord<string, Object>Quantitative metrics
dimensionsRecord<string, Object>Qualitative attributes
joinsRecord<string, Object>optional
refreshKeyObjectoptional
publicboolean

CubeJoin

Properties

PropertyTypeRequiredDescription
namestringTarget cube name
relationshipEnum<'one_to_one' | 'one_to_many' | 'many_to_one'>
sqlstringJoin condition (ON clause)

Dimension

Properties

PropertyTypeRequiredDescription
namestringUnique dimension ID
labelstringHuman readable label
descriptionstringoptional
typeEnum<'string' | 'number' | 'boolean' | 'time' | 'geo'>
sqlstringSQL expression or column reference
granularitiesEnum<'second' | 'minute' | 'hour' | 'day' | 'week' | 'month' | 'quarter' | 'year'>[]optional

DimensionType

Allowed Values

  • string
  • number
  • boolean
  • time
  • geo

Metric

Properties

PropertyTypeRequiredDescription
namestringUnique metric ID
labelstringHuman readable label
descriptionstringoptional
typeEnum<'count' | 'sum' | 'avg' | 'min' | 'max' | 'count_distinct' | 'number' | 'string' | 'boolean'>
sqlstringSQL expression or field reference
filtersObject[]optional
formatstringoptional

TimeUpdateInterval

Allowed Values

  • second
  • minute
  • hour
  • day
  • week
  • month
  • quarter
  • year

On this page