Table

Upload CSV or Excel data to create a searchable, sortable table

Updated 6 years ago to v3.0.0 by Flourish team

How to use this template

This is a beta template, and we would love to know what you think of it! Send us an e-mail if you have any requests, problems or questions.

What's it for?

This template allows you make a template in which your audience can search, filter and explore. Pretty boring, huh? Luckily, we added a way to turn your columns into mini visualisations! For now you can make a basic bar chart, but we'll be adding more visualisation types very soon.

How to get started

  1. Upload your data
  2. Done πŸ™‚
  3. Want to turn your columns into mini bar charts? Go to "Chart columns" on the right hand side and type in the column names

FAQ

Tell me more about those mini visualisations Of course. Let's say you have election results for each state in America. We have a column for state name, population, Republican %, Democrat%.

Now we want to turn Republican % and Democrat% into a bar chart, so we can immediately see the vote results for each state.

  1. Go to "Chart columns" on the right hand side, and enable "Bar Chart Columns"
  2. Fill in Democrats %, Republicans %
  3. This should turn the two columns into a new column with the bar chart
  4. Give the newly made bar chart a name

Does this table work with a lot of data? It works pretty quickly, even with about 100,000 rows of data. You can optimize it by limiting the columns to search through.

Can I also use this as a searchable tool Yes! Just set the pagination amount to 0, and the pagination amount after search to something more than 0. This will make sure the table is empty on default, and will only fill up once you start searching.

Will there be more visualisation types? Yes! At the moment you can do only basic bar chart, but it will be possible to do spark lines very soon. Watch this space.

So what happens on mobile? We've made it quite flexible for you. You could choose to switch to a mobile blocks view, but if you prefer to keep a table view (with scrollbars) than that's totally fine.

Credits

Created by the Flourish team.

This section documents API usage specific to this template, so for an introduction we suggest you refer to the generic API documentation instead.

template: @flourish/table

version: 3

Template data

There are three different formats in which you can supply data to this template. The most convenient for you to use likely depends on the source of your data, as described below.

1. Array of arrays, and a bindings object

You can supply arrays of arrays to opts.data, which might look like:

{
    data: {
        rows: [
            [ "RowsColumn1Value1", "RowsColumn2Value1",
            [ "RowsColumn1Value2", "RowsColumn2Value2",
            [ "RowsColumn1Value3", "RowsColumn2Value3",
            ...
        ]
    }
}

where each array of arrays represents the rows in a data sheet.

To tell the API how the values from each column should be associated with the keys that the template is expecting, you must also supply an object attached to opts.bindings. (The meanings of the keys in the bindings object are documented below.) The minimal bindings you can supply for this template are as shown in this example:

{
    template: "@flourish/table",
    version: "3",
    bindings: {
        rows: {
            
        }
    },
    data: {
        rows: [
            [ "RowsColumn1Value1", "RowsColumn2Value1",
            [ "RowsColumn1Value2", "RowsColumn2Value2",
            [ "RowsColumn1Value3", "RowsColumn2Value3",
            ...
        ]
    }
}

All possible bindings that you can supply are shown in this example:

{
    template: "@flourish/table",
    version: "3",
    bindings: {
        rows: {
            columns: [0, 1, ...], // index(es) of column(s) in your data
        }
    },
    data: {
        rows: [
            [ "RowsColumn1Value1", "RowsColumn2Value1",
            [ "RowsColumn1Value2", "RowsColumn2Value2",
            [ "RowsColumn1Value3", "RowsColumn2Value3",
            ...
        ]
    }
}

2. Array of objects with arbitrary keys, and a bindings object

This format is most likely useful when you have data from an external source, such as CSV data loaded from d3-dsv. You should supply this attached to the opts.data, which might look like:

{
        rows: [
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            ...
        ]
    }

... but with the keys being the column headers from your source data instead. You must also supply an object attached to opts.bindings. The minimal bindings you can supply for this template are as shown in this example:

{
    template: "@flourish/table",
    version: "3",
    bindings: {
        rows: {
            
        }
    },
    data: {
        rows: [
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            ...
        ]
    }
}

All possible bindings that you can supply are shown in this example:

{
    template: "@flourish/table",
    version: "3",
    bindings: {
        rows: {
            columns: ["RowsHeader1", "RowsHeader2", ...],
        }
    },
    data: {
        rows: [
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            { "RowsHeader1": ..., "RowsHeader2": ..., ... },
            ...
        ]
    }
}

(As before, the keys containing "Header" would be replaced by column names from your data source.)

3. Array of objects with template-defined keys

There is an alternative format you can use, which is likely to be easier to use if your data is not from a spreadsheet source. With this alternative format you supply your data to the template as an array of objects, attached to opts.data, where the keys must be those used by the template, as documented below. In this case there is no need to supply a bindings object, since the key names are already those expected by the template. The required properties in the data object are as follows (scroll down for a description of what each property is):

{
    template: "@flourish/table",
    version: "3",
    data: {
    rows: [
        {
            columns: [...]
        },
        ...
    ]
},
    ...
}

And the full list of all possible properties is as follows:

{
    template: "@flourish/table",
    version: "3",
    data: {
    rows: [
        {
            columns: [...]
        },
        ...
    ]
},
    ...
}

Meanings of the template data keys:

  • rows.columns: columns

Template settings

Options for opts.state.

Table

table_min_width number

Min width.

Min: 100

table_border_color color

Border color.

table_border_width number

Border thickness.

sorting.enabled boolean

Click on column header to sort.

pagination_amount number

Rows per page. If you don't want pagination, set this number to a value higher than the length of your data

Max: 5000

Cell styles

cell_height number

Height.

cell_padding number

Padding.

cell_wrap boolean

Wrap text in cell.

cell_fill_direction string

Stripe direction.

Allowed values:

  • horizontal (Horizontal)
  • vertical (Vertical)

cell_fill_1 color

Background.

cell_fill_2 color

cell_border_color color

Color.

cell_border_width number

Thickness.

cell_border_style string

Style.

Allowed values:

  • solid (Solid)
  • dashed (Dashed)
  • dotted (Dotted)

cell_font_color color

Color.

cell_font_size number

Size.

column_width_mode string

Allowed values:

  • auto (Auto)
  • equal (Equally spaced)
  • fixed (Custom)

column_widths string

Column widths.

header_font_weight string

Text weight.

Allowed values:

  • bold (Bold)
  • normal (Normal)

header_fill color

Background.

header_font_color color

Color.

header_style_default boolean

Allowed values:

  • true (Inherit styles)
  • false (Custom)

header_height number

Height.

header_padding number

Padding.

header_font_default boolean

Allowed values:

  • true (Inherit styles)
  • false (Custom)

header_font_size number

Size.

header_border_default boolean

Allowed values:

  • true (Inherit styles)
  • false (Custom)

header_border_color color

Color.

header_border_width number

Thickness.

header_border_style string

Style.

Allowed values:

  • solid (Solid)
  • dashed (Dashed)
  • dotted (Dotted)

Charts πŸ“ŠπŸ“‰

bar_columns.enabled boolean

This setting will convert numerical values in your data to a simple visual bar chart

Allowed values:

  • true (Enabled)
  • false (Disabled)

bar_columns.bar_1_columns text

Which columns would you like to turn into bar chart?. Just write down the column names on a new line

bar_columns.bar_1_column_name string

New column name.

bar_columns.bar_1_max_enabled boolean

Max. Use a fixed max value

Allowed values:

  • true (On)
  • false (Off)

bar_columns.bar_1_max number

Max value.

line_columns.enabled boolean

This setting will convert numerical values in your data to a simple visual line chart

Allowed values:

  • true (Enabled)
  • false (Disabled)

line_columns.line_1_columns text

Which columns would you like to turn into a line chart?. Write down the column names on a new line

line_columns.line_1_column_name string

New column name.

line_columns.line_1_max_enabled boolean

Max. Use a fixed max value

Allowed values:

  • true (On)
  • false (Off)

line_columns.line_1_max number

Max value.

line_columns.line_1_width number

Width.

line_columns.line_1_color color

Color.

line_columns.line_1_area boolean

Area.

Allowed values:

  • true (On)
  • false (Off)

Colors

color.palette colors

Palette.

color.extend boolean

Auto-extend. Automatically generate additional colours when needed to avoid the palette colours being used more than once. Added colours are based on the average lightness and chroma values of the palette. This works best if the palette’s colours do not have very high or low saturation.

color.advanced boolean

Fine tune. Fine tune how additional colours are added to the palette.

color.hue_rotation_angle number

Hue rotation for added colours. Angle, in degrees in HCL colourspace, between one generated colour and the next. The default value, ~360/(Golden ratio), ensures adjacent hues are not too similar.

Max: 360

color.custom_palette text

Custom overrides. Type the name of the entity whose colour you want to set, a colon and then a colour (using a name, hex-code or rgb declaration). Multiple colours can be set using multiple lines. For example:


Party 1: red
Party 2: #4455AA
Party 3: rgb(30,168,26)

Mobile view

mobile.view boolean

Mobile view.

Allowed values:

  • false (Table (scrollbars))
  • true (Blocks)

mobile.breakpoint number

Mobile breakpoint width.

Min: 10

mobile.cell_font_size number

Text size.

Min: 1

mobile.pagination_amount number

Pagination Amount.

Min: 1

search_enabled boolean

Allowed values:

  • true (Enabled)
  • false (Disabled)

search_placeholder string

Placeholder.

search_hide_table boolean

Hide table before search.

search_columns string

Columns to search. Choose which columns you want to search through. You might want to narrow this down with big datasets to speed it up. You can select specific columns by writing them down on a new line, like this "Column A \n Column B"

Allowed values:

  • all (All)
  • first (First)
  • custom (Selected)

search_columns_custom text

no_results_text string

Text when there are no results.

search_resize boolean

Resize table after searching.

Allowed values:

  • true (Enabled)
  • false (Disabled)

popup.show_popups boolean

Popups.

Allowed values:

  • true (Enabled)
  • false (Disabled)

popup.is_custom boolean

Popup contents.

Allowed values:

  • false (Auto)
  • true (Custom content)

popup.custom_template text

Popup content. The text to appear in the popup. You can use {{column_name}} to add a value from your data. It must be in a selected column, but you can add columns to β€œMetadata” if you just want to include them for use in the popup. Advanced users can include HTML to apply layouts, formatting, images, etc.

popup.show_pointer boolean

Pointer.

popup.show_shadow boolean

Shadow.

popup.style_popups boolean

Custom styling.

popup.text_color color

Text colour.

popup.align string

Alignment.

Allowed values:

  • left (fa-align-left)
  • center (fa-align-center)
  • right (fa-align-right)

popup.font_size number

Font size.

Min: 1

popup.fill_color color

Fill colour.

popup.opacity number

Fill opacity.

Max: 1

popup.padding number

Padding.

popup.border_radius number

Radius. Corner radius of popup

Number formatting

localization.input_decimal_separator string

Decimal separator in data sheet. Used for interpreting your data. Only change if data is not displaying on the chart as expected.

Allowed values:

  • . (.)
  • , (,)

localization.output_separators string

Number format to display. How the numbers should appear on chart labels

Allowed values:

  • ,. (12,235.67)
  • ., (12.345,67)
  • . (12235.67)
  • , (12345,67)
  • . (12 235.67)
  • , (12 345,67)

formatted_columns text

Columns to format. Write down the column names on a new line

number_format.prefix string

Prefix. Text to place in front of number

number_format.suffix string

Suffix. Text to place after number

number_format.n_dec number

Decimal places. Use negative integers to round to positive powers of ten (eg -2 rounds to the nearest 100)

Min: -10

Max: 10

number_format.strip_zeros boolean

Remove trailing zeros.

number_format.strip_separator boolean

Hide thousands separator below 10,000. Turn off if you want four-digit numbers to include a separator, e.g. β€œ1,234” rather than β€œ1234”.

number_format.transform_labels boolean

Multiply/divide values.

number_format.transform string

Allowed values:

  • multiply (Multiply by)
  • divide (Divide by)
  • exponentiate (Γ—10 to the power of)

number_format.multiply_divide_constant number

number_format.exponentiate_constant number

Layout

Layout

layout.body_font font

Font.

layout.max_width number

Maximum width. Leave blank to stretch to container width

Min: 50

layout.margin number

Margin.

layout.background_color_enabled boolean

Color.

Allowed values:

  • true (On)
  • false (Off)

layout.background_image_enabled boolean

Image.

Allowed values:

  • true (On)
  • false (Off)

layout.background_color color

Color.

layout.background_image_src url

Image URL.

layout.background_image_size string

Size.

Allowed values:

  • cover (Fill)
  • contain (Fit)
  • auto (Original)
  • 100% 100% (Stretch)

layout.background_image_position string

Position.

Allowed values:

  • top left (Top left)
  • top center (Top center)
  • top right (Top right)
  • center left (Center left)
  • center center (Center)
  • center right (Center right)
  • bottom left (Bottom left)
  • bottom center (Bottom center)
  • bottom right (Bottom right)

layout.layout_order string

Layout order.

Allowed values:

  • stack-default (data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAdCAYAAAHZdKxuAAAAAXNSR0IArs4c6QAAANhJREFUSA3tVNEOwiAM7Iy/p2/wkTz6g5gjOVZZEepcjMmWLBTau95ugIh6lpzzLcb4wNpFJaRk9MIahxAyXmD7mC7BC2RlFbliQjFMpJTujOdGs/ECwRoP3rlKoEzNJlz3+CwutK0NLRVt2QhjggA9n2IGEKANMxmt0VVsEfxgzfX7zL3ZiqbXLjcKc8vEORk5/75mMB/7u11uuIpdbtDCc5R3l/s+e+pmHt1foza7Nv6IXOeHiqGk9zWtSk1cN2cPrItnYjZzHZEZYtacxHTiuANSO/xN8AS4uW8Rw1Gu2AAAAABJRU5ErkJggg==)
  • stack-2 (data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAdCAYAAAHZdKxuAAAAAXNSR0IArs4c6QAAAMpJREFUSA3tVMsKwyAQNKW/l970Iz32Bw0jjKTrSLUY0oOBsO5rnOwYnTs9W0ppDyG8EcsOkw8uauu9T3jR2+75yJxBnnC4JxMxxlezg0V9VsJsIGz75TfKdlkpg3aPcT8TsPNRMJjZEIf5xaAAahUyE+RtfcZvtFLoFh95aFXxH4hCWpUoTCg7fxqUfB4yEcl/CJlNy5qbfuZA8m8CwJ77q2djSj50lnuAWbOAOQlXxCuRHxcUje2XzfgrYzBpHUXLkmxh181SpnEAB4Vg0DSGhHsAAAAASUVORK5CYII=)
  • stack-3 (data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAdCAYAAAHZdKxuAAAAAXNSR0IArs4c6QAAANFJREFUSA3tVEEOwyAMo9O+193gkRz3QSZHMmNRUkGp1guVqkCIHZMAITTfVkrZU0pv+B7NQpCV1vEdxxgLfmB9jEvwBBNzkjXn/HIRDOqzJs0GwS1eEmonAn52RITJaUYScd5KLl0fTQf58HVpIFlXMDPNBVMf2TDXPq7dZM2eelrMQ6uDucG50mlWzG/ooCWDvqENXldn1pcyhpgJWjYcPe5z5ZFrAgoe2LN0f2v1ZYq5UyofuiME99hFXKtUm1c9aoBmeEeRjVIQma6XpVblAwnpZjN/VjqsAAAAAElFTkSuQmCC)
  • stack-4 (data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABYAAAAdCAYAAAHZdKxuAAAAAXNSR0IArs4c6QAAANtJREFUSA3tVNEOwjAI3Iy/p2/tR/bRH6zekmuA1glO45bYZAHKcdDCOk1izbXWC+0zlJzzDVJ5sNGW9qSUKj4QKY8yWvBDUWnoKKVcTzS2yWHiIfeMwm2yIbLbRL3DRJYubi+0bAPCkcvapO3AdFgZvuDuyJZR2i4wSpBBP9ZD7RsOLQ9gD/Y5ZmaA3EEHWY6r3SEwrzDEHLpnlvOXa4/7xttZfhNwyPdKcqLPaz6JlXpr9bNgCfbobw2ch5iY0CQzyCOPR9ya5zleBPNy3LxknAbiv1YxExxH3gEqBW7I4zw3PQAAAABJRU5ErkJggg==)

layout.space_between_sections string

Space between sections.

Allowed values:

  • 0 (▁)
  • 0.5 (β–ƒ)
  • 1 (β–„)
  • custom (...)

layout.space_between_sections_custom number

Custom.

Max: 100

layout.header_align string

Alignment.

Allowed values:

  • left (fa-align-left)
  • center (fa-align-center)
  • right (fa-align-right)

layout.title string

layout.title_styling boolean

Change title styles.

layout.title_size string

Size.

Allowed values:

  • 1.4 (α΄€)
  • 1.6 (A)
  • 2 (fa-font)
  • custom (...)

layout.title_size_custom number

Custom. Specify a custom responsive font size. Best results will be with values between 1.2 and 3

layout.title_weight string

Weight.

Allowed values:

  • bold (Bold)
  • normal (Regular)

layout.title_color color

Color.

layout.title_line_height number

Line height.

Max: 3

layout.subtitle string

layout.subtitle_styling boolean

Change subtitle styles.

layout.subtitle_size string

Size.

Allowed values:

  • 1.4 (α΄€)
  • 1.6 (A)
  • 2 (fa-font)
  • custom (...)

layout.subtitle_size_custom number

Custom. Specify a custom responsive font size. Best results will be with values between 1.2 and 3

layout.subtitle_weight string

Weight.

Allowed values:

  • bold (Bold)
  • normal (Regular)

layout.subtitle_color color

Color.

layout.subtitle_line_height number

Line height.

Max: 3

layout.subtitle_space_above string

Space above.

Allowed values:

  • 0 (▁)
  • 0.5 (β–ƒ)
  • 1 (β–„)
  • custom (...)

layout.subtitle_space_above_custom number

Custom.

Max: 100

layout.text string

layout.text_styling boolean

Change text styles.

layout.text_size string

Size.

Allowed values:

  • 1.2 (α΄€)
  • 1.4 (A)
  • 1.6 (fa-font)
  • custom (...)

layout.text_size_custom number

Custom. Specify a custom responsive font size. Best results will be with values between 1.2 and 3

layout.text_weight string

Weight.

Allowed values:

  • bold (Bold)
  • normal (Regular)

layout.text_color color

Color.

layout.text_line_height number

Line height.

Max: 3

layout.text_space_above string

Space above.

Allowed values:

  • 0 (▁)
  • 0.5 (β–ƒ)
  • 1 (β–„)
  • custom (...)

layout.text_space_above_custom number

Custom.

Max: 100

layout.source_name string

Source name.

layout.source_url string

Source url.

layout.multiple_sources boolean

Multiple sources.

layout.source_name_2 string

Source name.

layout.source_url_2 string

Source url.

layout.source_name_3 string

Source name.

layout.source_url_3 string

Source url.

layout.source_label string

Source label.

layout.note string

Note.

layout.size number

Size.

layout.color color

Color.

layout.footer_align string

Alignment.

Allowed values:

  • left (fa-align-left)
  • center (fa-align-center)
  • right (fa-align-right)
  • justify (fa-align-justify)

layout.logo_url url

Image.

Link.

layout.logo_height number

Height.

layout.logo_margin number

Margin.

layout.logo_order string

Position.

Allowed values:

  • left (Left)
  • right (Right)

layout.footer_align_vertical string

V. align.

Allowed values:

  • flex-start (Top)
  • center (Center)
  • flex-end (Bottom)