Connection Setup

Follow the in-product JDBC connection instruction for a dynamic dataset to configure a connection to Honeydew SQL interface.

A dynamic dataset provides filtering on data and fields exposed to the Looker.

Functionality

Honeydew supports Looker Explore over the shared semantic layer.

Groups and Pivots

Any Honeydew attribute can be used as a Looker dimension for groups and pivots.

Measures

Any Honeydew metric can be used as a measure (aggregation) in Looker.

If you want to use a metric as a dimension, define it as a calculated attribute in Honeydew first.

Filters

Any Honeydew attribute or metric can be used as a Looker filter.

Filters are automatically pushed down to the source in order to optimize performance.

Cross-entity queries

Any entity in Honeydew can be used in an Explore.

Joins are automatically constructed by Honeydew. They are based on the relationships between entities that are used in a particular user Explore query.

Custom dimensions and measures

Custom dimensions such as binning, custom groups, unique value list dimension and Looker functions in custom field definitions are automatically converted to Honeydew attributes.

Custom measures such as an ad-hoc average or sum of a dimension are automatically converted to Honeydew metrics.

If you want to reuse a custom measure or a custom dimension defined in Looker: save it in Honeydew to a named attribute or metric.

That way, the code to compute it moves to the shared semantic layer.

Limitations

  1. Filtered measures in an Explore over Honeydew metrics are not supported. Create a Honeydew filtered metric instead.
  2. Persistent Derived Tables (PDTs) are not supported. See performance acceleration in Honeydew.
  3. Joins in an Explore between Views on Honeydew datasets are not supported. Instead, build a single Looker View with all the required entities, and Honeydew will figure out the needed joins.

LookML

Use Honeydew to generate a LookML file.

The LookML for a Honeydew dataset will look similar to this:

## LookML code

view: customers_and_orders {

  # A specific dynamic dataset that applies its filtering
  # Can use world.world for the whole semantic world
  sql_table_name: dynamic_dataset.customers_and_orders ;;

  # String dimensions can look like
  dimension: customer__c_name {
    view_label: "customer"
    label: "c_name"
    type: string
    sql: ${TABLE}."customer.c_name" ;;
  }

  # Date dimensions can look like
  dimension_group: orders__o_orderdate {
    view_label: "orders"
    label: "o_orderdate"
    type: time
    sql: ${TABLE}."orders.o_orderdate" ;;
    timeframes: [date, week, month, month_name, month_num, quarter, quarter_of_year, year]
  }

  # Numeric metrics can look like
  measure: customers__count {
    view_label: "customers"
    label: "count"
    type: number
    sql: AGG(${TABLE}."customers.count") ;;
  }
}