Function: defineReportingModel()
function defineReportingModel(config: {
cannedReports?: {
definition: {
aggregations?: {
alias: string;
field?: string;
fn: "min" | "max" | "count" | "avg" | "sum";
}[];
columns: string[];
filter?: unknown;
groupBy?: {
bucket?: "year" | "month" | "day" | "week" | "quarter";
field: string;
}[];
schemaVersion: 1;
sort?: {
by: string;
direction?: "asc" | "desc";
}[];
subject: string;
timezone: string;
totals?: boolean;
};
key: string;
name: string;
}[];
dashboards?: {
filters?: (
| {
field: string;
id: string;
kind: "date-range";
label: string;
}
| {
field: string;
id: string;
kind: "select";
label: string;
multiple?: boolean;
searchable?: boolean;
}
| {
defaultOperator?: "gt" | "lt" | "gte" | "lte" | "eq";
field: string;
format?: "number" | "currency";
id: string;
kind: "measure";
label: string;
operators?: (... | ... | ... | ... | ...)[];
}
| {
field: string;
id: string;
kind: "search";
label: string;
})[];
key: string;
label: string;
tiles: (
| {
id: string;
kind: "metric" | "canned-report";
layout: {
h: number;
w: number;
x: number;
y: number;
};
ref: string;
visualization?: | {
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "metric";
legend?: boolean;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
ticker?: {
colorCoded?: ...;
invertColors?: ...;
label?: ...;
value: ...;
};
tickers?: ...[];
value: string;
}
| {
category: string;
facet?: {
field: ...;
scales?: ...;
};
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "bar";
legend?: boolean;
mode?: "percent" | "stacked" | "grouped" | "diverging";
orientation?: "vertical" | "horizontal";
series: {
colorSlot?: ...;
field: ...;
label?: ...;
}[];
summary?: {
field: ...;
fn: ...;
label?: ...;
};
}
| {
bars: {
colorSlot?: ...;
field: ...;
label?: ...;
}[];
curve?: "linear" | "monotone";
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "combo";
legend?: boolean;
lines: {
colorSlot?: ...;
field: ...;
label?: ...;
}[];
summary?: {
field: ...;
fn: ...;
label?: ...;
};
x: string;
}
| {
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "gauge";
legend?: boolean;
limit?: number;
limitField?: string;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
sweep?: 180 | 270 | 360;
thresholds?: ...[];
value: string;
}
| {
area?: boolean;
compact?: boolean;
curve?: "linear" | "monotone";
facet?: {
field: ...;
scales?: ...;
};
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "line";
legend?: boolean;
points?: boolean;
series: {
colorSlot?: ...;
field: ...;
label?: ...;
}[];
stack?: "none" | "absolute" | "percent";
summary?: {
field: ...;
fn: ...;
label?: ...;
};
x: string;
}
| {
category: string;
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
innerRadiusRatio?: number;
kind: "pie";
legend?: boolean;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
value: string;
}
| {
facet?: {
field: ...;
scales?: ...;
};
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
group?: string;
kind: "scatter";
label?: string;
legend?: boolean;
size?: string;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
x: string;
y: string;
}
| {
bins?: number;
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "histogram";
legend?: boolean;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
value: string;
}
| {
color?: "diverging" | "sequential";
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "heatmap";
legend?: boolean;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
value: string;
x: string;
y: string;
}
| {
after: string;
before: string;
category: string;
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "dumbbell";
legend?: boolean;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
}
| {
category: string;
change: string;
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "waterfall";
legend?: boolean;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
total?: string;
}
| {
conversion?: "previous" | "first";
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "funnel";
legend?: boolean;
stage: string;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
value: string;
}
| {
color?: "diverging" | "sequential";
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "us-map";
label?: string;
latitude: string;
legend?: boolean;
longitude: string;
state: string;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
value: string;
}
| {
color?: "diverging" | "sequential";
format?: {
compact?: ...;
dateStyle?: ...;
maximumFractionDigits?: ...;
wholeNumberTicks?: ...;
};
grid?: boolean;
kind: "choropleth";
legend?: boolean;
region: string;
summary?: {
field: ...;
fn: ...;
label?: ...;
};
value: string;
}
| {
kind: "table";
};
}
| {
background?: boolean;
id: string;
kind: "text-cell";
layout: {
h: number;
w: number;
x: number;
y: number;
};
ref?: undefined;
text: string;
variant: "body" | "heading-1" | "heading-2";
visualization?: undefined;
})[];
}[];
metrics?: {
aggregation: {
field?: string;
fn: "min" | "max" | "count" | "avg" | "sum";
};
dateField?: string;
filter?: unknown;
format?: {
money?: {
currencyCode?: string;
representation: "decimal" | "minorUnits";
scale?: number;
};
type: "string" | "number" | "boolean" | "date" | "enum" | "datetime" | "money";
};
key: string;
label: string;
subject: string;
}[];
subjects: {
defaultColumns?: string[];
fields: {
capabilities?: {
aggregatable?: boolean;
filterable?: boolean;
groupable?: boolean;
sortable?: boolean;
};
column: string;
enumValues?: string[];
key: string;
label: string;
money?: {
currencyCode?: string;
representation: "decimal" | "minorUnits";
scale?: number;
};
type: "string" | "number" | "boolean" | "date" | "enum" | "datetime" | "money";
}[];
key: string;
label: string;
softDelete?: {
column: string;
};
table: string;
tenantColumn: string;
tenantColumnType: "uuid" | "text";
}[];
}): ReportingModel;Defined in: server/insights/model/define-reporting-model.ts:816
Parameters
| Parameter | Type |
|---|---|
config | { cannedReports?: { definition: { aggregations?: { alias: string; field?: string; fn: "min" | "max" | "count" | "avg" | "sum"; }[]; columns: string[]; filter?: unknown; groupBy?: { bucket?: "year" | "month" | "day" | "week" | "quarter"; field: string; }[]; schemaVersion: 1; sort?: { by: string; direction?: "asc" | "desc"; }[]; subject: string; timezone: string; totals?: boolean; }; key: string; name: string; }[]; dashboards?: { filters?: ( | { field: string; id: string; kind: "date-range"; label: string; } | { field: string; id: string; kind: "select"; label: string; multiple?: boolean; searchable?: boolean; } | { defaultOperator?: "gt" | "lt" | "gte" | "lte" | "eq"; field: string; format?: "number" | "currency"; id: string; kind: "measure"; label: string; operators?: (... | ... | ... | ... | ...)[]; } | { field: string; id: string; kind: "search"; label: string; })[]; key: string; label: string; tiles: ( | { id: string; kind: "metric" | "canned-report"; layout: { h: number; w: number; x: number; y: number; }; ref: string; visualization?: | { format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "metric"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; ticker?: { colorCoded?: ...; invertColors?: ...; label?: ...; value: ...; }; tickers?: ...[]; value: string; } | { category: string; facet?: { field: ...; scales?: ...; }; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "bar"; legend?: boolean; mode?: "percent" | "stacked" | "grouped" | "diverging"; orientation?: "vertical" | "horizontal"; series: { colorSlot?: ...; field: ...; label?: ...; }[]; summary?: { field: ...; fn: ...; label?: ...; }; } | { bars: { colorSlot?: ...; field: ...; label?: ...; }[]; curve?: "linear" | "monotone"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "combo"; legend?: boolean; lines: { colorSlot?: ...; field: ...; label?: ...; }[]; summary?: { field: ...; fn: ...; label?: ...; }; x: string; } | { format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "gauge"; legend?: boolean; limit?: number; limitField?: string; summary?: { field: ...; fn: ...; label?: ...; }; sweep?: 180 | 270 | 360; thresholds?: ...[]; value: string; } | { area?: boolean; compact?: boolean; curve?: "linear" | "monotone"; facet?: { field: ...; scales?: ...; }; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "line"; legend?: boolean; points?: boolean; series: { colorSlot?: ...; field: ...; label?: ...; }[]; stack?: "none" | "absolute" | "percent"; summary?: { field: ...; fn: ...; label?: ...; }; x: string; } | { category: string; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; innerRadiusRatio?: number; kind: "pie"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { facet?: { field: ...; scales?: ...; }; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; group?: string; kind: "scatter"; label?: string; legend?: boolean; size?: string; summary?: { field: ...; fn: ...; label?: ...; }; x: string; y: string; } | { bins?: number; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "histogram"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { color?: "diverging" | "sequential"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "heatmap"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; value: string; x: string; y: string; } | { after: string; before: string; category: string; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "dumbbell"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; } | { category: string; change: string; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "waterfall"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; total?: string; } | { conversion?: "previous" | "first"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "funnel"; legend?: boolean; stage: string; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { color?: "diverging" | "sequential"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "us-map"; label?: string; latitude: string; legend?: boolean; longitude: string; state: string; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { color?: "diverging" | "sequential"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "choropleth"; legend?: boolean; region: string; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { kind: "table"; }; } | { background?: boolean; id: string; kind: "text-cell"; layout: { h: number; w: number; x: number; y: number; }; ref?: undefined; text: string; variant: "body" | "heading-1" | "heading-2"; visualization?: undefined; })[]; }[]; metrics?: { aggregation: { field?: string; fn: "min" | "max" | "count" | "avg" | "sum"; }; dateField?: string; filter?: unknown; format?: { money?: { currencyCode?: string; representation: "decimal" | "minorUnits"; scale?: number; }; type: "string" | "number" | "boolean" | "date" | "enum" | "datetime" | "money"; }; key: string; label: string; subject: string; }[]; subjects: { defaultColumns?: string[]; fields: { capabilities?: { aggregatable?: boolean; filterable?: boolean; groupable?: boolean; sortable?: boolean; }; column: string; enumValues?: string[]; key: string; label: string; money?: { currencyCode?: string; representation: "decimal" | "minorUnits"; scale?: number; }; type: "string" | "number" | "boolean" | "date" | "enum" | "datetime" | "money"; }[]; key: string; label: string; softDelete?: { column: string; }; table: string; tenantColumn: string; tenantColumnType: "uuid" | "text"; }[]; } |
config.cannedReports? | { definition: { aggregations?: { alias: string; field?: string; fn: "min" | "max" | "count" | "avg" | "sum"; }[]; columns: string[]; filter?: unknown; groupBy?: { bucket?: "year" | "month" | "day" | "week" | "quarter"; field: string; }[]; schemaVersion: 1; sort?: { by: string; direction?: "asc" | "desc"; }[]; subject: string; timezone: string; totals?: boolean; }; key: string; name: string; }[] |
config.dashboards? | { filters?: ( | { field: string; id: string; kind: "date-range"; label: string; } | { field: string; id: string; kind: "select"; label: string; multiple?: boolean; searchable?: boolean; } | { defaultOperator?: "gt" | "lt" | "gte" | "lte" | "eq"; field: string; format?: "number" | "currency"; id: string; kind: "measure"; label: string; operators?: (... | ... | ... | ... | ...)[]; } | { field: string; id: string; kind: "search"; label: string; })[]; key: string; label: string; tiles: ( | { id: string; kind: "metric" | "canned-report"; layout: { h: number; w: number; x: number; y: number; }; ref: string; visualization?: | { format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "metric"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; ticker?: { colorCoded?: ...; invertColors?: ...; label?: ...; value: ...; }; tickers?: ...[]; value: string; } | { category: string; facet?: { field: ...; scales?: ...; }; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "bar"; legend?: boolean; mode?: "percent" | "stacked" | "grouped" | "diverging"; orientation?: "vertical" | "horizontal"; series: { colorSlot?: ...; field: ...; label?: ...; }[]; summary?: { field: ...; fn: ...; label?: ...; }; } | { bars: { colorSlot?: ...; field: ...; label?: ...; }[]; curve?: "linear" | "monotone"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "combo"; legend?: boolean; lines: { colorSlot?: ...; field: ...; label?: ...; }[]; summary?: { field: ...; fn: ...; label?: ...; }; x: string; } | { format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "gauge"; legend?: boolean; limit?: number; limitField?: string; summary?: { field: ...; fn: ...; label?: ...; }; sweep?: 180 | 270 | 360; thresholds?: ...[]; value: string; } | { area?: boolean; compact?: boolean; curve?: "linear" | "monotone"; facet?: { field: ...; scales?: ...; }; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "line"; legend?: boolean; points?: boolean; series: { colorSlot?: ...; field: ...; label?: ...; }[]; stack?: "none" | "absolute" | "percent"; summary?: { field: ...; fn: ...; label?: ...; }; x: string; } | { category: string; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; innerRadiusRatio?: number; kind: "pie"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { facet?: { field: ...; scales?: ...; }; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; group?: string; kind: "scatter"; label?: string; legend?: boolean; size?: string; summary?: { field: ...; fn: ...; label?: ...; }; x: string; y: string; } | { bins?: number; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "histogram"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { color?: "diverging" | "sequential"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "heatmap"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; value: string; x: string; y: string; } | { after: string; before: string; category: string; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "dumbbell"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; } | { category: string; change: string; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "waterfall"; legend?: boolean; summary?: { field: ...; fn: ...; label?: ...; }; total?: string; } | { conversion?: "previous" | "first"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "funnel"; legend?: boolean; stage: string; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { color?: "diverging" | "sequential"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "us-map"; label?: string; latitude: string; legend?: boolean; longitude: string; state: string; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { color?: "diverging" | "sequential"; format?: { compact?: ...; dateStyle?: ...; maximumFractionDigits?: ...; wholeNumberTicks?: ...; }; grid?: boolean; kind: "choropleth"; legend?: boolean; region: string; summary?: { field: ...; fn: ...; label?: ...; }; value: string; } | { kind: "table"; }; } | { background?: boolean; id: string; kind: "text-cell"; layout: { h: number; w: number; x: number; y: number; }; ref?: undefined; text: string; variant: "body" | "heading-1" | "heading-2"; visualization?: undefined; })[]; }[] |
config.metrics? | { aggregation: { field?: string; fn: "min" | "max" | "count" | "avg" | "sum"; }; dateField?: string; filter?: unknown; format?: { money?: { currencyCode?: string; representation: "decimal" | "minorUnits"; scale?: number; }; type: "string" | "number" | "boolean" | "date" | "enum" | "datetime" | "money"; }; key: string; label: string; subject: string; }[] |
config.subjects | { defaultColumns?: string[]; fields: { capabilities?: { aggregatable?: boolean; filterable?: boolean; groupable?: boolean; sortable?: boolean; }; column: string; enumValues?: string[]; key: string; label: string; money?: { currencyCode?: string; representation: "decimal" | "minorUnits"; scale?: number; }; type: "string" | "number" | "boolean" | "date" | "enum" | "datetime" | "money"; }[]; key: string; label: string; softDelete?: { column: string; }; table: string; tenantColumn: string; tenantColumnType: "uuid" | "text"; }[] |