Skip to content

Add support for default value on a dimension link when there are nulls after a join#1714

Merged
shangyian merged 8 commits intoDataJunction:mainfrom
shangyian:default_value
Jan 27, 2026
Merged

Add support for default value on a dimension link when there are nulls after a join#1714
shangyian merged 8 commits intoDataJunction:mainfrom
shangyian:default_value

Conversation

@shangyian
Copy link
Copy Markdown
Collaborator

@shangyian shangyian commented Jan 26, 2026

Summary

When using left or right joins for dimension links, unmatched rows produce NULL values for dimension columns. This can be problematic for downstream consumers that expect non-null values.

The PR adds support for setting default_value on a dimension link, which enables users to specify a fallback value (e.g., "Unknown", "N/A") that will be used in place of NULL. When a dimension link has a default_value configured, dimension columns will be wrapped in COALESCE(column, 'default_value') in the generated SQL, providing a fallback value when the join doesn't match.

The changes are needed across various interfaces:

Database + Models

  • Added default_value column to DimensionLink database model
  • Added database migration for the new column

YAML Support

dimension_links:
  - dimension_node: users
    join_type: left
    join_on: "events.user_id = users.id"
    default_value: "Unknown"

SQL Generation

  • V2 SQL Builder: Updated build_dimension_attribute to wrap dimension columns in coalesce
  • V3 SQL Builder: Updated build_select_ast() to apply coalesce

Generates queries like

SELECT
  COALESCE(users.name, 'Unknown') AS user_name
FROM events
LEFT JOIN users ON events.user_id = users.id

GraphQL

Added defaultValue field to DimensionLink type in the GraphQL schema

UI

Added "Default Value" form field to the complex dimension link popover.

Test Plan

  • PR has an associated issue: #
  • make check passes
  • make test shows 100% unit test coverage

Deployment Plan

@netlify
Copy link
Copy Markdown

netlify bot commented Jan 26, 2026

Deploy Preview for thriving-cassata-78ae72 canceled.

Name Link
🔨 Latest commit 3c62f37
🔍 Latest deploy log https://app.netlify.com/projects/thriving-cassata-78ae72/deploys/6978311095f0a00008c8e78a

@shangyian shangyian marked this pull request as ready for review January 27, 2026 04:31
@shangyian shangyian merged commit c5c6c76 into DataJunction:main Jan 27, 2026
17 checks passed
@shangyian shangyian deleted the default_value branch January 27, 2026 04:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant