Skip to content

Commit

Permalink
Feature/fix field on field join (#250)
Browse files Browse the repository at this point in the history
* fix field on field join necessitated by value field bug

* bump version
  • Loading branch information
pblankley authored Feb 4, 2025
1 parent 0485f23 commit 8b85d82
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 1 deletion.
1 change: 1 addition & 0 deletions metrics_layer/core/sql/query_filter.py
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ def validate(self, definition: Dict) -> None:
if "value" in definition and isinstance(definition["value"], str) and "." in definition["value"]:
try:
value_field = self.design.get_field(definition["value"])
self.design.field_lookup[value_field.id()] = value_field
functional_pk = self.design.functional_pk()
definition["value"] = LiteralValue(value_field.sql_query(self.query_type, functional_pk))
except Exception:
Expand Down
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[tool.poetry]
name = "metrics_layer"
version = "0.12.49"
version = "0.12.50"
description = "The open source metrics layer."
authors = ["Paul Blankley <[email protected]>"]
keywords = ["Metrics Layer", "Business Intelligence", "Analytics"]
Expand Down
31 changes: 31 additions & 0 deletions tests/test_join_query.py
Original file line number Diff line number Diff line change
Expand Up @@ -1704,3 +1704,34 @@ def test_query_with_or_filters_alternate_syntax_merged_result(connection):
" WHERE order_lines_costs_per_session>1;"
)
assert query == correct


@pytest.mark.query
def test_join_query_field_on_field_filter(connection):
query = connection.get_sql_query(
metrics=["number_of_orders"],
dimensions=["new_vs_repeat"],
where=[
{
"field": "orders.order_date",
"expression": "greater_than",
"value": "customers.first_order_date",
},
{"field": "orders.new_vs_repeat", "expression": "equal_to", "value": "orders.campaign"},
{
"field": "orders.revenue_in_cents",
"expression": "equal_to",
"value": "orders.revenue_dimension",
},
],
)

correct = (
"SELECT orders.new_vs_repeat as orders_new_vs_repeat,COUNT(orders.id) as orders_number_of_orders FROM"
" analytics.orders orders LEFT JOIN analytics.customers customers ON"
" orders.customer_id=customers.customer_id WHERE DATE_TRUNC('DAY',"
" orders.order_date)>DATE_TRUNC('DAY', customers.first_order_date) AND"
" orders.new_vs_repeat=orders.campaign AND orders.revenue * 100=orders.revenue GROUP BY"
" orders.new_vs_repeat ORDER BY orders_number_of_orders DESC NULLS LAST;"
)
assert query == correct

0 comments on commit 8b85d82

Please sign in to comment.