forked from calogica/dbt-expectations
-
Notifications
You must be signed in to change notification settings - Fork 0
/
expect_column_values_to_be_within_n_stdevs.sql
49 lines (43 loc) · 1.14 KB
/
expect_column_values_to_be_within_n_stdevs.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{% macro test_expect_column_values_to_be_within_n_stdevs(model,
column_name,
group_by=None,
sigma_threshold=3
) %}
with metric_values as (
{% if group_by -%}
select
{{ group_by }} as metric_date,
sum({{ column_name }}) as {{ column_name }}
from
{{ model }}
group by
1
{%- else -%}
select
{{ column_name }} as {{ column_name }},
from
{{ model }}
{%- endif %}
),
metric_values_with_statistics as (
select
*,
avg({{ column_name }}) over() as {{ column_name }}_average,
stddev({{ column_name }}) over() as {{ column_name }}_stddev
from
metric_values
),
metric_values_z_scores as (
select
*,
({{ column_name }} - {{ column_name }}_average)/{{ column_name }}_stddev as {{ column_name }}_sigma
from
metric_values_with_statistics
)
select
count(*) as error_count
from
metric_values_z_scores
where
abs({{ column_name }}_sigma) > {{ sigma_threshold }}
{%- endmacro %}