Charts and dashboards for people who do not build dashboards
Most teams do not set out to build a dashboard. They keep a table of orders, requests or deals, and one day somebody asks how many are late and who is carrying the most. The usual answer is an export, a pivot table and a screenshot pasted into a message that is out of date by Thursday.
In Appdor the chart reads the same table the team already edits, so there is no export step to forget. Here is what that looks like in practice, and where the limits are.
One table, then a chart
A chart is configured against a table: you choose a chart type, a field to group by, and a measure. The measures the aggregation code supports are count, count of filled values, distinct count, sum, average, minimum, maximum and median (aggregate() in src/charts/aggregate.js). A date field can be grouped by day, week, month, quarter or year, and a chart can be split by a second column so that each value becomes its own series.
There are 25 chart types you can pick and get the chart you asked for. The picker is built only from types the drawing code can really draw, so choosing one never quietly gives you a bar chart instead. The list includes column, bar, line, area, stacked area, pie, donut, scatter, histogram, funnel, waterfall, treemap, heatmap, radar, box plot, gauge and sparkline, among others.
One honest limit: a chart type that draws a single series ignores the split. Pie, line and treemap are examples, and the editor says so with the line "This chart type draws only the first series, so a split is ignored." Stacked bars and columns, stacked area, slope, radar, box plot and heatmap draw every series.
From charts to a dashboard
A dashboard is a page of widgets. There are 24 widget types, and charts are only one of them. The Add-widget list also has a number tile (a count, sum or average), a gauge against a target, a progress bar, a status breakdown, a table slice, a ranked list, a calendar, a timeline, a Gantt, a kanban board, a pivot, a map, a tree, a gallery, a workload view, and plain content such as text, rich text, an image, a clock and a video.
Every widget names its own table. There is no single table bound to the dashboard, so one dashboard can put a count from your orders table beside a chart from your support requests, and nobody has to merge them first.
If you would rather not start from an empty page, the dashboard has a Start from a template option. The templates are described by what they answer rather than by the data they hold: for example Status board, Sales pipeline, Support desk, Inventory, Budget and spend, Team workload, Schedule and Project tracker. A template does not assume your columns are called what its author called them. It looks for a status, a date, a person, a category or an amount in your table, and builds the panels it can. Where it cannot, it says which panel needs which kind of column that your table lacks, and the dialog reports how many of the panels can be built from the table you chose, rather than writing a panel bound to a column that is not there.
Narrowing it down without rebuilding it
Once a dashboard exists, most of the work is looking at slices of it. There is a dashboard-wide Add filter bar whose conditions are combined with each widget's own filter, so a widget's authored filter is never loosened by it. Clicking a segment of a chart filters the other widgets on the dashboard by that value, and clicking the same segment again clears it. Segments can also be operated from the keyboard: Enter filters the dashboard by that value and D lists the records behind it.
That last part matters for people who are asked "which ones?" Any aggregate can be opened with View records, which lists the records that produced the figure. The panel names the widget and the number of records behind it, and pages through them.
What the numbers do and do not cover
A chart that is quietly computed from a partial read is worse than none. When the figure was computed over the whole table, the widget says so: "Computed over all" followed by the record count. When the table was read in pages and the figure covers only the rows that were loaded, the widget says it was computed over some number of the total, and its tooltip explains that this is a sample rather than the whole table. A smaller answer that is labelled is better than a wrong one that looks complete.
A widget also respects what the person looking at it may read. If a widget points at a table you cannot access, it says "This widget reads a table that is not available to you" instead of drawing an empty chart.
A dashboard also has its own Who has access panel, with three levels: Can view, Can edit and Can manage.
Where to start
Pick the table your team already lives in, add a status breakdown and one chart split by owner, and see which question people ask next. That question is the next widget.