Skip to main content

Migrating Looker Dashboards to Holistics

High-level Overview

Looker Dashboard Types vs Holistics Dashboard

Looker has two types of dashboards:

  • LookML Dashboard: Version-controlled dashboards defined in code, managed by LookML developers
  • User-defined Dashboard: UI-based dashboards created via drag-and-drop in Personal or Shared folders

Holistics takes a unified approach with a single dashboard type that supports both UI and code editing modes. This eliminates the need to convert between different dashboard types - users can build visually and the code is automatically generated.

Component Mapping

Looker ComponentHolistics EquivalentNotes
Query TileVisualization BlockCreated from explores/datasets
Look-linked TileN/AHolistics doesn't have standalone reports
Text TileText BlockFor adding text, markdown content
Extension TileN/AFor custom extensions
Dashboard FiltersFilter BlockFor filtering dashboard data

Dashboard Settings Comparison

FeatureLookerHolisticsNotes
Timezone AdjustmentBoth platforms support
Run on LoadLoad data automatically on dashboard open
Full-screen ModeExpand visualizations to full screen
Auto-refreshComing soonAutomatic data refresh intervals
Default Filter ViewN/AHolistics uses inline filters
Filter Panel LocationFixed positionsFlexiblePlace filters anywhere in layout

Visualization Type Mapping

When migrating from Looker to Holistics, you'll need to map your existing visualizations to their Holistics equivalents. This table provides a comprehensive mapping between Looker visualization types and their Holistics counterparts:

Looker VisualizationHolistics EquivalentNotes
Column ChartColumn ChartStandard vertical bar visualization for category comparison
Bar ChartBar ChartHorizontal bar visualization for category comparison
Line ChartLine ChartIdeal for time series and trend analysis
Area ChartArea ChartShows volume and cumulative values over time
Pie ChartPie/Donut ChartVisualizes part-to-whole relationships
Scatter PlotScatter ChartShows correlation between two numeric variables
TableTableTabular data presentation with formatting options
Single ValueKPI MetricDisplays a single metric with optional comparison
Box Plot
Not natively supported yet
Available through Holistics Custom Chart
Waterfall ChartCustom Waterfall ChartShows sequential contribution to a final value
Funnel ChartFunnel ChartVisualizes sequential process or conversion rates
Word CloudWord CloudText visualization with size indicating frequency

Additional Holistics Visualizations

Holistics offers several visualization types that aren't available in Looker:

  • Metric Sheet - Compact display of multiple KPIs in a grid layout
  • Pivot Table - Advanced table with nested rows and columns for complex data analysis
  • Gauge Chart - Visual representation of a metric within a defined range
  • Bubble Chart - Enhanced scatter plot with third dimension shown by bubble size
  • Radar Chart - Multi-variable data visualization on axes starting from the same point

When migrating dashboards, you'll typically map most Looker visualizations directly to their Holistics equivalents, while potentially enhancing your dashboards with these additional visualization types.

Step-by-Step Migration Tutorial

Step 1: Preparation

  1. Open your source Looker dashboard
  2. Create a new dashboard in Holistics
  3. List all components to migrate:
    • Visualization tiles
    • Text content
    • Filters
    • Dashboard settings

Step 2: Migrate Visualizations

  1. For each query tile:

     Dashboard your_dashboard {
    title: 'Dashboard Title'

    block block_name: VizBlock {
    label: 'Visualization Label'
    viz: ChartType { // ChartType can be BarChart, DataTable, LineChart, PieChart, ScatterPlot, Table, etc.
    dataset: dataset_name
    // other visualization settings
    }
    }

    }
  2. For each text tile:

    Dashboard your_dashboard {
    title: 'Dashboard Title'

    block t5: TextBlock {
    content: @md Your markdown content here;;
    }

    }

Step 3: Set Up Filters

Dashboard your_dashboard {
title: 'Dashboard Title'

block block_name: VizBlock { }

block block_name: FilterBlock {
label: 'Filter Label'
type: 'field'
source: FieldFilterSource {
dataset: dataset_name
field: ref('model_name', 'field_name')
}
default {
operator: 'is'
value: []
}
}

}

Step 4: Configure Dashboard Settings

Dashboard your_dashboard {
title: "Your Dashboard Title"
description: "Dashboard description"

settings {
timezone: 'America/Los_Angeles'
autorun: false
cache_duration: 10
}

}

Step 5: Test and Validate

  1. Compare visualization outputs
  2. Verify filter functionality
  3. Test dashboard loading performance
  4. Check mobile responsiveness
  5. Validate user permissions

Common Migration Patterns

This section demonstrates how to migrate common dashboard components from Looker to Holistics.

1. Basic Dashboard Structure

Looker Dashboard Structure
- dashboard: sales_overview
title: "Sales Overview"
description: "Sales performance metrics and trends"
enable_viz_full_screen: true
layout: tile | static | grid | newspaper
refresh: "1 hour"
auto_run: true
width: 1500 # For layout: static dashboards
Holistics Dashboard Structure
Dashboard sales_overview {
title: "Sales Overview"
description: "Sales performance metrics and trends"

settings {
autorun: true
}

view: CanvasLayout {
width: 1560 // Dashboard width in pixels
height: 1080 // Dashboard height in pixels
}
}

Note:

  • Holistics uses a simpler dashboard configuration model with Canvas layout by default. While Looker supports multiple layout types (tile, static, grid, newspaper), Holistics provides a flexible canvas where blocks can be freely positioned.
  • Features like refresh intervals are not currently supported.

2. Filter Configuration

Looker Filter Configuration
- dashboard: sales_overview
crossfilter_enabled: true
filters:
- name: order_status
title: "Order Status"
type: field_filter
model: sales
explore: orders
field: orders.status
default_value: "completed"
allow_multiple_values: true
ui_config:
type: dropdown_menu
display: popover
Holistics Filter Configuration
Dashboard your_dashboard {
block status_filter: FilterBlock {
label: "Order Status"
type: "field"
source: FieldFilterSource {
dataset: orders
field: ref('orders', 'status')
}
settings {
input_type: 'multiple'
}
default {
operator: "is"
value: 'completed'
}
}
}

Note:

  • Holistics filter configuration is more streamlined and has cross-filtering ability by default.
  • But currently doesn't support advanced UI configurations available in Looker.

3. Visualization Elements (Cartesian Chart)

Looker Visualization Elements (Cartesian Chart)
- dashboard: sales_overview
tile_size: 100

elements:
- name: monthly_sales
title: "Monthly Sales"
type: looker_column # Looker Column Chart
height: 4 # sets an element to be 400 pixels in height (when tile_size is 100)
width: 5 # sets an element to be 500 pixels in width (when tile_size is 100)
top: 7 # position the element 700 pixels from the top of the dashboard
left: 8 # position the element 800 pixels from the left of the dashboard

## QUERY PARAMETERS
model: sales
explore: orders
fields: [orders.created_month, orders.total_revenue]
fill_fields: [orders.created_month]
sorts: [orders.created_month desc]
limit: 500
Holistics Visualization Elements (Cartesian Chart)
Dashboard your_dashboard {

block block_name: FilterBlock { }

block monthly_sales: VizBlock {
label: "Monthly Sales"
viz: ColumnChart {
dataset: orders
x_axis {
field: VizFieldFull {
ref: ref('orders', 'created_month')
transformation: 'datetrunc month'
}
}
y_axis {
series {
field: VizFieldFull {
ref: ref('orders', 'total_revenue')
}
}
}
settings {
row_limit: 500
sort {
field_index: 0
direction: 'desc'
}
}
}
}

view: CanvasLayout {
block monthly_sales {
position: pos(800, 700, 500, 400) // position the element 800 pixels from the left of the dashboard, 700 pixels from the top, 500 pixels wide, and 400 pixels tall
}
}

}

Note: While both platforms support similar visualization capabilities, Holistics uses a more structured approach to defining chart components`.

4. Visualization Elements (Data Table)

Looker Visualization Elements (Data Table)
- dashboard: sales_overview
tile_size: 100

elements:
- name: monthly_sales
title: "Monthly Sales"
type: looker_grid # Looker Data Table
height: 4 # sets an element to be 400 pixels in height (when tile_size is 100)
width: 5 # sets an element to be 500 pixels in width (when tile_size is 100)
top: 7 # position the element 700 pixels from the top of the dashboard
left: 8 # position the element 800 pixels from the left of the dashboard

## QUERY PARAMETERS
model: ecommerce
explore: orders
fields: [products.name, orders.total_orders_count, orders.gmv, orders.aov]
Holistics Visualization Elements (Data Table)
Dashboard your_dashboard {

block block_name: FilterBlock { }

block product_performance: VizBlock {
label: 'Product Performance'
viz: DataTable {
dataset: demo_ecommerce
fields: [
VizFieldFull {
ref: ref('products', 'name')
format { } // Viz Field Format Configuration
},
VizFieldFull {
label: 'Total Orders'
ref: ref('orders', 'total_orders_count')
format { } // Viz Field Format Configuration
},
VizFieldFull {
label: 'GMV'
ref: ref('orders', 'gmv')
format { } // Viz Field Format Configuration
},
VizFieldFull {
label: 'AOV'
ref: ref('orders', 'aov')
format { } // Viz Field Format Configuration
}
]
settings { } // Viz Settings Configuration
}
}

view: CanvasLayout {
block product_performance {
position: pos(800, 700, 500, 400) // position the element 800 pixels from the left of the dashboard, 700 pixels from the top, 500 pixels wide, and 400 pixels tall
}
}

}

5. Visualization Elements (Pivot Table)

Looker Visualization Elements (Pivot Table)
- dashboard: sales_overview
tile_size: 100

elements:
- name: order_by_country_and_status
title: "Total Orders by Countries & Order Status"
type: looker_grid # Looker Data Table
height: 4 # sets an element to be 400 pixels in height (when tile_size is 100)
width: 5 # sets an element to be 500 pixels in width (when tile_size is 100)
top: 7 # position the element 700 pixels from the top of the dashboard
left: 8 # position the element 800 pixels from the left of the dashboard

## QUERY PARAMETERS
model: ecommerce
explore: orders
fields: [countries.name, orders.status, orders.total_orders_count]
pivots: [orders.status]
Holistics Visualization Elements (Pivot Table)
Dashboard your_dashboard {

block block_name: FilterBlock { }

block order_by_country_and_status: VizBlock {
label: 'Total Orders by Countries & Order Status'
viz: PivotTable {
dataset: demo_ecommerce
rows: [
VizFieldFull {
ref: ref('countries', 'name')
format { } // Viz Field Format Configuration
}
]
columns: [
VizFieldFull {
ref: ref('orders', 'status')
format { } // Viz Field Format Configuration
}
]
values: [
VizFieldFull {
ref: ref('orders', 'total_orders_count')
format { } // Viz Field Format Configuration
}
]
settings { } // Viz Settings Configuration
}
}

view: CanvasLayout {
block order_by_country_and_status {
position: pos(800, 700, 500, 400) // position the element 800 pixels from the left of the dashboard, 700 pixels from the top, 500 pixels wide, and 400 pixels tall
}
}

}

Note: Looker doesn't support pivot type explicitly, but it can be achieved by using looker_grid type with pivots parameters.

6. Text and Markdown Content

Looker Text Elements
- dashboard: sales_overview
layout: tile
tile_size: 100

elements:
- name: dashboard_intro
type: text
height: 4 # sets an element to be 400 pixels in height (when tile_size is 100)
width: 5 # sets an element to be 500 pixels in width (when tile_size is 100)
top: 7 # position the element 700 pixels from the top of the dashboard
left: 8 # position the element 800 pixels from the left of the dashboard

## TEXT PARAMETERS
title_text: "Welcome"
subtitle_text: "Overview"
body_text: "
This dashboard shows:
• Daily revenue trends
• Order status breakdown
"
Holistics Text Elements
Dashboard your_dashboard {

block block_name: FilterBlock { }
block block_name: VizBlock { }

block dashboard_intro: TextBlock {
content: @md
# Welcome
## Overview

This dashboard shows:

* Daily revenue trends
* Order status breakdown
;;
}

view: CanvasLayout {
block dashboard_intro {
position: pos(800, 700, 500, 400) // position the element 800 pixels from the left of the dashboard, 700 pixels from the top, 500 pixels wide, and 400 pixels tall
}
}
}

Note: Holistics uses Markdown syntax for text formatting, providing a more familiar editing experience for developers.

Detailed Feature Comparison

LookML ParameterPurposeSupportHolistics Equivalent & Implementation
Dashboard Parameters
dashboardCreate a dashboard.Using Holistics Dashboard syntax Dashboard your_dashboard { }
title (for dashboard)Change the way a dashboard name appears to users.Using title: 'Dashboard Title'
description (for dashboard)Add a description to a dashboard.Using description: 'Dashboard description'
enable_viz_full_screenDefine whether dashboard viewers can see dashboard tiles in full-screen and expanded views.Users can see full-screen VizBlock by default and admins/analysts cannot control this
extendsBase the LookML dashboard on another LookML dashboard.Using Holistics AML Extend
extensionRequire that the dashboard is extended by another dashboard.✔️
(partial)
No direct equivalent, but can create AML Func for a Dashboard
layoutStart a section of LookML to define the elements that should go into each row of a layout: grid dashboard.Not supported yet, but default, our dashboard will be layout as canvas.
elements (for rows)Define the elements that should go into a row of a layout: grid dashboard.Holistics doesn't support grid layout.
height (for rows)Define the height of a row for a layout: grid dashboard.Holistics doesn't support grid layout.
tile_sizeDefine the size of a tile for a layout: tile dashboard.Not supported yet.
width (for dashboard)Define the width of the dashboard for a layout: static dashboard.Can change both width and height of a Dashboard via view:
CanvasLayout { width: 1560 height: 1080 }
refresh (for dashboard)Set the interval on which dashboard elements will automatically refresh.

Note that the dashboard must be open in a browser window for this parameter to have an effect.
This setting does not run in the background to "pre-warm" the dashboard cache.
Not suppported yet.
auto_runDetermine whether dashboards run automatically when initially opened or reloaded.By default, the Dashboard is auto-run, but users can disable it by using
settings { autorun: false }
Filter Parameters
crossfilter_enabledEnable or disable cross-filtering for a dashboard.Holistics support cross-filtering by default
filters_bar_collapsedSet the dashboard filter bar as default collapsed or expanded for a dashboard.Holistics doesn't have dedicated filter bar as filters can place anywhere in the dashboard
filters_location_topSet the dashboard filter bar location as top or right for a dashboard.Users can position filters anywhere in the dashboard
filters (for dashboard)Start a section of LookML to define dashboard filters.Using block block_name: FilterBlock { }
name (for filters)Create a filter.Using block block_name: FilterBlock { }
title (for filters)Change the way a filter name appears to users.Using label: 'Filter Label'
type (for filters)Determine the type of filter to be used.Using type: 'field'
default_valueSet a default value for a filter, if desired.Using default { operator: 'is', value: ['value1', 'value2'] }
allow_multiple_valuesLimit users to a single filter value.Using settings { input_type: 'single' }
requiredRequire that a filter is selected.Not supported yet.
ui_configConfigure the filter controls that are available when users view a LookML dashboard. Has subparameters type, display, and options.Not supported yet.
model (for filters)Specify the model that contains the underlying field of a type: field_filter filter.No equivalent in Holistics
explore (for filters)Specify the Explore that contains the underlying field of a type: field_filter filter.Using dataset: dataset_name
fieldSpecify the underlying field of a type: field_filter filter.Using field: ref('model_name', 'field_name')
listens_to_filtersNarrow suggestions for dashboard filters of field_filter based on what the user enters for another dashboard filters of type: field_filter.Holistics Parrent-child filter
Common Chart Parameters
name (for elements)Creates a new dashboard element and assigns it a name.Using block block_name: VizBlock { }
title (for elements)Changes how an element's name will appear to users.Using label: 'Element Label'
type (for elements)Determines the type of visualization to be used in the element.Using viz: ChartType { }
height (for elements)Defines the height of an element in units of tile_size.specify height in position: pos(left, top, width, height) inside view: CanvasLayout { }
width (for elements)Defines the width of an element in units of tile_size.specify width in position: pos(left, top, width, height) inside view: CanvasLayout { }
topDefines the top-to-bottom position of an element in units of tile_size.specify top in position: pos(left, top, width, height) inside view: CanvasLayout { }
leftDefines the left-to-right position of an element in units of tile_size.specify left in position: pos(left, top, width, height) inside view: CanvasLayout { }
rowDefines the top-to-bottom position of an element in units of rows for layout: newspaper dashboardsHolistics doesn't support newspaper layout yet
colDefines the left-to-right position of an element in units of columns for layout: newspaper dashboardsHolist ics doesn't support newspaper layout yet
refresh (for elements)Sets the interval at which the element will automatically refresh.Not supported yet
noteStarts a section of LookML to define a note for an element.Using description: 'your block description or note'
Query Parameters
modelDefines the model to be used for the element's query.Using dataset: dataset_name
explore (for elements)Defines the Explore to be used for the element's query.Using dataset: dataset_name
dimensionsDefines the dimensions to be used for the element's query.Use
- x_axis with LineChart, BarChart of ColumnChart
- fields: [] with DataTable
- rows: [] with Pivot Table
measuresDefines the measures to be used for the element's query.Use
- y_axis with LineChart, BarChart of ColumnChart
- fields: [] with DataTable
- values: [] with Pivot Table
sortsDefines the sorts to be used for the element's query.Using sort { field_index: 0, direction: 'desc' }
pivotsDefines the dimensions that should be pivoted for the element's query.Using
- legend: with Cartesian Charts
- columns: [] with Pivot Table
limitDefines the row limit to be used for the element's query.Using settings { row_limit: 10000 }
column_limitDefines the column limit to be used for the element's query.Not supported yet
filters (for elements)Defines the filters that cannot be changed for the element's query.Use filter { }
listenDefines the filters that can be changed for the element's query.Support via interactions: [ FilterInteraction {} ]
query_timezoneDefines the time zone that should be used when the query is run.Follow Dashboard Timezone
merged_queriesDefines a merged results query.Not supported yet
hidden_fieldsSpecifies any fields to use in the query but hide in the chart.Use hidden: true inside VizFieldFull {}
Plot Parameters for Cartesian Charts
stackingSpecifies how series are stacked in the visualization.Using
- settings { stack_series_by: 'value' }
- settings { stack_series_by: 'percentage' }
show_dropoffShows a dropoff marker for column charts.Not supported yet
orderingSpecifies how bars or columns are ordered within groups.Use sort {} inside setting of a VizBlock
column_spacing_ratioSets the spacing between columns.Not supported yet
column_group_spacing_ratioSets the spacing between column groups.Not supported yet
hide_legendHides the chart legend.
legend_positionSpecifies the position of the legend.
limit_displayed_rowsShows or hides rows in a visualization based on position.
swap_axesSwaps the x and y axes.
interpolationSpecifies how points are connected in line and area charts.
show_null_pointsShows null values in the visualization.
discontinuous_nullsBreaks the line or area at null values.
cluster_pointsGroups points that are close together in scatter charts.
Plot Parameters for Pie and Donut Charts
value_labelsChanges how individual sections of a pie chart are labeled.
label_typeCustomizes the format of labels that mark sections of a pie chart.
inner_radiusDetermines the inner radius of a pie chart (donut chart).
charts_acrossSpecifies the number of donut charts per row.
Plot Parameters for Progression Charts
smoothedBarsConnects the outer edge of each bar in funnel charts.
isSteppedDisplays the funnel chart in stepped funnel style.
orientationSpecifies whether data is drawn from rows or columns.
labelScaleSpecifies the size of labels on chart bars and sides.
Value Parameters
show_value_labelsShows labels next to data points.
show_null_labelsShows labels for null values.
label_colorSpecifies the color for value labels.
font_sizeSets the font size of value labels.
label_rotationSets the rotation of value labels.
label_value_formatSpecifies the number format for value labels.
show_totals_labelsShows total values for stacked visualizations.
hidden_seriesHides specific series from the visualization.
show_silhouetteShows a silhouette of the entire chart.
totals_colorSpecifies the color for total labels.
Series Parameters
colorsSets the colors of chart series based on order.
series_colorsSets the colors of chart series based on series name.
series_labelsChanges the way a series name appears to users.
series_typesAssigns different chart types to individual series.
show_view_namesShows view names in chart labels.
point_styleSpecifies the style of points in line and scatter charts.
series_point_stylesSets point styles for specific series.
size_by_fieldSpecifies a field to determine point size in scatter charts.
plot_size_by_fieldEnables sizing points by a field value.
X-Axis Parameters
x_axis_scaleSpecifies the scale type for the x-axis.
x_axis_reversedReverses the direction of the x-axis.
show_x_axis_labelShows a label on the x-axis.
x_axis_labelSpecifies a label for the x-axis.
show_x_axis_ticksShows value labels on the x-axis.
x_axis_gridlinesShows gridlines from the x-axis.
x_axis_label_rotationSets the rotation of x-axis labels.
x_axis_datetime_labelSpecifies a format for datetime x-axis labels.
x_axis_zoomEnables zooming on the x-axis.
Y-Axis Parameters
y_axis_gridlinesShows gridlines from the y-axis.
y_axis_reversedReverses the direction of the y-axis.
reference_linesAdds reference lines or regions to the chart.
y_axis_zoomEnables zooming on the y-axis.
leftAxisLabelVisibleShows a label on the left axis.
leftAxisLabelSpecifies a label for the left axis.
rightAxisLabelVisibleShows a label on the right axis.
rightAxisLabelSpecifies a label for the right axis.
Text Tile Parameters
title_textSpecifies a title for a text element.
subtitle_textSpecifies a subtitle for a text element.
body_textSpecifies body text for a text element.
Single Value Parameters
custom_color_enabledEnables custom color for single value visualization.
custom_colorSpecifies a custom color for text in single value visualization.
show_single_value_titleShows a title with the query's value.
single_value_titleSpecifies a title to display with the query's value.
valueFormatSpecifies the number format for the value.
show_comparisonAdds comparison information to a single value element.
comparison_typeSpecifies how the comparison field is used.
show_comparison_labelShows a label with the comparison field.
comparison_labelSpecifies the label for the comparison field.
comparison_reverse_colorsReverses colors for negative/positive comparisons.
Quadrant Parameters for Scatter Charts
quadrants_enabledEnables quadrant divisions in scatter charts.
quadrant_propertiesConfigures properties for each quadrant.
custom_quadrant_point_xSets the x-coordinate for quadrant division.
custom_quadrant_point_ySets the y-coordinate for quadrant division.
custom_quadrant_value_xSets the x-value for quadrant division.
custom_quadrant_value_ySets the y-value for quadrant division.

Let us know what you think about this document :)