Skip to content
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
WITH rating_config AS (
SELECT value AS is_five_rating_scale
FROM configuration
WHERE key = 'isFiveRatingScale'
AND id IN (SELECT max(id) FROM configuration WHERE key = 'isFiveRatingScale' GROUP BY key)
AND NOT deleted
)
SELECT date_trunc(:metric, ended) AS date_time,
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
CASE
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
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)
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)
END AS avg
FROM chat
WHERE (
array_length(ARRAY[:urls]::TEXT[], 1) IS NULL
Expand All @@ -9,7 +20,7 @@ WHERE (
:showTest = TRUE
OR chat.test = FALSE
)
AND EXISTS
AND EXISTS
(SELECT 1
FROM message
WHERE message.chat_base_id = chat.base_id
Expand Down
45 changes: 32 additions & 13 deletions DSL/Resql/analytics/POST/feedback-buerokratt-chats-nps.sql
Original file line number Diff line number Diff line change
@@ -1,15 +1,30 @@
WITH chat_buerokratt AS (
WITH rating_config AS (
SELECT value AS is_five_rating_scale
FROM configuration
WHERE key = 'isFiveRatingScale'
AND id IN (SELECT max(id) FROM configuration WHERE key = 'isFiveRatingScale' GROUP BY key)
AND NOT deleted
),
chat_buerokratt AS (
SELECT DISTINCT base_id,
first_value(ended) OVER (
PARTITION BY base_id
ORDER BY updated
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS ended,
last_value(feedback_rating) OVER (
PARTITION BY base_id
ORDER BY updated
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
) AS feedback_rating
CASE
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
THEN last_value(feedback_rating_five) OVER (
PARTITION BY base_id
ORDER BY updated
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
ELSE last_value(feedback_rating) OVER (
PARTITION BY base_id
ORDER BY updated
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING
)
END AS feedback_rating_dynamic
FROM chat
WHERE (
array_length(ARRAY[:urls]::TEXT[], 1) IS NULL
Expand All @@ -26,17 +41,21 @@ WITH chat_buerokratt AS (
AND message.author_role = 'buerokratt'
)
AND status = 'ENDED'
AND feedback_rating IS NOT NULL
AND CASE
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
THEN feedback_rating_five IS NOT NULL
ELSE feedback_rating IS NOT NULL
END
AND ended::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz
),
point_nps AS (
SELECT date_trunc(:metric, ended)::text AS date_time,
COALESCE(
CAST((
(
SUM(CASE WHEN feedback_rating BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
SUM(CASE WHEN feedback_rating BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
) / NULLIF(COUNT(feedback_rating), 0) * 100
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
) / NULLIF(COUNT(feedback_rating_dynamic), 0) * 100
) AS int), 0) AS nps
FROM chat_buerokratt
GROUP BY date_time
Expand All @@ -46,9 +65,9 @@ period_nps AS (
SELECT COALESCE(
CAST((
(
SUM(CASE WHEN feedback_rating BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
SUM(CASE WHEN feedback_rating BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
) / NULLIF(COUNT(feedback_rating), 0) * 100
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 9 AND 10 THEN 1 ELSE 0 END) * 1.0 -
SUM(CASE WHEN feedback_rating_dynamic BETWEEN 0 AND 6 THEN 1 ELSE 0 END)
) / NULLIF(COUNT(feedback_rating_dynamic), 0) * 100
) AS int), 0) AS nps
FROM chat_buerokratt
)
Expand Down
36 changes: 27 additions & 9 deletions DSL/Resql/analytics/POST/feedback-chats-distribution.sql
Original file line number Diff line number Diff line change
@@ -1,14 +1,28 @@
WITH chats_filtered AS (
WITH rating_config AS (
SELECT value AS is_five_rating_scale
FROM configuration
WHERE key = 'isFiveRatingScale'
AND id IN (SELECT max(id) FROM configuration WHERE key = 'isFiveRatingScale' GROUP BY key)
AND NOT deleted
),
chats_filtered AS (
SELECT DISTINCT
base_id,
first_value(created) OVER (
PARTITION BY base_id
ORDER BY updated
) AS created,
last_value(feedback_rating) OVER (
PARTITION BY base_id
ORDER BY updated
) AS feedback_rating
CASE
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
THEN last_value(feedback_rating_five) OVER (
PARTITION BY base_id
ORDER BY updated
)
ELSE last_value(feedback_rating) OVER (
PARTITION BY base_id
ORDER BY updated
)
END AS feedback_rating_dynamic
FROM chat
WHERE (
array_length(ARRAY[:urls]::TEXT[], 1) IS NULL
Expand All @@ -19,7 +33,11 @@ WITH chats_filtered AS (
OR chat.test = FALSE
)
AND STATUS = 'ENDED'
AND feedback_rating IS NOT NULL
AND CASE
WHEN (SELECT COALESCE(is_five_rating_scale, 'false') = 'true' FROM rating_config)
THEN feedback_rating_five IS NOT NULL
ELSE feedback_rating IS NOT NULL
END
AND created::timestamptz BETWEEN :start::timestamptz AND :end::timestamptz
AND (
(:chat_type = 'buerokratt' AND EXISTS (
Expand All @@ -46,7 +64,7 @@ WITH chats_filtered AS (
)
)
SELECT
COUNT(CASE WHEN feedback_rating BETWEEN 9 AND 10 THEN 1 END) AS promoters,
COUNT(CASE WHEN feedback_rating BETWEEN 7 AND 8 THEN 1 END) AS passives,
COUNT(CASE WHEN feedback_rating BETWEEN 0 AND 6 THEN 1 END) AS detractors
COUNT(CASE WHEN feedback_rating_dynamic BETWEEN 9 AND 10 THEN 1 END) AS promoters,
COUNT(CASE WHEN feedback_rating_dynamic BETWEEN 7 AND 8 THEN 1 END) AS passives,
COUNT(CASE WHEN feedback_rating_dynamic BETWEEN 0 AND 6 THEN 1 END) AS detractors
FROM chats_filtered;
Loading
Loading