CSVユーザーリストレポートでの「訪問日数」の取得

こんにちは、

以下のリンクで表示されている「訪問日数」の列があります:

https://LINK/admin/users/2/USERNAME

この列を、以下の場所から生成される CSV 形式のユーザーリストファイルにも含められると嬉しいです:
管理パネル ⇒ ユーザータブ ⇒ 「エクスポート」ボタン

「いいね!」 3

ご期待に添えないお知らせで申し訳ありませんが……

ユーザーエクスポートファイルには、User テーブルのフィールドが含まれています。
days_visited」フィールドは User_Stats テーブルに由来するものです。

同じデータを複数回持つこと(例えば、両方のテーブルにそのフィールドが存在する場合)は「非正規化」と呼ばれます。私の記憶が正しければ、表示されているのは、User テーブルだけでなく、ユーザーに関連する他のテーブルも使用する JOIN クエリの結果です。

とはいえ、Data Explorer プラグインを使えば、そのフィールドを含むエクスポートファイルを生成するような JOIN クエリを実行することに問題はありません。

「いいね!」 3

正確ではありません。CSV ファイルには likes_given と likes_received という列が含まれており、これらは同じテーブル user_stats にも存在します。

--
-- Name: user_stats; Type: TABLE; Schema: public; Owner: discourse
--

CREATE TABLE public.user_stats (
    user_id integer NOT NULL,
    topics_entered integer DEFAULT 0 NOT NULL,
    time_read integer DEFAULT 0 NOT NULL,
    days_visited integer DEFAULT 0 NOT NULL,
    posts_read_count integer DEFAULT 0 NOT NULL,
    likes_given integer DEFAULT 0 NOT NULL,
    likes_received integer DEFAULT 0 NOT NULL,
    topic_reply_count integer DEFAULT 0 NOT NULL,
    new_since timestamp without time zone NOT NULL,
    read_faq timestamp without time zone,
    first_post_created_at timestamp without time zone,
    post_count integer DEFAULT 0 NOT NULL,
    topic_count integer DEFAULT 0 NOT NULL,
    bounce_score double precision DEFAULT 0 NOT NULL,
    reset_bounce_score_after timestamp without time zone
);

From schema.sql

「いいね!」 3

ありがとうございます、その通りですね。以前扱ったことがあるよりも、もっと多くのものがあるようです。

「いいね!」 3

関連ファイルの指摘ありがとうございます :smile:

topics_entered は他のカラムと同様に get_base_user_array 関数にも存在します。これはバグではないでしょうか?

「いいね!」 1

エクスポートに含まれていなかった(約 1〜2 年前時点)関心のあるフィールドがいくつかありました。それは意図的なものでバグではないと想定していましたが、それ以上確認しませんでした。エクスポートの可用性が管理者専用となり、実データで作業できなくなったことで難易度が上がり、関心も薄れ、さらに現実生活(RL)の忙しさが重なり、その道は断念しました。

確認せずに大胆に推測すれば、コア側で変更されていなければ、プラグインでテーブルから値を取得し、CSV エクスポートに追加することは容易でしょう。しかし、Data Explorer プラグインがカスタムエクスポートの有力な候補だと思います。

私の現在の関心は、主に管理者専用のコアファイルのハッキングから、専用ユーザースクリプトの作成に移っています。

十分な合意が得られれば、現在のエクスポート機能を変更できるかもしれません。

「いいね!」 3

それに必要なクエリを作成しました:

SELECT
    u.username_lower AS "username",
    stats.days_visited
FROM users u
LEFT JOIN user_stats stats ON stats.user_id = u.id
ORDER BY u.id

ただし、このようなデータはユーザー一覧レポートでいくつかの洞察を得るために実際に役立ちます。

ありがとうございます @Mittineague :rose:

「いいね!」 5