mirror of
https://github.com/dbt-labs/dbt-core
synced 2025-12-18 23:11:28 +00:00
Compare commits
3 Commits
v1.10.9
...
feature/ad
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
5f43a1c297 | ||
|
|
11e155de86 | ||
|
|
823aa0a575 |
7
.changes/unreleased/Features-20220914-140511.yaml
Normal file
7
.changes/unreleased/Features-20220914-140511.yaml
Normal 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"
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -381,6 +381,7 @@ def make_metric(pkg, name, path=None):
|
||||
operator="=",
|
||||
)],
|
||||
window=MetricTime(),
|
||||
fill_missing_values=True,
|
||||
meta={'is_okr': True},
|
||||
tags=['okrs'],
|
||||
)
|
||||
|
||||
@@ -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']],
|
||||
|
||||
@@ -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 = """
|
||||
|
||||
Reference in New Issue
Block a user