Skip to content
Snippets Groups Projects
Unverified Commit ddfa5647 authored by Robert Roland's avatar Robert Roland Committed by GitHub
Browse files

Handle named aggregations (#13030)

Fixes an error generating query descriptions with named aggregations and
multiple parameters in a aggregation.

Resolves #13022
parent a722dc0a
No related merge requests found
......@@ -14,13 +14,21 @@
(defn- get-aggregation-description
[metadata query]
(let [field-name (fn [match] (:display_name (Field (mbql.u/field-clause->id-or-literal match))))]
(let [field-name (fn [match] (map
(fn [m] (:display_name (Field (mbql.u/field-clause->id-or-literal m))))
(mbql.u/match match :field-id)))]
(when-let [agg-matches (mbql.u/match query
[:aggregation-options _ (options :guard :display-name)]
{:type :aggregation :arg (:display-name options)}
[:aggregation-options ag _]
(recur ag)
[:metric arg] {:type :metric
:arg (let [metric (Metric arg)]
(if (not (str/blank? (:name metric)))
(:name metric)
(deferred-tru "[Unknown Metric]")))}
:arg (let [metric (Metric arg)]
(if (not (str/blank? (:name metric)))
(:name metric)
(deferred-tru "[Unknown Metric]")))}
[:rows] {:type :rows}
[:count] {:type :count}
[:cum-count] {:type :cum-count}
......
......@@ -31,51 +31,61 @@
(testing "with cumulative sum of price"
(is (= {:table "Venues"
:aggregation [{:type :cum-sum
:arg "Price"}]}
:arg ["Price"]}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:aggregation [[:cum-sum $price]]}))))))
(testing "with equality filter"
(is (= {:table "Venues"
(is (= {:table "Venues"
:filter [{:field "Price"}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:filter [:= [$price 1234]]}))))))
(testing "with order-by clause"
(is (= {:table "Venues"
(is (= {:table "Venues"
:order-by [{:field "Price" :direction :asc}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:order-by [[:asc $price]]}))))))
(testing "with an aggregation metric"
(tt/with-temp Metric [metric {:table_id (mt/id :venues) :name "Test Metric 1"
(tt/with-temp Metric [metric {:table_id (mt/id :venues) :name "Test Metric 1"
:definition {:aggregation [[:count]]}}]
(is (= {:table "Venues"
(is (= {:table "Venues"
:aggregation [{:type :metric
:arg "Test Metric 1"}]}
:arg "Test Metric 1"}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:aggregation [[:metric (:id metric)]]}))))))
{:aggregation [[:metric (:id metric)]]}))))))
(is (= {:table "Venues"
(is (= {:table "Venues"
:aggregation [{:type :metric
:arg (deferred-tru "[Unknown Metric]")}]}
:arg (deferred-tru "[Unknown Metric]")}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:aggregation [[:metric -1]]}))))))
(testing "with segment filters"
(tt/with-temp Segment [segment {:name "Test Segment 1"}]
(is (= {:table "Venues"
(is (= {:table "Venues"
:filter [{:segment "Test Segment 1"}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:filter [[:segment (:id segment)]]}))))))
(is (= {:table "Venues"
(is (= {:table "Venues"
:filter [{:segment (deferred-tru "[Unknown Segment]")}]}
(sut/generate-query-description (Table (mt/id :venues))
(:query (mt/mbql-query :venues
{:filter [[:segment -1]]})))))))))
{:filter [[:segment -1]]}))))))
(testing "with named aggregation"
(is (= {:table "Venues"
:aggregation [{:type :aggregation :arg "Nonsensical named metric"}]}
(sut/generate-query-description (Table (mt/id :venues))
{:aggregation [[:aggregation-options
[:sum [:*
[:field-id (mt/id :venues :latitude)]
[:field-id (mt/id :venues :longitude)]]]
{:display-name "Nonsensical named metric"}]]})))))))
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