Skip to content

Commit 3826b89

Browse files
authored
Merge pull request #608 from 1AhmedYasser/Feedback-Rating-Update
Feedback Rating Update
2 parents bdb677c + fa0bf27 commit 3826b89

9 files changed

Lines changed: 610 additions & 437 deletions

‎DSL/Resql/analytics/POST/feedback-avg-feedback-to-buerokratt-chats.sql‎

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
1+
WITH rating_config AS (
2+
SELECT value AS is_five_rating_scale
3+
FROM configuration
4+
WHERE key = 'isFiveRatingScale'
5+
AND id IN (SELECT max(id) FROM configuration WHERE key = 'isFiveRatingScale' GROUP BY key)
6+
AND NOT deleted
7+
)
18
SELECT date_trunc(:metric, ended) AS date_time,
2-
ROUND(1.0 * SUM(CASE WHEN feedback_rating IS NOT NULL THEN feedback_rating ELSE 0 END) / NULLIF(COUNT(DISTINCT base_id), 0), 1) AS avg
9+
CASE
10+
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
11+
THEN ROUND(1.0 * SUM(CASE WHEN feedback_rating_five IS NOT NULL THEN feedback_rating_five ELSE 0 END) / NULLIF(COUNT(DISTINCT base_id), 0), 1)
12+
ELSE ROUND(1.0 * SUM(CASE WHEN feedback_rating IS NOT NULL THEN feedback_rating ELSE 0 END) / NULLIF(COUNT(DISTINCT base_id), 0), 1)
13+
END AS avg
314
FROM chat
415
WHERE (
516
array_length(ARRAY[:urls]::TEXT[], 1) IS NULL
@@ -9,7 +20,7 @@ WHERE (
920
:showTest = TRUE
1021
OR chat.test = FALSE
1122
)
12-
AND EXISTS
23+
AND EXISTS
1324
(SELECT 1
1425
FROM message
1526
WHERE message.chat_base_id = chat.base_id

‎DSL/Resql/analytics/POST/feedback-buerokratt-chats-nps.sql‎

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,30 @@
1-
WITH chat_buerokratt AS (
1+
WITH rating_config AS (
2+
SELECT value AS is_five_rating_scale
3+
FROM configuration
4+
WHERE key = 'isFiveRatingScale'
5+
AND id IN (SELECT max(id) FROM configuration WHERE key = 'isFiveRatingScale' GROUP BY key)
6+
AND NOT deleted
7+
),
8+
chat_buerokratt AS (
29
SELECT DISTINCT base_id,
310
first_value(ended) OVER (
411
PARTITION BY base_id
512
ORDER BY updated
613
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
714
) AS ended,
8-
last_value(feedback_rating) OVER (
9-
PARTITION BY base_id
10-
ORDER BY updated
11-
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
12-
) AS feedback_rating
15+
CASE
16+
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
17+
THEN last_value(feedback_rating_five) OVER (
18+
PARTITION BY base_id
19+
ORDER BY updated
20+
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
21+
)
22+
ELSE last_value(feedback_rating) OVER (
23+
PARTITION BY base_id
24+
ORDER BY updated
25+
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
26+
)
27+
END AS feedback_rating_dynamic
1328
FROM chat
1429
WHERE (
1530
array_length(ARRAY[:urls]::TEXT[], 1) IS NULL
@@ -26,17 +41,21 @@ WITH chat_buerokratt AS (
2641
AND message.author_role = 'buerokratt'
2742
)
2843
AND status = 'ENDED'
29-
AND feedback_rating IS NOT NULL
44+
AND CASE
45+
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
46+
THEN feedback_rating_five IS NOT NULL
47+
ELSE feedback_rating IS NOT NULL
48+
END
3049
AND ended::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz
3150
),
3251
point_nps AS (
3352
SELECT date_trunc(:metric, ended)::text AS date_time,
3453
COALESCE(
3554
CAST((
3655
(
37-
SUM(CASE WHEN feedback_rating BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
38-
SUM(CASE WHEN feedback_rating BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
39-
) / NULLIF(COUNT(feedback_rating), 0) * 100
56+
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
57+
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
58+
) / NULLIF(COUNT(feedback_rating_dynamic), 0) * 100
4059
) AS int), 0) AS nps
4160
FROM chat_buerokratt
4261
GROUP BY date_time
@@ -46,9 +65,9 @@ period_nps AS (
4665
SELECT COALESCE(
4766
CAST((
4867
(
49-
SUM(CASE WHEN feedback_rating BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
50-
SUM(CASE WHEN feedback_rating BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
51-
) / NULLIF(COUNT(feedback_rating), 0) * 100
68+
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
69+
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
70+
) / NULLIF(COUNT(feedback_rating_dynamic), 0) * 100
5271
) AS int), 0) AS nps
5372
FROM chat_buerokratt
5473
)

‎DSL/Resql/analytics/POST/feedback-chats-distribution.sql‎

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,28 @@
1-
WITH chats_filtered AS (
1+
WITH rating_config AS (
2+
SELECT value AS is_five_rating_scale
3+
FROM configuration
4+
WHERE key = 'isFiveRatingScale'
5+
AND id IN (SELECT max(id) FROM configuration WHERE key = 'isFiveRatingScale' GROUP BY key)
6+
AND NOT deleted
7+
),
8+
chats_filtered AS (
29
SELECT DISTINCT
310
base_id,
411
first_value(created) OVER (
512
PARTITION BY base_id
613
ORDER BY updated
714
) AS created,
8-
last_value(feedback_rating) OVER (
9-
PARTITION BY base_id
10-
ORDER BY updated
11-
) AS feedback_rating
15+
CASE
16+
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
17+
THEN last_value(feedback_rating_five) OVER (
18+
PARTITION BY base_id
19+
ORDER BY updated
20+
)
21+
ELSE last_value(feedback_rating) OVER (
22+
PARTITION BY base_id
23+
ORDER BY updated
24+
)
25+
END AS feedback_rating_dynamic
1226
FROM chat
1327
WHERE (
1428
array_length(ARRAY[:urls]::TEXT[], 1) IS NULL
@@ -19,7 +33,11 @@ WITH chats_filtered AS (
1933
OR chat.test = FALSE
2034
)
2135
AND STATUS = 'ENDED'
22-
AND feedback_rating IS NOT NULL
36+
AND CASE
37+
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
38+
THEN feedback_rating_five IS NOT NULL
39+
ELSE feedback_rating IS NOT NULL
40+
END
2341
AND created::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz
2442
AND (
2543
(:chat_type = 'buerokratt' AND EXISTS (
@@ -46,7 +64,7 @@ WITH chats_filtered AS (
4664
)
4765
)
4866
SELECT
49-
COUNT(CASE WHEN feedback_rating BETWEEN 9 AND 10 THEN 1 END) AS promoters,
50-
COUNT(CASE WHEN feedback_rating BETWEEN 7 AND 8 THEN 1 END) AS passives,
51-
COUNT(CASE WHEN feedback_rating BETWEEN 0 AND 6 THEN 1 END) AS detractors
67+
COUNT(CASE WHEN feedback_rating_dynamic BETWEEN 9 AND 10 THEN 1 END) AS promoters,
68+
COUNT(CASE WHEN feedback_rating_dynamic BETWEEN 7 AND 8 THEN 1 END) AS passives,
69+
COUNT(CASE WHEN feedback_rating_dynamic BETWEEN 0 AND 6 THEN 1 END) AS detractors
5270
FROM chats_filtered;

0 commit comments

Comments
 (0)