Conceptual Differences
If you come from Looker background, learn the difference and similarities between Looker and Holistics.
Views and Explores (Looker) vs. Models and Datasets (Holistics)
A single Looker view corresponds to a model in Holistics, while a Looker explore aligns with a dataset in Holistics. However, there are certain nuances that prevent them from being exactly equivalent on a conceptual level, which we will clarify with examples later on.
Here's how Looker concepts map to the equivalent Holistics concepts:
Looker file | Holistics equivalent | Purpose & difference |
---|---|---|
Looker view (.view.lkml) | Holistics model (.model.aml) | Similar purpose, different syntax. Looker views (Holistics models) are your basic building blocks for defining business logic. Both represent a database table or a derived table. |
Looker model (.model.lkml) | Holistics dataset (.dataset.aml) | Both represent an abstraction on top of a database to enable self-service exploration. Holistics datasets are more flexible - they don't require a root view and use automatic join paths. |
Looker explore (inside model file) | Holistics dataset | Looker defines explore as a view user can query. Unlike Looker, in Holistics, user can query from any model in a dataset. |
Looker project | Holistics module | Holistics only contain one "project" but can segregate code through use of module . |
Looker view to Holistics model:
Looker explore to Holistics dataset:
Dynamic Root Models vs. Root Models
In Looker, your explores always start from a root view, generating JOINs from there. In Holistics, the starting point is dynamic, chosen based on the fields selected.
Looker's explore feature is a SQL generation interface that creates a series of JOINs based on the fields you select. The first table in the FROM clause of the generated query represents the initial view in Looker’s explore (or in Holistics, we call it root model).
This means that, even when you only select fields in users
view (via Field Picker UI), Looker will always generate the SQL starting from the root model events
to users
via your specified joins.
In Holistics, the table in the from clause is dynamic based on which fields are selected in the our Explore UI
Relationships over Joins
In Looker, you define explicit JOIN clauses in your explores. In Holistics, you define relationships between models, and Holistics automatically generates optimal join paths
A key distinction between Looker and Holistics lies in how they handle joins. Holistics uses relationships to automatically generate appropriate joins, whereas Looker requires users to pre-define the joins in advance within their explores.
For example, this Looker explore:
explore: orders {
join: users {
sql_on: ${orders.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
Becomes this in Holistics:
Dataset ecommerce {
models: [orders, users]
relationships: [
relationship(orders.user_id > users.id, true) // The '>' indicates many-to-one
]
}
Data Source Connection
In Looker and Holistics, data source connections work differently, affecting how you develop and preview your models.
Looker's Approach
Looker requires you to define connections at the model file level only. This means all views and explores within a model must use the same database connection.
connection: "warehouse"
include: "views/*.view"
explore: orders {
join: users { ... }
}
explore: products {
join: categories { ... }
}
When developing in Looker, you cannot preview data directly after creating a new dimension or measure in a view. The process requires:
- First defining the view
- Including that view in a model file
- Creating an explore for that view in the model file
- Navigating to the Explore page to preview your changes
This creates a longer feedback loop during development.
Holistics' Approach
Holistics offers more flexibility by allowing you to specify data source connections at either the dataset or model level:
Dataset ecommerce {
data_source_name: 'warehouse'
models: [orders, products]
}
Model orders {
data_source_name: 'warehouse'
}
Model products {
data_source_name: 'warehouse'
}
This flexibility enables immediate data previewing in the context of your data model. When you add a new dimension or measure to a model, you can instantly preview its output, creating a faster development cycle.
Key Differences
Feature | Looker | Holistics |
---|---|---|
Connection definition | ❌ In Model file only | ✅ Both dataset and model level |
Preview capability | ❌ Requires explore setup | ✅ Immediate in-context preview |
Development workflow | ❌ Multi-step process | ✅ Direct feedback loop |
This approach in Holistics leads to a more streamlined modeling experience with faster iteration cycles.