Skip to content
Snippets Groups Projects
Unverified Commit e094c38b authored by lbrdnk's avatar lbrdnk Committed by GitHub
Browse files

Splice expression into appropriate stage during v2 metric expansion (#48800)

* Fix expression stage

* Add test

* Parallel test

* Adjust test

* Adjust test
parent eefd7543
No related branches found
No related tags found
No related merge requests found
......@@ -64,8 +64,8 @@
not-empty)))
(defn- expression-with-name-from-source
[query [_ {:lib/keys [expression-name]} :as expression]]
(lib/expression query 0 expression-name expression))
[query agg-stage-index [_ {:lib/keys [expression-name]} :as expression]]
(lib/expression query agg-stage-index expression-name expression))
(defn- update-metric-query-expression-names
[metric-query unique-name-fn]
......@@ -137,7 +137,8 @@
(:qp/stage-had-source-card (lib.util/query-stage query agg-stage-index)))))
(let [metric-query (update-metric-query-expression-names metric-query unique-name-fn)]
(as-> query $q
(reduce expression-with-name-from-source $q (lib/expressions metric-query -1))
(reduce #(expression-with-name-from-source %1 agg-stage-index %2)
$q (lib/expressions metric-query -1))
(include-implicit-joins $q agg-stage-index metric-query)
(reduce #(lib/filter %1 agg-stage-index %2) $q (lib/filters metric-query -1))
(replace-metric-aggregation-refs $q agg-stage-index lookup)))
......
(ns metabase.query-processor.middleware.metrics-test
(:require
[clojure.test :refer [deftest is testing]]
[java-time.api :as t]
[mb.hawk.assert-exprs.approximately-equal :as =?]
[medley.core :as m]
[metabase.analytics.prometheus :as prometheus]
......@@ -788,6 +789,30 @@
[u.date/temporal-str->iso8601-str int int 3.0]
(mt/rows (qp/process-query query)))))))))
(deftest ^:parallel expressions-from-metrics-are-spliced-to-correct-stage-test
(testing "Integration test: Expression is spliced into correct stage during metric expansion (#48722)"
(mt/with-temp [:model/Card source-model {:dataset_query (mt/mbql-query orders {})
:database_id (mt/id)
:name "source model"
:type :model}
:model/Card metric {:dataset_query
(mt/mbql-query
orders
{:source-table (str "card__" (:id source-model))
:expressions {"somedays" [:datetime-diff
[:field "CREATED_AT" {:base-type :type/DateTime}]
(t/offset-date-time 2024 10 16 0 0 0)
:day]}
:aggregation [[:median [:expression "somedays" {:base-type :type/Integer}]]]})
:database_id (mt/id)
:name "somedays median"
:type :metric}]
(let [mp (lib.metadata.jvm/application-database-metadata-provider (mt/id))
query (-> (lib/query mp (lib.metadata/card mp (:id source-model)))
(lib/aggregate (lib.metadata/metric mp (:id metric))))]
(is (= 2162
(ffirst (mt/rows (qp/process-query query)))))))))
(deftest ^:parallel ^:mb/once fetch-referenced-metrics-test
(testing "Metric's aggregation `:name` is used in expanded aggregation (#48625)"
(let [mp (lib.metadata.jvm/application-database-metadata-provider (mt/id))
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment