Vega Lite
Data Transformation
How Can I Use the Lookup Transform in Vega-Lite?

How Can I Use the Lookup Transform in Vega-Lite?

Imagine you have two separate data sources and you want to combine them. Perhaps you have sales data in one file and customer details in another. The lookup transform in Vega-Lite allows you to enrich your primary data source by fetching related values from another data source. Think of it as a one-sided join in SQL.

To get started, your specification would look something like this:

{
  ...
  "transform": [
    {"lookup": ..., "from": ..., "as": ..., "default": ...} // Lookup Transform
     ...
  ],
  ...
}

What is Lookup Transform?

The lookup transform helps you add values from a secondary data source to your main data source. For every entry in your main data, the lookup transform will check for matching entries in the secondary data source based on specified fields.

Lookup Transform Properties

Here are the essential properties you'll need:

  • lookup: The field in the main data source to match.
  • from: An object describing the secondary data source.
  • as: The field name(s) for the new values added to the main data.
  • default: Optional. A default value if no match is found.

Matching the Data: from Property

The from property tells Vega-Lite how to match fields between the data sources and which fields to bring into the main data.

Example

Let's say you have a main data source of people and a secondary data source of their attributes (like age and height). You want to add these attributes to your main data.

{
  "data": {"url": "data/people.json"},
  "transform": [
    {
      "lookup": "person",
      "from": {
        "data": {"url": "data/attributes.json"},
        "key": "name",
        "fields": ["age", "height"]
      },
      "as": ["age", "height"]
    }
  ]
}

In this example:

  • lookup is the field person in the main data source.
  • from specifies the secondary file, using name as the key to match.
  • fields lists the additional fields to append.
  • as names the new fields in the main data.

Can I Use Selections for Lookup?

Yes! You can also reference a selection parameter instead of a static key value.

Example: Interactive Index Chart

Imagine an interactive chart where different data sets are dynamically merged based on user input. This enriches the visualization with real-time data combinations.

{
  ...
  "transform": [
    {
      "lookup": "fieldName",
      "from": {
        "param": "selectionName"
      },
      "as": "newFieldName"
    }
  ]
}

Frequently Asked Questions

1. What happens if there's no match found in the secondary data source?

If no match is found, the default value you specify will be used. If no default is specified, the resulting field will be null.

2. Can I match multiple fields between data sources?

You need to specify a single field for matching in the lookup and from.key. However, you can perform multiple lookups to match additional fields.

3. How does lookup transform affect performance?

Using lookup transforms can be computationally expensive, especially with large datasets. For performance, ensure your key fields are unique and consider reducing data size if possible.

4. Can I visualize the results directly in Vega-Lite?

Absolutely! You can directly visualize the enriched data. For example, create a bar chart showing the added fields such as 'age' and 'height' once merged.

{
  "data": {"url": "data/people.json"},
  "transform": [
    {
      "lookup": "person",
      "from": {
        "data": {"url": "data/attributes.json"},
        "key": "name",
        "fields": ["age", "height"]
      },
      "as": ["age", "height"]
    }
  ],
  "mark": "bar",
  "encoding": {
    "x": {"field": "person", "type": "nominal"},
    "y": {"field": "age", "type": "quantitative"}
  }
}

Now, you have a quick and practical guide to using the lookup transform in Vega-Lite. Happy visualizing!