Dies ist eine SQL-Version des Dashboard-Berichts für Reaktionen.
Dieser Bericht liefert eine tägliche Zählung aller Likes und Reaktionen auf Beiträge auf einer Website über einen bestimmten Zeitraum.
Dieser Bericht hilft dabei, einen Schnappschuss des Benutzerengagements innerhalb einer Discourse-Community zu liefern, indem die Häufigkeit verschiedener Reaktions-Emojis und Likes auf Beiträge gemessen wird. Durch die Analyse der Nutzung verschiedener Reaktions-Emojis können Administratoren Einblicke gewinnen, wie oft Benutzer mit Inhalten interagieren, welche emotionalen Reaktionen Benutzer auf Beiträge haben und sowohl beliebte als auch untergenutzte Reaktions-Emojis identifizieren.
Für diesen Bericht muss das Plugin Discourse Reactions auf Ihrer Website aktiviert sein. Die im Bericht verfügbaren Reaktionen hängen davon ab, welche spezifischen Reaktionen mit der Site-Einstellung
discourse_reactions_enabled_reactionsaktiviert wurden.
-- [params]
-- date :start_date = 2023-12-16
-- date :end_date = 2024-01-17
SELECT
r.day,
COALESCE(l.likes_count, 0) as likes_count,
sum(case when reaction_value = 'laughing' then reactions_count else 0 end)::int as laughing,
sum(case when reaction_value = 'cry' then reactions_count else 0 end)::int as cry,
sum(case when reaction_value = 'exploding_head' then reactions_count else 0 end)::int as exploding_head,
sum(case when reaction_value = 'clap' then reactions_count else 0 end)::int as clap,
sum(case when reaction_value = 'confetti_ball' then reactions_count else 0 end)::int as confetti_ball,
sum(case when reaction_value = 'hugs' then reactions_count else 0 end)::int as hugs,
sum(case when reaction_value = 'chefs_kiss' then reactions_count else 0 end)::int as chefs_kiss,
sum(case when reaction_value = '100' then reactions_count else 0 end)::int as one_hundred,
sum(case when reaction_value = '+1' then reactions_count else 0 end)::int as plus_one,
sum(case when reaction_value = 'rocket' then reactions_count else 0 end)::int as rocket,
sum(case when reaction_value = 'star_struck' then reactions_count else 0 end)::int as star_struck,
sum(case when reaction_value = 'eyes' then reactions_count else 0 end)::int as eyes,
sum(case when reaction_value = 'discourse' then reactions_count else 0 end)::int as discourse
FROM (
SELECT
date_trunc('day', drru.created_at)::date as day,
drr.reaction_value,
count(drru.id) as reactions_count
FROM discourse_reactions_reactions as drr
LEFT OUTER JOIN discourse_reactions_reaction_users as drru on drr.id = drru.reaction_id
WHERE drr.reaction_users_count IS NOT NULL
AND drru.created_at::date >= :start_date::date AND drru.created_at::date <= :end_date::date
GROUP BY drr.reaction_value, day
) r
LEFT JOIN (
SELECT
count(pa.id) as likes_count,
date_trunc('day', pa.created_at)::date as day
FROM post_actions as pa
WHERE pa.post_action_type_id = 2
AND pa.created_at::date >= :start_date::date AND pa.created_at::date <= :end_date::date
GROUP BY day
) l ON r.day = l.day
GROUP BY r.day, l.likes_count
ORDER BY r.day
SQL-Abfrageerklärung
Parameter
- Die Abfrage akzeptiert zwei Parameter,
:start_dateund:end_date, die den Datumsbereich für den Bericht definieren. Beide Datumsparameter akzeptieren das DatumsformatJJJJ-MM-TT.
Abfragestruktur
- Innere Abfrage (Reaktionen): Die Abfrage beginnt mit einer Unterabfrage, die das Datum (
day), die Art der Reaktion (reaction_value) und die Anzahl der Reaktionen (reactions_count) aus der Tabellediscourse_reactions_reactionsauswählt, die mitdiscourse_reactions_reaction_usersüberreaction_idverknüpft ist. Diese Verknüpfung stellt sicher, dass wir benutzerspezifische Reaktionen berücksichtigen. - Aggregation nach Reaktionstypen: Die ausgewählten Daten werden dann nach
dayundreaction_valuegruppiert, wobei der Bereich auf die ausgewählten Start- und Enddaten beschränkt wird. Dies wird verwendet, um die Gesamtzahl jedes Reaktionstyps für jeden Tag im angegebenen Zeitraum zu berechnen. - Sortierung der Reaktionssummen: Für jeden Reaktionstyp verwendet die Abfrage eine
CASE-Anweisung, um die Häufigkeit der Verwendung der spezifischen Reaktion zu aggregieren und das Ergebnis als Ganzzahl für eine saubere Zählung zu konvertieren.- Sie müssen möglicherweise
reaction_value = '...'in diesem Abschnitt anpassen, je nachdem, welche Reaktionen auf Ihrer Website aktiviert sind.
- Sie müssen möglicherweise
- Unterabfrage für die Anzahl der Likes: Eine separate Unterabfrage wird verwendet, um die Gesamtzahl der Likes (
likes_count) für jeden Tag mithilfe der Tabellepost_actionszu berechnen, bei derpost_action_type_idden Likes entspricht. - Kombination von Daten: Die äußere Abfrage kombiniert dann die Zählung der Likes mit den Reaktionszählungen, indem sie nach dem Feld
dayverknüpft wird. - Endgültige Auswahl: Die äußerste
SELECT-Anweisung generiert die endgültige Ausgabe mit demday, der Anzahl der Likes (likes_count) und den Zählungen jedes Reaktionstyps. Wenn an einem bestimmten Tag keine Daten für Likes vorhanden sind, stellt dieCOALESCE-Funktion sicher, dass anstelle vonNULLeine Null angezeigt wird. - Sortierung der Ergebnisse: Die Ergebnisse werden nach Datum (
r.day) sortiert, um eine Zeitreihe des Engagements auf der Website zu erstellen.
Spalten
day: Das Datum, an dem die Reaktionen und Likes gezählt wurden.likes_count: Gesamtzahl der Likes für jeden Tag.- Jeder Reaktionstyp (lachend, weinend, explodierender Kopf usw.): Einzelne Spalten, die die Gesamtzahl jedes Reaktionstyps pro Tag anzeigen.
Beispielergebnisse
| day | likes_count | laughing | cry | exploding_head | clap | confetti_ball | hugs | chefs_kiss | one_hundred | plus_one | rocket | star_struck | eyes | discourse |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2023-12-16 | 13 | 0 | 3 | 0 | 3 | 1 | 0 | 0 | 0 | 5 | 2 | 2 | 1 | 0 |
| 2023-12-17 | 17 | 1 | 0 | 2 | 2 | 0 | 0 | 0 | 0 | 4 | 4 | 1 | 2 | 0 |
| 2023-12-18 | 46 | 0 | 1 | 0 | 6 | 0 | 1 | 3 | 0 | 27 | 3 | 4 | 5 | 0 |