Data Tables

Mike Tinnes
Mike Tinnes
  • Updated

Data Tables let you create, manage, and share structured data directly within your RevelDigital account. Use them to power dynamic signage content such as menus, directories, event schedules, pricing boards, and any other scenario where on-screen information needs to change without republishing a template.

Data Tables are dynamic by design. Every change you make—whether through the web interface, a CSV import, or an API call—is pushed to your player devices in real time. There is no need to republish, re-schedule, or manually refresh. Update a price, swap a menu item, or toggle an availability flag, and every screen showing that data reflects the change within seconds.


Overview

Data Tables provide a spreadsheet-like interface for managing rows and columns of structured data. Tables are stored in the cloud and are available to all templates and devices in your account. Key capabilities include:

  • Flexible schema – define columns with specific types, validation rules, and default values.
  • Inline editing – click any cell to edit it directly in the grid.
  • CSV import & export – bulk-load data from a CSV file or export your table for offline use.
  • Version history – every row change is tracked so you can review or rollback edits.
  • Row reordering – drag-and-drop rows to control the display order.
  • REST & GraphQL APIs – read and write table data programmatically from external systems.
  • Real-time updates – every change is pushed to connected player devices instantly. No republish or manual refresh required.

Creating a table

  1. Navigate to Data Tables in the main menu.
  2. Click New Table.
  3. Enter a Table Name and optional Description.
  4. Optionally set a Cache TTL (seconds). This controls how long player devices can cache the data before requesting a fresh copy. Even with caching enabled, devices are still notified of changes in real time, so on-screen content can refresh immediately when new data arrives.
  5. Add one or more columns (see Column types below).
  6. Click Save.

A live preview of the table structure is shown at the bottom of the schema editor as you add columns.


Column types

Each column has a Name (display label), a unique Key (used to identify the column), and a Type that determines how the data is entered and displayed.

Type Description Example value
String Plain text value. Cheeseburger
Number Integer or decimal number. 9.99
Boolean True / false toggle. Displayed as a checkbox in the grid. true
Date Calendar date (YYYY-MM-DD). 2025-07-15
Time Time of day (HH:mm). 14:30
Select Dropdown with predefined options. Configure the option list in the column settings. Available
Media Link to a media asset from your Media Library. Displays a thumbnail in the grid. (media picker)
URL Web address. Displayed as a clickable hyperlink. https://example.com
Rich Text HTML-formatted text. Opens in a rich-text editor dialog. <b>Bold</b> text
Hidden Plain text value that is excluded from rendered tables on player devices. Useful for internal notes, tracking IDs, or metadata that should not appear on screen. internal-ref-001

Column settings

Expand any column in the schema editor to configure additional options:

  • Required – the field cannot be left blank when creating or updating a row.
  • Sortable – enables column-header sorting in the data grid.
  • Default value – automatically applied when a new row is created and the field is empty.
  • Options (Select type only) – the list of allowed values for the dropdown.

Columns can be reordered by dragging the handle on the left side of each column row in the schema editor.


Editing data

Adding rows

Click Add Row in the toolbar. A new row appears at the bottom of the grid. Click any cell to enter a value. As soon as a row is saved, the change is pushed to all connected player devices automatically—your screens update within seconds.

Inline cell editing

Click a cell to enter edit mode. The editor adapts to the column type—text input for strings, date picker for dates, dropdown for selects, etc. Press Tab or Enter to save and advance, or Escape to cancel.

Boolean columns

Click the circle/checkmark icon to toggle the value. No separate edit mode is needed.

Rich Text columns

Click the cell to open a rich-text editor dialog where you can format content with bold, italic, lists, and more.

Media columns

Click the cell to open the Media Picker and select an asset from your Media Library.

Bulk operations

  • Use the checkboxes on the left to select one or more rows.
  • Open the Edit menu in the toolbar to Duplicate Selected or Delete Selected rows.

Row actions

Click the  (more) button on any row to access:

  • Version History – view all recorded changes to the row.
  • Delete – permanently remove the row.

Importing & exporting CSV

Importing

  1. Open a table and click Import CSV in the toolbar.
  2. Choose a .csv file from your computer.
  3. Select an import mode:
    • Append – adds the CSV rows to the existing data.
    • Replace – removes all existing rows and imports the CSV as the new data set.
  4. Review the preview (first 5 rows) and click Import.

The CSV column headers must match the column keys defined in your table schema. Maximum file size depends on your plan (see Plan quotas).

Exporting

Click Export CSV in the toolbar (or from the table list's action menu). A .csv file containing all rows is downloaded to your browser.


Version history & rollback

Every time a row is created or updated, a version snapshot is saved automatically. Versions record:

  • The version number.
  • The action (create or update).
  • Which fields changed and their previous values.
  • Who made the change and when.

Viewing version history

  1. Click the  menu on a row and select Version History.
  2. A dialog lists all recorded versions in reverse chronological order.

Rolling back

Click Rollback next to any previous version to restore the row to that state. A new version is created automatically to record the rollback action.

The number of versions retained per row and the retention period depend on your plan (see Plan quotas).


Real-time updates

Data Tables are built for real-time content. When you change data—whether from the web interface, a CSV import, or the API—your player devices are notified automatically and update their displays within seconds. There is nothing extra to configure; it just works.

How it works

  1. You make a change – Edit a cell, import a CSV, or update a row through the API.
  2. Devices are notified – Every player device displaying that table receives the update automatically.
  3. Screens refresh – The on-screen content updates within seconds. Viewers see the new information without any manual intervention.

No republish required

When a template uses a Data Table as its data source, the connection is live. You never need to republish or re-schedule a template just because the underlying data changed. Simply update the table and the screens follow.

Cache TTL setting

Each table has an optional Cache TTL (time-to-live) setting that controls how often devices check for new data. This can help reduce bandwidth on metered or low-connectivity networks. Even with caching enabled, devices still receive instant change notifications, so on-screen content refreshes immediately in most situations.

Typical use cases

  • Menu boards – Change a price or mark an item as sold-out; every screen refreshes instantly.
  • Event directories – Update a room assignment or session time and the lobby display reflects it in seconds.
  • KPI dashboards – Push metrics from an external system via the API; screens update as fast as the data arrives.
  • Emergency messaging – Toggle a boolean column to activate an alert banner across all devices simultaneously.

Using Data Tables in templates

Templates and gadgets can connect to a Data Table to display dynamic, filtered, and sorted data on your screens. The template editor provides a dedicated Data Table option type that lets you configure the binding visually—no coding required.

Configuring a Data Table option

When a gadget declares a preference of type datatable, the template editor displays the following configuration fields:

  1. Data Table – select the table from your account.
  2. Column Key – choose the primary column the gadget should display.
  3. Filters – add one or more filter rules to narrow which rows are returned.
  4. Sort Column and Sort Direction – control the row order.

Adding filters

Click + Add Filter to add a filter rule. Each rule consists of three parts:

  • Column – the column to filter on.
  • Operator – how the value should be compared (click the operator icon to change it).
  • Value – the comparison value (disabled for operators that don't require one).

You can add multiple filter rules. Click the  button to remove a rule.

Available filter operators

Operator Description Requires value?
Equals Exact match. Yes
Not Equals Does not match. Yes
Contains Text includes the value (case-insensitive). Yes
Not Contains Text does not include the value. Yes
Greater Than Value is greater than the specified number or date. Yes
Greater or Equal Value is greater than or equal to the specified number or date. Yes
Less Than Value is less than the specified number or date. Yes
Less or Equal Value is less than or equal to the specified number or date. Yes
Is Empty The field has no value (null, undefined, or empty string). No
Is Not Empty The field has a value. No
Before Now Date/time value is before the current UTC date and time. Evaluated server-side on every query. No
After Now Date/time value is after the current UTC date and time. Evaluated server-side on every query. No
Is Today Date portion of the value matches today's UTC date. No

AND / OR filter logic

When you add two or more filter rules, a toggle appears between each pair of rules letting you choose how they are combined:

  • AND (default) – a row must match all filter rules to be included.
    Example: category = "Entree" AND price ≤ 25 → returns only entrees priced at $25 or less.
  • OR – a row only needs to match any one of the filter rules.
    Example: status = "Active" OR status = "Pending" → returns rows where the status is either Active or Pending.

The chosen logic applies uniformly to all filter rules in the option. For more advanced combinations (e.g., nested groups), use the JavaScript SDK or API directly.

Gadget SDK usage

Gadget developers can use the createFromPref SDK method to automatically apply the configured table, filters (including AND/OR logic), and sort settings:

// Read the datatable preference and get a pre-configured helper
var cfg = gadgets.reveldigital.datatable.createFromPref(
  prefs.getString('rdDataTable')
);

// Fetch rows with all filter/sort settings applied automatically
cfg.getFilteredRows().then(function(result) {
  result.data.forEach(function(row) {
    console.log(row.data);
  });
});

// You can override individual parameters as needed
cfg.getFilteredRows({ pageSize: 10 }).then(function(result) { ... });

The createFromPref method returns an object with:

  • dt – the underlying DataTable instance (for direct API calls).
  • pref – the parsed preference object.
  • getFilteredRows(params?) – fetches rows with the configured filter and sort pre-applied.

Alternatively, you can create a DataTable instance manually and build filter objects yourself:

var dt = gadgets.reveldigital.datatable.create('tbl_menu_items');

// AND filter — multiple properties in a single object
dt.getRows({
  filter: { category: 'Entree', price: { op: 'lte', value: 25 } },
  sort: 'price',
  sortDir: 'asc'
});

// OR filter — wrap conditions in a $or array
dt.getRows({
  filter: { $or: [{ status: 'Active' }, { status: 'Pending' }] }
});

// Mixed — OR group combined with an AND condition
dt.getRows({
  filter: {
    $or: [{ status: 'Active' }, { status: 'Pending' }],
    price: { op: 'gt', value: 0 }
  }
});

Plan quotas

Data Table limits vary by account plan:

Limit Basic Professional Enterprise
Tables per account 5 25 100
Columns per table 15 30 50
Rows per table 500 5,000 50,000
Max CSV import size 1 MB 10 MB 50 MB
Versions per row 5 25 100
Version retention 7 days 30 days 90 days

Contact your account manager or upgrade your plan if you need higher limits.


API integration

Data Tables can be read and updated programmatically through the RevelDigital REST API and GraphQL API. This allows external systems—such as point-of-sale platforms, scheduling tools, or custom applications—to push data directly into your tables. Changes made through the API are delivered to player devices in real time, just like changes made in the web interface.

Filtering rows via the API

The GET /rows endpoint accepts a filter query parameter containing a JSON-encoded filter object. The object supports several formats:

Simple equality

Each property is a column key with a scalar value. Multiple properties are combined with AND.

{ "category": "Entree", "available": true }

Operator-based

Use an object with op and value for richer comparisons.

{ "price": { "op": "lte", "value": 25 } }

Range

{ "price": { "op": "inRange", "from": 10, "to": 30 } }

Supported operators

Operator Description Parameters
eq Equals value
neq Not equals value
contains Text contains (case-insensitive) value
notContains Text does not contain value
gt Greater than value
gte Greater than or equal value
lt Less than value
lte Less than or equal value
isEmpty Null, undefined, or empty string none
isNotEmpty Has a value none
positive Numeric value > 0 none
negative Numeric value < 0 none
inRange Value between from and to (inclusive) fromto
outOfRange Value outside from/to range fromto
beforeNow Value is before current UTC date/time (server-evaluated) none
afterNow Value is after current UTC date/time (server-evaluated) none
isToday Date portion matches today's UTC date none

OR logic ($or)

Wrap conditions in a $or array to match rows that satisfy any of the conditions. Each element in the array is a standard filter object (its own properties are AND'd together if it has more than one).

// Rows where status is "Active" OR status is "Pending"
{ "$or": [{ "status": "Active" }, { "status": "Pending" }] }

// OR group combined with an AND condition:
// (status = Active OR status = Pending) AND price > 0
{
  "$or": [{ "status": "Active" }, { "status": "Pending" }],
  "price": { "op": "gt", "value": 0 }
}

Top-level properties alongside $or are treated as additional AND conditions that must all be true in addition to the OR group.

For full API documentation, including authentication, available endpoints, and code examples, see the RevelDigital API Reference.


FAQ

Can I use Data Tables in my templates?

Yes. Templates can bind to a Data Table as a data source in the Spreadsheet and Text gadgets. Rows are fetched dynamically and changes are pushed to your devices in real time, so your on-screen content updates within seconds of editing the table—no republish required.

What happens when I delete a table?

Deleting a table permanently removes the table definition and all of its rows. This action cannot be undone.

Can I undo a row edit?

Yes. Open the row's Version History and click Rollback on the version you want to restore.

What CSV format is expected for import?

The first row of the CSV must contain column keys (not display names) that match your table schema. Values are parsed according to each column's type.

Why am I seeing a "Table limit reached" error?

Your account has reached the maximum number of tables allowed for your plan. Delete unused tables or upgrade to a higher plan tier to increase the limit.

Are changes pushed to devices in real time?

Yes. Every row change is pushed to all connected player devices within seconds. The on-screen content refreshes automatically—no manual action is needed. See Real-time updates for more details.

Do I need to republish my template after changing table data?

No. Data Tables are designed to be fully dynamic. Changing the data—through the web interface, a CSV import, or an API call—is all that is needed. Connected devices pick up the change automatically.

What happens if a device is offline when data changes?

When the device reconnects, it automatically fetches the latest data. It will always receive the most current version of the table, so nothing is lost while the device is offline.

Can I filter with AND and OR logic?

Yes. When configuring a Data Table option in the template editor, you can add multiple filter rules and choose AND or OR logic between them. AND requires all rules to match; OR requires only one to match. See AND / OR filter logic. For API usage, wrap conditions in a $or array—see OR logic in the API section.

Can I combine AND and OR in a single filter?

The template editor applies a single logic mode (AND or OR) to all filter rules on a given option. For more advanced combinations—for example (A OR B) AND C—use the API or SDK directly. Place the OR conditions inside a $or array and add the AND conditions as top-level properties in the same filter object.

Related to

Was this article helpful?

0 out of 0 found this helpful

Have more questions? Submit a request

Comments

0 comments

Please sign in to leave a comment.