tabulata calculates and aggregates list-based data. Its function expressions are versatile and easy to read and use.
Currently, tabulata exists as a functional prototype to explore some ideas I had to improve on the current spreadsheet metaphor. It takes some inspiration from LastCalc and Soulver, but the basic idea existed before I even knew about these products and was developed back in 2007.
Instead of work sheets with arbitrary coordinates-based addressing, tabulata forces you to name everything which can be referenced and has an explicit concept of lists.
›› Open up the application
now. It already contains some examples.
›› Note: Bookmark the URL you are redirected to for later retrieval.
Read further to learn how tabulata lets you manipulate lists, values and expressions.
Key Concepts
A block is a collection of lists and singulars. It is displayed on the home screen in condensed form, as shown here. Selecting the block opens it for editing.
In a block, calculated values are displayed, the expression generating the value can be edited when the calculated value is activated by clicking or tapping.
A singular associates one name with one expression generating one resulting value. When the singular is starred, it appears in the condensed block on the home screen. To edit a singular, click the value.
A list is named and consists of named columns. A column contains either values or an expression. Columns and rows are appended using the „+“-buttons.
Calculation
The heart of tabulata are the expressions which calculate singulars and
expression columns. Any existing or calculated data is referenced exclusively by name, spaces are omitted, so Tax Rate
as a name is referenced using the symbol TaxRate
.
In an expression, ListName.ColumnName
references the contained or calculated data in list form. On that
list representation functions like sum
, count
and select
are called
using ListName.ColumnName.functionName
.
A column expression is calculated for each row of the list. ColumnName
accesses the
corresponding value in the same row, ColumnName.above
the value one row above. Singulars can be
referenced. A simple example would be, for the column Tax
the expression Price * TaxRate
.
A list aggregation is created using an expression which returns a list as the first column. Examples for expressions which return a list are uniques
and select
. List.Column.uniques
returns a list with each distinct value of Column
contained once. Aggregated data is then calculated in the other columns by using select
and sum
on arbitrary other columns.
Include External Data
Using includes, external data sources can be directly accessed inside a block. Currently implemented
for arbitrary JSON
APIs, once mapped to a name, the data inside the object tree can be used for creating
and manipulating lists. See the Currency Portfolio example.
›› Open up the application
now. It contains the example outlined here.
›› Note: Bookmark the URL you are redirected to for later retrieval.
Source Code, Licence
Tabulata is released under the GNU Affero General Public License.
Find it here: tabulata on github.
Current Status, Contact
Tabulata is a side project of Samuel Rutishauser to play around with technologies and ideas.