Skip to content

Commit 0c33d3f

Browse files
author
Charles Lariviere
committed
feat(query): add support for Metric in aggregations
Signed-off-by: Charles Lariviere <charles@dribbble.com>
1 parent eba28bf commit 0c33d3f

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

src/metabase/mbql/query.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
from dataclasses import dataclass, field
2-
from typing import List
2+
from typing import List, Union
33

44
from metabase.mbql.aggregations import Aggregation
55
from metabase.mbql.filter import Filter
66
from metabase.mbql.groupby import GroupBy
7+
from metabase.resources.metric import Metric
78

89

910
@dataclass
1011
class Query:
1112
table_id: int
12-
aggregations: List[Aggregation]
13+
aggregations: List[Union[Aggregation, Metric]]
1314
group_by: List[GroupBy] = field(default_factory=list)
1415
filters: List[Filter] = field(default_factory=list)
1516

@@ -23,7 +24,14 @@ def compile(self):
2324

2425
@property
2526
def _aggregations(self):
26-
return [aggregation.compile() for aggregation in self.aggregations]
27+
aggregations = []
28+
for aggregation in self.aggregations:
29+
if isinstance(aggregation, Metric):
30+
aggregations.append(["metric", aggregation.id])
31+
else:
32+
aggregations.append(aggregation.compile())
33+
34+
return aggregations
2735

2836
@property
2937
def _group_by(self):

tests/mbql/test_query.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from unittest import TestCase
22

3+
from metabase import Metric
34
from metabase.mbql.aggregations import Count, Max
45
from metabase.mbql.filter import Equal
56
from metabase.mbql.groupby import GroupBy
@@ -42,6 +43,12 @@ def test__aggregations(self):
4243
)
4344
self.assertEqual([["count"], ["max", ["field", 5, None]]], query._aggregations)
4445

46+
query = Query(
47+
table_id=12,
48+
aggregations=[Count(), Metric(id=4)],
49+
)
50+
self.assertEqual([["count"], ["metric", 4]], query._aggregations)
51+
4552
def test__group_by(self):
4653
"""Ensure Query._group_by returns a list of compiled GroupBy."""
4754
query = Query(table_id=12, aggregations=[Count()], group_by=[])

0 commit comments

Comments
 (0)