Migrating Looker Views to Holistics
Overview
A view in Looker corresponds to a model in Holistics.
A view in Looker represents a database table or a derived table. In Holistics, this is equivalent to a Table Model or Query Model. Holistics Model has the equivalent common concepts like table name, dimension, and measure.

Step-by-Step Migration Tutorial
Step 1: Identify View Type
Determine if the view is based on a table or a derived query:
- Table-based view → Table Model
- Derived view → Query Model
- Extended view → Extended Model
Looker has 2 types of derived views:
- SQL-based derived table version: a derived view built from a SQL query
- Native derived table version: a derived view built from an Explore
Holistics only supports SQL-based derived view conversion.
Step 2: Create Model Structure
For table-based views
// Looker
view: orders {
sql_table_name: public.orders ;;
# fields defined here...
}
// Holistics
Model orders {
type: 'table'
table_name: 'public.orders'
// fields defined here...
}
For more details on table model, see Table Model.
For SQL-based derived views
// Looker
view: active_users {
derived_table: {
sql: SELECT
user_id,
COUNT(DISTINCT order_id) as order_count
FROM orders
WHERE status = 'completed'
GROUP BY 1 ;;
}
}
// Holistics
Model active_users {
type: 'query'
data_source_name: 'warehouse'
query: @sql
SELECT
user_id,
COUNT(DISTINCT order_id) as order_count
FROM orders
WHERE status = 'completed'
GROUP BY 1;;
}
For more details on query model, see Query Model.
For extended views
// Looker
view: extended_orders {
extends: [orders]
dimension: is_high_value {
type: yesno
sql: ${amount} > 1000 ;;
}
}
// Holistics
Model extended_orders = orders.extend({
label: 'Extended Orders',
dimension is_high_value {
type: 'truefalse'
definition: @sql {{ amount }} > 1000;;
}
})
For more details on extended model, see AML Extend.
Step 3: Add Data Source Name to Your Models
Unlike Looker where connections are defined at the model level, Holistics requires explicitly specifying the data source for each model. Check the connection property in your Looker model file and add it to your Holistics model:
connection: "warehouse" // Defined once at model level
include: "views/*.view"
explore: order_items {
join: products { ... }
join: orders { ... }
}
Model order_items {
data_source_name: 'warehouse' // Required in each model
}
For more details on connection differences, see Conceptual Differences: Data Source Connection.
Step 4: Migrate Fields
After setting up the model structure, migrate the fields following these dedicated guides:
- For dimensions, follow the migrating dimension guide
- For measures, follow the migrating measure guide
These guides provide detailed instructions for converting different types of fields and their properties.
Step 5: Handle Persistence (for derived views)
In Looker, persistence is configured within the derived table:
view: order_summary {
derived_table: {
sql: SELECT
user_id,
COUNT(*) as order_count,
SUM(amount) as total_amount
FROM orders
GROUP BY user_id ;;
interval_trigger: "24 hours"
}
}
In Holistics, we handle this with Query Model persistence and schedules: Define the persistence in the model's definition, and set up the schedule in the schedules.aml file.
Model order_summary {
type: 'query'
query: @sql
SELECT
user_id,
COUNT(*) as order_count,
SUM(amount) as total_amount
FROM orders
GROUP BY user_id;;
persistence: FullPersistence {
schema: 'persisted'
view_name: 'order_summary'
}
}
const schedules = [
// Refresh order_summary daily at midnight
Schedule {
models: [order_summary],
cron: '0 0 * * *' // daily at midnight
}
]
For more details on persistence options in Holistics, see our Persistence documentation.
Step 5: Test and Validate
- Verify all fields are correctly migrated
- Check data types are properly mapped
- Test derived calculations
- Compare query results with Looker
Step 6: Continue migrating models and explores
For more details on migrating models and explores, see the following guides:
Detailed Feature Comparison
| LookML Parameter | Purpose | Support | Holistics Equivalent & Implementation |
|---|---|---|---|
| Structural Parameters | |||
| drill_fields | Control which fields to show when drilling/clicking a field | ❌ | Holistics currently supports drilling between dashboards as in Drill Through, but we haven't supported field-level control yet |
| extend (for view) | Build a new View based on an existing View | ✅ | Holistics AML Extend |
| extension | Force using extends on a view | 🧪 (partial) | Holistics doesn't support this exact concept but we can rebuild this via Function |
| include | Add files to a view | ||
| test | Creates a data test to verify your model's logic. |