Kaizen
Browse modulesInsightsinsights/serverInterfaces

Interface: ResolvedCannedReport

Defined in: server/insights/model/define-reporting-model.ts:215

Properties

definition

definition: {
  aggregations?: {
     alias: string;
     field?: string;
     fn: "min" | "max" | "count" | "avg" | "sum";
  }[];
  columns: string[];
  filter?: FilterNode;
  groupBy?: {
     bucket?: "year" | "month" | "day" | "week" | "quarter";
     field: string;
  }[];
  schemaVersion: 1;
  sort: {
     by: string;
     direction: "asc" | "desc";
  }[];
  subject: string;
  timezone: string;
  totals?: boolean;
};

Defined in: server/insights/model/define-reporting-model.ts:218

aggregations?

optional aggregations?: {
  alias: string;
  field?: string;
  fn: "min" | "max" | "count" | "avg" | "sum";
}[];

columns

columns: string[];

The SELECT list — and the ONLY source of output columns, for grouped runs as much as detail runs: the compiler derives its projection from columns alone and never from groupBy/aggregations. So an empty columns has no compilable projection at all (not merely a semantically odd one), which makes it a STRUCTURAL failure and puts the check here rather than in validateDefinition. Keeping it in the schema also means every surface that parses a definition — run input, saved-report create/update, normalizeSavedReportDefinition on read, canned reports in the registry — fails closed without having to remember a second validation pass.

filter?

optional filter?: FilterNode;

groupBy?

optional groupBy?: {
  bucket?: "year" | "month" | "day" | "week" | "quarter";
  field: string;
}[];

schemaVersion

schemaVersion: 1;

sort

sort: {
  by: string;
  direction: "asc" | "desc";
}[];

subject

subject: string;

timezone

timezone: string;

totals?

optional totals?: boolean;

key

key: string;

Defined in: server/insights/model/define-reporting-model.ts:216


name

name: string;

Defined in: server/insights/model/define-reporting-model.ts:217

On this page