Compare commits

...

3 Commits

Author SHA1 Message Date
Dave Connors
5f43a1c297 resolve merge conflict 2022-09-14 14:51:01 -05:00
Dave Connors
11e155de86 changie entry 2022-09-14 14:05:24 -05:00
Dave Connors
823aa0a575 formatting 2022-09-14 14:04:06 -05:00
8 changed files with 33 additions and 0 deletions

View File

@@ -0,0 +1,7 @@
kind: Features
body: add fill missing value attribute
time: 2022-09-14T14:05:11.927083-05:00
custom:
Author: dave-connors-3
Issue: "5842"
PR: "5843"

View File

@@ -825,6 +825,7 @@ class ParsedMetric(UnparsedBaseNode, HasUniqueID, HasFqn):
time_grains: List[str]
dimensions: List[str]
window: Optional[MetricTime]
fill_missing_values: Optional[bool] = True
model: Optional[str] = None
model_unique_id: Optional[str] = None
resource_type: NodeType = NodeType.Metric
@@ -852,6 +853,9 @@ class ParsedMetric(UnparsedBaseNode, HasUniqueID, HasFqn):
def same_window(self, old: "ParsedMetric") -> bool:
return self.window == old.window
def same_fill_missing_values(self, old: "ParsedMetric") -> bool:
return self.fill_missing_values == old.fill_missing_values
def same_dimensions(self, old: "ParsedMetric") -> bool:
return self.dimensions == old.dimensions
@@ -891,6 +895,7 @@ class ParsedMetric(UnparsedBaseNode, HasUniqueID, HasFqn):
return (
self.same_model(old)
and self.same_window(old)
and self.same_fill_missing_values(old)
and self.same_dimensions(old)
and self.same_filters(old)
and self.same_description(old)

View File

@@ -475,6 +475,7 @@ class UnparsedMetric(dbtClassMixin, Replaceable):
time_grains: List[str] = field(default_factory=list)
dimensions: List[str] = field(default_factory=list)
window: Optional[MetricTime] = None
fill_missing_values: Optional[bool] = True
model: Optional[str] = None
filters: List[MetricFilter] = field(default_factory=list)
meta: Dict[str, Any] = field(default_factory=dict)

View File

@@ -1113,6 +1113,7 @@ class MetricParser(YamlReader):
timestamp=unparsed.timestamp,
dimensions=unparsed.dimensions,
window=unparsed.window,
fill_missing_values=unparsed.fill_missing_values,
time_grains=unparsed.time_grains,
filters=unparsed.filters,
meta=unparsed.meta,

View File

@@ -693,6 +693,7 @@ class TestUnparsedMetric(ContractTestCase):
'timestamp': 'signup_date',
'time_grains': ['day', 'week', 'month'],
'dimensions': ['plan', 'country'],
'fill_missing_values': False,
'filters': [
{
"field": "is_paying",
@@ -722,6 +723,7 @@ class TestUnparsedMetric(ContractTestCase):
'time_grains': ['day', 'week', 'month'],
'timestamp': 'signup_date',
'dimensions': [],
'fill_missing_values': True,
'filters': [],
'tags': [],
'window': {},
@@ -742,6 +744,7 @@ class TestUnparsedMetric(ContractTestCase):
timestamp="signup_date",
time_grains=['day', 'week', 'month'],
dimensions=['plan', 'country'],
fill_missing_values=False,
filters=[MetricFilter(
field="is_paying",
value='True',

View File

@@ -381,6 +381,7 @@ def make_metric(pkg, name, path=None):
operator="=",
)],
window=MetricTime(),
fill_missing_values=True,
meta={'is_okr': True},
tags=['okrs'],
)

View File

@@ -117,6 +117,7 @@ class ManifestTest(unittest.TestCase):
meta={'is_okr': True},
tags=['okrs'],
window=MetricTime(),
fill_missing_values=True,
resource_type=NodeType.Metric,
depends_on=DependsOn(nodes=['model.root.multi']),
refs=[['multi']],

View File

@@ -19,6 +19,7 @@ metrics:
expression: "*"
timestamp: created_at
time_grains: [day, week, month]
fill_missing_values: False
dimensions:
- favorite_color
- loves_dbt
@@ -82,12 +83,25 @@ class TestSimpleMetrics:
assert len(results) == 1
manifest = get_manifest(project.project_root)
metric_ids = list(manifest.metrics.keys())
fill_missing_values_settings = {}
for metric_id in list(manifest.metrics.keys()):
parsed_metric_node = manifest.metrics[metric_id]
fill_missing_values_settings[metric_id] = getattr(
parsed_metric_node, "fill_missing_values"
)
expected_fill_missing_values_settings = {
"metric.test.number_of_people": False,
"metric.test.collective_tenure": True,
"metric.test.collective_window": True,
}
expected_metric_ids = [
"metric.test.number_of_people",
"metric.test.collective_tenure",
"metric.test.collective_window",
]
assert metric_ids == expected_metric_ids
assert fill_missing_values_settings == expected_fill_missing_values_settings
invalid_models__people_metrics_yml = """