-
Notifications
You must be signed in to change notification settings - Fork 731
Expand file tree
/
Copy pathhealth_score_retention.pipe
More file actions
154 lines (151 loc) · 6.14 KB
/
health_score_retention.pipe
File metadata and controls
154 lines (151 loc) · 6.14 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
NODE health_score_retention_current_quarter
SQL >
%
{% if defined(project) %}
SELECT segmentId, groupUniqArray(memberId) AS currentQuarterMembers
FROM activityRelations_bucket_routing
WHERE
memberId != ''
AND segmentId = (SELECT segmentId FROM segments_filtered)
AND channel NOT IN (SELECT channel FROM repos_to_channels_excluded)
AND (type, platform) IN (SELECT activityType, platform FROM activityTypes_filtered)
{% if defined(repos) %} AND channel IN (SELECT channel FROM repos_to_channels) {% end %}
{% if defined(endDate) %}
AND timestamp >= toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
- INTERVAL 1 QUARTER
)
AND timestamp < toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
)
{% else %}
AND timestamp >= toStartOfQuarter(now() - INTERVAL 1 QUARTER)
AND timestamp < toStartOfQuarter(now())
{% end %}
GROUP BY segmentId
{% else %}
SELECT segmentId, groupUniqArray(memberId) AS currentQuarterMembers
FROM activityRelations_deduplicated_cleaned_bucket_union
WHERE
memberId != ''
AND channel NOT IN (SELECT channel FROM repos_to_channels_excluded)
AND (type, platform) IN (SELECT activityType, platform FROM activityTypes_filtered)
{% if defined(endDate) %}
AND timestamp >= toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
- INTERVAL 1 QUARTER
)
AND timestamp < toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
)
{% else %}
AND timestamp >= toStartOfQuarter(now() - INTERVAL 1 QUARTER)
AND timestamp < toStartOfQuarter(now())
{% end %}
GROUP BY segmentId
{% end %}
NODE health_score_retention_previous_quarter
SQL >
%
{% if defined(project) %}
SELECT segmentId, groupUniqArray(memberId) AS previousQuarterMembers
FROM activityRelations_bucket_routing
WHERE
memberId != ''
AND segmentId = (SELECT segmentId FROM segments_filtered)
AND channel NOT IN (SELECT channel FROM repos_to_channels_excluded)
AND (type, platform) IN (SELECT activityType, platform FROM activityTypes_filtered)
{% if defined(endDate) %}
AND timestamp >= toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
- INTERVAL 2 QUARTER
)
AND timestamp < toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
- INTERVAL 1 QUARTER
)
{% else %}
AND timestamp >= toStartOfQuarter(now() - INTERVAL 2 QUARTER)
AND timestamp < toStartOfQuarter(now() - INTERVAL 1 QUARTER)
{% end %}
GROUP BY segmentId
{% else %}
SELECT segmentId, groupUniqArray(memberId) AS previousQuarterMembers
FROM activityRelations_deduplicated_cleaned_bucket_union
WHERE
memberId != ''
AND channel NOT IN (SELECT channel FROM repos_to_channels_excluded)
AND (type, platform) IN (SELECT activityType, platform FROM activityTypes_filtered)
{% if defined(endDate) %}
AND timestamp >= toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
- INTERVAL 2 QUARTER
)
AND timestamp < toStartOfQuarter(
parseDateTimeBestEffort(
{{ DateTime(endDate, description="Filter before date", required=False) }}
)
- INTERVAL 1 QUARTER
)
{% else %}
AND timestamp >= toStartOfQuarter(now() - INTERVAL 2 QUARTER)
AND timestamp < toStartOfQuarter(now() - INTERVAL 1 QUARTER)
{% end %}
GROUP BY segmentId
{% end %}
NODE health_score_retention_counts
SQL >
%
SELECT
cur.segmentId AS segmentId,
if(
length(coalesce(prev.previousQuarterMembers, [])) > 0,
round(
100 * length(
arrayIntersect(
coalesce(cur.currentQuarterMembers, []),
coalesce(prev.previousQuarterMembers, [])
)
)
/ length(coalesce(prev.previousQuarterMembers, []))
),
0
) AS retentionRate
FROM health_score_retention_current_quarter AS cur
LEFT JOIN health_score_retention_previous_quarter AS prev USING (segmentId)
NODE health_score_retention_benchmark
SQL >
%
SELECT
segmentId,
retentionRate,
CASE
WHEN retentionRate BETWEEN 0 AND 2
THEN 0
WHEN retentionRate BETWEEN 3 AND 5
THEN 1
WHEN retentionRate BETWEEN 6 AND 9
THEN 2
WHEN retentionRate BETWEEN 10 AND 14
THEN 3
WHEN retentionRate BETWEEN 15 AND 19
THEN 4
WHEN retentionRate >= 20
THEN 5
ELSE 0
END AS retentionBenchmark
FROM health_score_retention_counts