From bb865ca9ecebce953419103bbcb76b90f8ea8b60 Mon Sep 17 00:00:00 2001 From: Artem Trofimov Date: Wed, 8 Apr 2026 13:59:02 +0200 Subject: [PATCH] add refund rate metric --- mock-cli/test-shopify/.databao/databao.yml | 13 ++++++++ .../test-shopify/.databao/test_questions.csv | 2 ++ mock-cli/test-shopify/.user.yml | 1 + .../models/metrics/orders_metrics.yml | 23 ++++++++++++++ .../models/semantic_models/orders.yml | 31 +++++++++++++++++++ .../models/staging/metricflow_time_spine.sql | 9 ++++++ .../models/staging/stg_orders.sql | 1 + .../models/staging/metricflow_time_spine.sql | 9 ++++++ .../models/staging/stg_orders.sql | 1 + .../models/staging/metricflow_time_spine.sql | 21 +++++++++++++ .../models/staging/stg_orders.sql | 5 +++ 11 files changed, 116 insertions(+) create mode 100644 mock-cli/test-shopify/.databao/databao.yml create mode 100644 mock-cli/test-shopify/.databao/test_questions.csv create mode 100644 mock-cli/test-shopify/.user.yml create mode 100644 mock-cli/test-shopify/models/metrics/orders_metrics.yml create mode 100644 mock-cli/test-shopify/models/semantic_models/orders.yml create mode 100644 mock-cli/test-shopify/models/staging/metricflow_time_spine.sql create mode 100644 mock-cli/test-shopify/models/staging/stg_orders.sql create mode 100644 mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/metricflow_time_spine.sql create mode 100644 mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/stg_orders.sql create mode 100644 mock-cli/test-shopify/target/run/shopify_analytics/models/staging/metricflow_time_spine.sql create mode 100644 mock-cli/test-shopify/target/run/shopify_analytics/models/staging/stg_orders.sql diff --git a/mock-cli/test-shopify/.databao/databao.yml b/mock-cli/test-shopify/.databao/databao.yml new file mode 100644 index 00000000..1f08a029 --- /dev/null +++ b/mock-cli/test-shopify/.databao/databao.yml @@ -0,0 +1,13 @@ +dbt: + project: shopify_analytics + path: /Users/Artem.Trofimov/Work/databao-cli/mock-cli/test-shopify +databao: + path: /Users/Artem.Trofimov/Work/databao-cli/mock-cli/test-shopify/.databao +connection: + type: duckdb + path: shopify.duckdb + schema: main + threads: 4 +user: + email: artem@databao.app + token: mock_oauth_token_a1b2c3d4 diff --git a/mock-cli/test-shopify/.databao/test_questions.csv b/mock-cli/test-shopify/.databao/test_questions.csv new file mode 100644 index 00000000..c0963102 --- /dev/null +++ b/mock-cli/test-shopify/.databao/test_questions.csv @@ -0,0 +1,2 @@ +question,gold_sql,mf_query,metric,formula +What is the refund rate by month?,,"mf query --metrics refund_rate --group-by metric_time__month",refund_rate,COUNT(*) WHERE financial_status='refunded' / COUNT(*) diff --git a/mock-cli/test-shopify/.user.yml b/mock-cli/test-shopify/.user.yml new file mode 100644 index 00000000..21f68b1d --- /dev/null +++ b/mock-cli/test-shopify/.user.yml @@ -0,0 +1 @@ +id: 7e32390b-2360-4c50-993c-408e4855247f diff --git a/mock-cli/test-shopify/models/metrics/orders_metrics.yml b/mock-cli/test-shopify/models/metrics/orders_metrics.yml new file mode 100644 index 00000000..120e5bc4 --- /dev/null +++ b/mock-cli/test-shopify/models/metrics/orders_metrics.yml @@ -0,0 +1,23 @@ +metrics: + - name: order_count + description: "Total number of orders" + type: simple + type_params: + measure: order_count + label: "Order Count" + + - name: refunded_order_count + description: "Number of orders that were refunded" + type: simple + type_params: + measure: refunded_order_count + filter: "{{ Dimension('order__financial_status') }} = 'refunded'" + label: "Refunded Orders" + + - name: refund_rate + description: "Share of orders that were refunded" + type: ratio + type_params: + numerator: refunded_order_count + denominator: order_count + label: "Refund Rate" diff --git a/mock-cli/test-shopify/models/semantic_models/orders.yml b/mock-cli/test-shopify/models/semantic_models/orders.yml new file mode 100644 index 00000000..87e03c92 --- /dev/null +++ b/mock-cli/test-shopify/models/semantic_models/orders.yml @@ -0,0 +1,31 @@ +semantic_models: + - name: orders + description: "Shopify orders with payment and fulfillment status" + model: ref('stg_orders') + defaults: + agg_time_dimension: created_at + entities: + - name: order + type: primary + expr: id + - name: customer + type: foreign + expr: customer_id + dimensions: + - name: created_at + type: time + type_params: + time_granularity: day + - name: financial_status + type: categorical + - name: fulfillment_status + type: categorical + measures: + - name: order_count + description: "Total number of orders" + agg: count + expr: id + - name: refunded_order_count + description: "Number of orders with financial_status = 'refunded'" + agg: count + expr: id diff --git a/mock-cli/test-shopify/models/staging/metricflow_time_spine.sql b/mock-cli/test-shopify/models/staging/metricflow_time_spine.sql new file mode 100644 index 00000000..cf33be96 --- /dev/null +++ b/mock-cli/test-shopify/models/staging/metricflow_time_spine.sql @@ -0,0 +1,9 @@ +{{ config(materialized='table') }} + +select + cast(range as date) as date_day +from generate_series( + cast('2020-01-01' as date), + cast('2030-01-01' as date), + interval '1 day' +) as t(range) diff --git a/mock-cli/test-shopify/models/staging/stg_orders.sql b/mock-cli/test-shopify/models/staging/stg_orders.sql new file mode 100644 index 00000000..e91d2add --- /dev/null +++ b/mock-cli/test-shopify/models/staging/stg_orders.sql @@ -0,0 +1 @@ +select * from {{ source('shopify_analytics', 'orders') }} diff --git a/mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/metricflow_time_spine.sql b/mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/metricflow_time_spine.sql new file mode 100644 index 00000000..e3fa0b48 --- /dev/null +++ b/mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/metricflow_time_spine.sql @@ -0,0 +1,9 @@ + + +select + cast(range as date) as date_day +from generate_series( + cast('2020-01-01' as date), + cast('2030-01-01' as date), + interval '1 day' +) as t(range) \ No newline at end of file diff --git a/mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/stg_orders.sql b/mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/stg_orders.sql new file mode 100644 index 00000000..3dad7f81 --- /dev/null +++ b/mock-cli/test-shopify/target/compiled/shopify_analytics/models/staging/stg_orders.sql @@ -0,0 +1 @@ +select * from "shopify"."main"."orders" \ No newline at end of file diff --git a/mock-cli/test-shopify/target/run/shopify_analytics/models/staging/metricflow_time_spine.sql b/mock-cli/test-shopify/target/run/shopify_analytics/models/staging/metricflow_time_spine.sql new file mode 100644 index 00000000..9fd09f9c --- /dev/null +++ b/mock-cli/test-shopify/target/run/shopify_analytics/models/staging/metricflow_time_spine.sql @@ -0,0 +1,21 @@ + + + + + + create table + "shopify"."main"."metricflow_time_spine__dbt_tmp" + + as ( + + +select + cast(range as date) as date_day +from generate_series( + cast('2020-01-01' as date), + cast('2030-01-01' as date), + interval '1 day' +) as t(range) + ); + + \ No newline at end of file diff --git a/mock-cli/test-shopify/target/run/shopify_analytics/models/staging/stg_orders.sql b/mock-cli/test-shopify/target/run/shopify_analytics/models/staging/stg_orders.sql new file mode 100644 index 00000000..0395d020 --- /dev/null +++ b/mock-cli/test-shopify/target/run/shopify_analytics/models/staging/stg_orders.sql @@ -0,0 +1,5 @@ + + + create view "shopify"."main"."stg_orders__dbt_tmp" as ( + select * from "shopify"."main"."orders" + );