OptionalaggregatesAggregates perform a calculation over an entire column, and are
displayed when one or more Group By are applied to the
View. Aggregates can be specified by the user, or Perspective will
use the following sensible default aggregates based on column type:
integer and float columnsPerspective provides a selection of aggregate functions that can be
applied to columns in the View constructor using a dictionary of
column name to aggregate function name.
An aggregate also determines the column's RESULT TYPE, which need
not match the input: "count" yields an integer whatever it
counts, so a date column left on the default "count" is an
integer in the resulting View — no longer a date. Set an
aggregate that preserves the type (e.g. "any", "last") when
the original type matters, such as a date used as a chart axis.
OptionalcolumnsThe columns property specifies which columns should be included in the
[crate::View]'s output. This allows users to show or hide a specific
subset of columns, as well as control the order in which columns
appear to the user. This is represented in Perspective as an array
of string column names.
Optionalcolumns_Per-column styling — formatting, colors, and other per-column
controls — keyed by column name. Plugin-defined like
[Self::plugin_config]; see get_style_schema.
OptionalexpressionsThe expressions property specifies new columns in Perspective that
are created using existing column values or arbitary scalar values
defined within the expression. In <perspective-viewer>,
expressions are added using the "New Column" button in the side
panel.
OptionalfilterThe filter property specifies columns on which the query can be
filtered, returning rows that pass the specified filter condition.
This is analogous to the WHERE clause in SQL. There is no limit on
the number of columns where filter is applied, but the resulting
dataset is one that passes all the filter conditions, i.e. the
filters are joined with an AND condition.
Perspective represents filter as an array of arrays, with the values
of each inner array being a string column name, a string filter
operator, and a filter operand in the type of the column.
Optionalfilter_Optionalgroup_A group by groups the dataset by the unique values of each column used
as a group by - a close analogue in SQL to the GROUP BY statement.
The underlying dataset is aggregated to show the values belonging to
each group, and a total row is calculated for each group, showing
the currently selected aggregated value (e.g. sum) of the column.
Group by are useful for hierarchies, categorizing data and
attributing values, i.e. showing the number of units sold based on
State and City. In Perspective, group by are represented as an array
of string column names to pivot, are applied in the order provided;
For example, a group by of ["State", "City", "Postal Code"] shows
the values for each Postal Code, which are grouped by City,
which are in turn grouped by State.
Optionalgroup_Optionalgroup_OptionalpluginName of the visualization plugin, from the set registered on the
page (the list_plugins agent tool, or the plugin picker).
Decides what the view fields MEAN: columns is positional and
every plugin reads the positions differently, and
group_by/split_by draw different things per plugin. Absent
uses the default plugin.
Optionalplugin_Plugin-wide settings (as opposed to the per-column
[Self::columns_config]). Opaque to the viewer and defined by
the ACTIVE plugin; query the valid keys with get_style_schema
rather than guessing.
OptionalsortThe sort property specifies columns on which the query should be
sorted, analogous to ORDER BY in SQL. A column can be sorted
regardless of its data type, and sorts can be applied in ascending
or descending order. Perspective represents sort as an array of
arrays, with the values of each inner array being a string column
name and a string sort direction. When column-pivots are applied,
the additional sort directions "col asc" and "col desc" will
determine the order of pivot columns groups.
sort is the ONLY thing that orders a View's rows — without it
they keep the Table's natural (insertion) order, which any
consumer reading rows sequentially will reflect. Not to be
confused with a window column's order_by, which orders rows
WITHIN a window frame and does not reorder the View.
Optionalsplit_A split by splits the dataset by the unique values of each column used
as a split by. The underlying dataset is not aggregated, and a new
column is created for each unique value of the split by. Each newly
created column contains the parts of the dataset that correspond to
the column header, i.e. a View that has ["State"] as its split
by will have a new column for each state. In Perspective, Split By
are represented as an array of string column names to pivot.
Optionalsplit_Name of the Table the new panel renders, as hosted on the
Client. REQUIRED: a placed panel with no table binding would be
permanently blank.
OptionalthemeTheme NAME (e.g. "Pro Dark") — not a CSS value. Valid names are
the Perspective themes loaded on the page. Absent uses the
default.
OptionaltitlePanel title, shown in its tab. Absent renders the default title.
OptionalversionThe @perspective-dev/viewer version a saved config was written
by. Omit it when creating a panel.
OptionalwindowsThe windows property declares ordered, partitioned rolling
computations (moving aggregates, cumulative sums) as new columns
keyed by output alias ({"name": {...spec}}, symmetric with
expressions), analogous to SQL window functions. See
[crate::config::WindowSpec].
The initial configuration of a NEW panel (
addPanel,restore's panel-creating upsert,restoreWorkspacepanelsentries). Unlike [ViewerConfigUpdate] — a patch against existing state — creation has no prior state:tableis REQUIRED (a placed panel without a table binding would be permanently blank), absent fields mean "default" rather than "leave unchanged" (so no [OptionalUpdate] tri-state), and there is nosettingsfield (element-level, not per-panel).