Admin-Dashboard-Berichtsreferenzhandbuch

:bookmark: Dies ist eine Referenzanleitung zur Beschreibung der Funktionsweise der Admin-Dashboard-Berichte, der angezeigten Daten, der entsprechenden Data Explorer-SQL-Abfragen und des Ortes, an dem der Ruby-Code für jeden Bericht zu finden ist.

:person_raising_hand: Erforderliche Benutzerstufe: Mitarbeiter

Discourse enthält mehrere integrierte Admin-Dashboard-Berichte, die nützlich sein können, um Statistiken über eine Community zu erkunden. Um auf diese Berichte zuzugreifen, können Sie discourse.example.com/admin/dashboard/reports auf Ihrer Seite aufrufen (oder oben im Dashboard auf den Link Berichte klicken). Beachten Sie, dass nur Benutzer mit Mitarbeiterstatus Zugriff auf diese Berichte haben.

Daten aller Benutzer auf einer Seite sind in diesen Berichten enthalten (einschließlich Mitarbeiteraktivitäten wie dem Besuch von Admin-Seiten). Die einzige Bedingung, die für Benutzer in den Berichten gilt, ist, dass es sich um „echte

18 „Gefällt mir“

Ich sehe keinen Link dazu unter /admin. Überlese ich etwas? Es scheint, dass dies leichter auffindbar sein sollte. Ich glaube, ich wusste, dass diese Berichte hier waren, habe aber gesucht und sie nicht gefunden.

Obwohl es nur wenige Minuten gedauert hat, sie zu finden, wäre es vielleicht schön, etwas wie Folgendes hinzuzufügen:

3 „Gefällt mir“

Ja, es wäre vielleicht nett, in einer PM an das Personal sie zu erwähnen, wenn eine Website zum ersten Mal erstellt wird. :thinking:

1 „Gefällt mir“

:crying_cat_face:

Entschuldigung. Ich dachte wirklich, ich hätte es schon einmal irgendwo gesehen.

Man kann die Leute einfach nicht dazu bringen, Dinge zu lesen. . . . Außer ich könnte den Quellcode lesen, um herauszufinden, wie man es in einem Plugin macht?

Aber vielleicht die obige Aktualisierung zu

Ich glaube, das hat mich wirklich verwirrt. (Aber nein, ich habe keine Entschuldigung.)

Ich habe das Thema zu einer Wiki gemacht, leg los! :+1:

2 „Gefällt mir“

Das stimmt nicht mit der Benutzeroberfläche überein (die Benutzeroberfläche verwendet 20 %), welche sollte es sein?

2 „Gefällt mir“

Guter Fang. Es wurde kürzlich auf 20 % aktualisiert. Ich werde die Änderung im OP vornehmen. :slight_smile: :+1:

2 „Gefällt mir“

Hallo @SaraDev Kann diese Berichts-Ausgabe mit einer SQL-Abfrage erzielt werden? Können Sie sie teilen?
Danke

1 „Gefällt mir“

Ja, Sie können den folgenden SQL-Bericht für Top-Traffic-Quellen verwenden:

-- [params]
-- date :start_date = 01/05/2023
-- date :end_date = 03/06/2023

WITH count_links AS (

SELECT COUNT(*) AS clicks,
       ind.name AS domain
FROM incoming_links il
  INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
  INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
  INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
  INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at::date BETWEEN :start_date AND :end_date
GROUP BY ind.name
ORDER BY clicks DESC
),

count_topics AS (

SELECT COUNT(DISTINCT p.topic_id) AS topics,
       ind.name AS domain
FROM incoming_links il
INNER JOIN posts p ON p.deleted_at ISNULL AND p.id = il.post_id
INNER JOIN topics t ON t.deleted_at ISNULL AND t.id = p.topic_id
INNER JOIN incoming_referers ir ON ir.id = il.incoming_referer_id
INNER JOIN incoming_domains ind ON ind.id = ir.incoming_domain_id
WHERE t.archetype = 'regular'
  AND il.created_at > (CURRENT_TIMESTAMP - INTERVAL '30 DAYS')
GROUP BY ind.name
)

SELECT cl.domain,
       cl.clicks AS "Klicks",
       ct.topics AS "Themen"
FROM count_links cl
JOIN count_topics ct ON cl.domain = ct.domain
LIMIT 10

Beachten Sie bei dieser Abfrage, dass die Datumsparameter Daten im Format Tag/Monat/Jahr akzeptieren.

1 „Gefällt mir“

Hallo @SaraDev, vielen Dank für das Teilen der Abfrage.
Eine allgemeinere Frage zu diesem Bericht und der Tabelle incoming_links – sie stellt nur den Traffic für Beitragsseiten dar und nicht den Traffic für alle Forenseiten, richtig?

Kontext: Ich möchte Trends im gesamten Forum-Traffic analysieren und hoffte, den gesamten Traffic nach Quellen aus dem Bericht „Top Traffic Sources“ zu erhalten.
Aber während der Gesamtverkehr im letzten Monat bei ~ 272.000 lag (Benutzer und Anonyme), beträgt die Gesamtzahl der Klicks im Bericht „Traffic Sources“ für denselben Zeitraum nur 59.000.
Außerdem sehe ich, dass Sie einen inneren Join mit den Tabellen topics und posts verwenden, was bedeutet, dass Sie ihn nicht zählen, wenn kein post_id mit dem Klick verknüpft ist.

Können Sie meine Schlussfolgerung bitte bestätigen und vielleicht ein wenig über die Logik hinter der Tabelle incoming_links erklären?

Hallo @SaraDev, ich habe diese Abfrage ausgeführt und das Ergebnis stimmt nicht genau mit dem Bericht „Beiträge“ im Tab „Allgemein“ überein.
Z.B. für den 30. November:
Abfrage = 112 Beiträge
Bericht = 120 Beiträge
Können Sie bitte die Lücke überprüfen?
Danke

1 „Gefällt mir“

Nur zur Information, @Yotam_Hagay – auch wenn Sara die Erstellerin ist, ist der Leitfaden die Verantwortung von jedem :slight_smile: :discourse: Es ist nicht nötig, jede Nachricht mit @ zu erwähnen. :slight_smile:

2 „Gefällt mir“

Danke @JammyDodger für die Klarstellung.
Gibt es noch jemanden, den ich markieren oder an den ich mich wenden kann, um eine Antwort zu erhalten?

1 „Gefällt mir“

Die Ergebnisse dieser Abfrage unterscheiden sich geringfügig vom Bericht „Zeit bis zur ersten Antwort“:
Am 8. November zum Beispiel:
Abfrage: 93 Stunden
Bericht: 116 Stunden
Kann mir jemand weiterhelfen?

1 „Gefällt mir“

Ich glaube, einige davon könnten einige Zeit für die Recherche in Anspruch nehmen. Ich schaue es mir selbst an, um zu sehen, ob ich herausfinden kann, was los ist (obwohl die Lücke zwischen meinen SQL- und meinen Ruby-Kenntnissen ziemlich groß ist :slight_smile:).

Aber bringen Sie die Ergebnisse weiter, da es großartig wäre, all diese Informationen zu festigen. :+1:

2 „Gefällt mir“

Für den Beitrag denke ich, dass der Lagerbericht auch Themenbeiträge sowie Beiträge von Systembenutzern zählt, aber auch nur diejenigen mit post_type 1 (d.h. keine Whispers, kleinen Aktionsbeiträge oder Moderationsaktionen) anvisiert.

Ich denke, die SQL würde eher so aussehen:

--[params]
-- date :start_date
-- date :end_date

SELECT 
    p.created_at::date AS "Tag",
    COUNT(p.id) AS "Anzahl"
FROM posts p
INNER JOIN topics t ON t.id = p.topic_id AND t.deleted_at ISNULL
WHERE p.created_at::date BETWEEN :start_date AND :end_date
    AND p.deleted_at ISNULL
    AND t.archetype = 'regular'
    AND p.post_type = 1
GROUP BY p.created_at::date
ORDER BY 1

Könnten Sie das auf Ihrer Website ausführen und sehen, ob es übereinstimmt?

2 „Gefällt mir“

Danke Jammy, ich werde das prüfen!
Ich arbeite gerade an einer Analyse der Antwortzeit, daher wäre es toll, wenn du dir auch diese hier ansehen könntest.

1 „Gefällt mir“

Ich glaube, in der SQL-Version fehlt AND p.user_id <> t.user_id, um Antworten vom OP auszuschließen. Wenn ich das hinzufüge, erhalte ich die genaue Zeit zwischen dem OP und der ersten Antwort von jemand anderem:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT 
        p.topic_id, 
        MIN(post_number) post_number, 
        t.created_at
    FROM posts p
    INNER JOIN topics t ON (p.topic_id = t.id)
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_number != 1
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
    ORDER BY 2 DESC
)

SELECT 
    p.topic_id, 
    fr.created_at::date dt_topic_created,
    (p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr 
    ON fr.topic_id = p.topic_id 
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
ORDER BY response_time

Ich glaube auch, dass der Lagerbericht in Dezimalzahlen und nicht in Stunden und Minuten wie SQL ist. Ich werde noch einmal versuchen, ihn anzupassen. :+1:


Nur ein kleines Update, um AVG einzuschließen, damit es dem Ergebnis des Lagerberichts ähnlicher ist:

--[params]
-- date :date_start
-- date :date_end

WITH first_reply AS (
    SELECT 
        p.topic_id, 
        MIN(post_number) post_number, 
        t.created_at
    FROM posts p
    INNER JOIN topics t ON p.topic_id = t.id
    WHERE p.deleted_at IS NULL
        AND p.user_id <> t.user_id
        AND p.post_type = 1
        AND p.user_id > 0
        AND t.user_id > 0
        AND t.deleted_at IS NULL
        AND t.archetype = 'regular'
        AND t.created_at::date BETWEEN :date_start AND :date_end
    GROUP BY p.topic_id, t.created_at
)

SELECT 
    fr.created_at::date dt_topic_created,
    AVG(p.created_at - fr.created_at) response_time
FROM posts p
INNER JOIN first_reply fr 
    ON fr.topic_id = p.topic_id 
    AND fr.post_number = p.post_number
    AND p.created_at > fr.created_at
GROUP BY fr.created_at::date
ORDER BY response_time

Dies scheint mit dem Lagerbericht übereinzustimmen, solange man berücksichtigt, dass das eine Dezimalzahlen und das andere HH:MM ist. Ich bin sicher, es gibt eine Möglichkeit, die SQL response_time in Dezimalzahlen umzuwandeln, aber HH:MM scheint eine intuitivere Methode zu sein. (Ich glaube, es gibt auch einige zusätzliche Kriterien, die möglicherweise nicht notwendig sind, aber auch als Schutz gegen ungewöhnliche Umstände dienen könnten, daher habe ich diese Teile letztendlich so belassen, bis ich sicher sagen kann, ob oder ob nicht :slight_smile:)

Könnten Sie diese hier ausführen und sehen, wie sie übereinstimmt?

4 „Gefällt mir“

Ja, das stimmt jetzt mit den Zahlen im Lagerbericht überein, danke!
Nur eine Anmerkung -
Ich habe festgestellt, dass die unten stehende AVG-Funktion fehlende Ergebnisse zurückgibt, falls die Zeit > 24 Stunden beträgt (ein Abschnitt für die Anzahl der Tage fehlt vermutlich).

AVG(p.created_at - fr.created_at)::time response_time

1 „Gefällt mir“

Ja, die Umwandlung in time war eine schlechte Wahl. :slight_smile: Wenn Sie ::time entfernen, wird es zur genaueren (wenn auch schwerer zu lesenden) Version zurückkehren.

Ich werde auch die obige bearbeiten. :+1:

2 „Gefällt mir“