118 lines
4.2 KiB
Markdown

# Data Views
## Introduction
Publishers and users of data want data presented in tables, graphs maps to make it more *human* "readable".[^1] We use the term "view" or "data view" ofr all these various ways of presenting data in more human "readable" ways.
[^1]: for an introduction to the power and art of visual presentation data see e.g. Tufte *Visualizing Information*.
```mermaid
graph LR
data[Your Data] --> table[Table]
data --> grap[Graph]
```
At base, views need:
* **A descriptive language**: for *specifying* views such as tables, graphs and maps (and their source data).
* **Rendering tools**: take those specifications and render actual "live on the web" tables, graphs and maps from those specifications (and their source data)
In addition, we may want:
* **Wizards**: to enable (non-technical) users to create tables, graphs, maps etc -- and to select the input data to power them.
* **Explorers**: that build on the views and wizards to allow users to do interactive data exploratio via live filtering and viewing.
* **Dashboards** that combine tables, charts, maps etc (often with widgets that allow users to adjust these e.g. to select a country that updates associated charts).
>[!tip]Often when we say "view" we identify with the particular presentation such as the table or graph. E.g. we say "this table is a view of that data". However, when you stop and think, strictly a view is more than that, for example it includes the title for the table. Formally, for us a view will include the combination of the presentation specification, the data sources that feed, plus any general metadata such as a title and description.
## Definitions
* Preview: a display (of a sample) of a resource
* Previewer: a method for previewing specific raw data types e.g. csv, excel, json, xml, text, geojson etc …
* Viz: visualizations e.g. table, graph, map, ...
* Viz Builder: a UI for creating graphs, maps etc
* Query UI: a UI for building queries of a dataset
* Explorer: Query UI + Viz Builder + Viz (renderer)
## Features
Definitions for feature clusters
* View: "(pre)view" a variety of data formats, most importantly tabular and geodata, and extending to PDFs, JSON HTML etc.
* Tabular:
* Geo:
* Chart:
* Maps:
* Everything else: this is more a preview
* Pluggable system
* Resource proxy (cors issues)
* [Data Explorer][]: think "tableau lite", a rich app for querying/loading data and then displaying that in tables, charts, maps etc.
* Builders:
* Query Builder:
* Chart Builder: a wizard for building charts
* Map Builder
* Lite: set popups etc.
* Complex: think carto
* Rich Viz: bespoke, complex visualization
* Dashboard: something that has many widgets displayed at once
* Basic: no linkage between widgets (basic controls)
* Complex: linkage between widgets (e.g. zooming on the map changes the map, or clicking the map changes the charts)
[Data Explorer]: /docs/dms/data-explorer
## CKAN v2
In CKAN v2 and earlier this is provided by the internal view object plus ReclineJS.
* Controller / Template = frontend controller, templating library or even browser JS
* "Data Factory" is a fancy name for any business logic that automatically adds views to a dataset. In CKAN 2 this happens as part of the resource creation logic
```mermaid
graph TD
subgraph Backend
dataset --user uploads --> storage
dataset --user uploads --> metastore
end
subgraph "Data Factory"
metastore --> viewgen[View Enhancer]
viewgen --> metastore
end
user -- user creates/edits a view --> metastore
subgraph "Controller / Template"
storage -- download the file --> visitor
metastore --renders table--> visitor
metastore --renders graph--> visitor
end
```
The sequence of it ...
```mermaid
graph LR
fileupload --> store
store --> enhance[Enhance - auto add views]
enhance --> render
enhance --> useredit[User edits views]
useredit --> render
```
## CKAN v3
In CKAN v3 and DataHub these are provied through the use of Frictionless (Data Package) "Views" and associated tooling.
See:
* https://github.com/datopian/datapackage-views-js
* https://github.com/frictionlessdata/datapackage-render-js
* [Data Explorer][] page in this site.
For more on the technical background see the [Views Design page »](/docs/dms/views/design).