대시보드 보고서 - 브라우저 감지를 포함한 통합 페이지뷰

다음은 브라우저 감지 기능이 포함된 통합 페이지뷰 대시보드 리포트의 SQL 버전입니다.

이 Data Explorer 리포트는 지정된 날짜 범위 내에서 브라우저 감지 기능을 포함한 일일 사이트 페이지뷰를 보여줍니다. 페이지뷰는 다음 네 가지 유형으로 분류됩니다:

  • 로그인된 브라우저 (Logged In Browser)
  • 익명 브라우저 (Anonymous Browser)
  • 알려진 크롤러 (Known Crawler)
  • 기타 페이지뷰 (Other pageviews)
-- [params]
-- date :start_date
-- date :end_date

SELECT
  ar.date::date AS "date",
  SUM(CASE WHEN ar.req_type = 15 THEN count ELSE 0 END) AS "Logged In Browser",
  SUM(CASE WHEN ar.req_type = 13 THEN count ELSE 0 END) AS "Anonymous Browser",
  SUM(CASE WHEN ar.req_type = 6 THEN count ELSE 0 END) AS "Known Crawler",
  SUM(
    CASE WHEN ar.req_type = 8 THEN count
        WHEN ar.req_type = 7 THEN count
        WHEN ar.req_type = 13 THEN -count
        WHEN ar.req_type = 15 THEN -count
        ELSE 0
    END
  ) AS "Other pageviews"
FROM
  application_requests ar
WHERE
  ar.date::date >= :start_date
  AND ar.date <= :end_date
GROUP BY
  ar.date
ORDER BY
  ar.date ASC

SQL 쿼리 설명

  • 매개변수 (Parameters):
    • :start_date - 리포트의 시작 날짜.
    • :end_date - 리포트의 종료 날짜.
    • 두 날짜 매개변수 모두 YYYY-MM-DD 형식의 날짜를 받습니다.
  • SELECT 절:
    • ar.date::date AS "date": date 필드를 날짜 타입으로 변환하고 "date"라고 라벨링합니다.
    • SUM(CASE WHEN ar.req_type = 15 THEN count ELSE 0 END) AS "Logged In Browser": req_type이 15인 경우의 카운트를 합산하여 결과를 "Logged In Browser"라고 라벨링합니다.
    • SUM(CASE WHEN ar.req_type = 13 THEN count ELSE 0 END) AS "Anonymous Browser": req_type이 13인 경우의 카운트를 합산하여 결과를 "Anonymous Browser"라고 라벨링합니다.
    • SUM(CASE WHEN ar.req_type = 6 THEN count ELSE 0 END) AS "Known Crawler": req_type이 6인 경우의 카운트를 합산하여 결과를 "Known Crawler"라고 라벨링합니다.
    • SUM(CASE WHEN ar.req_type = 8 THEN count WHEN ar.req_type = 7 THEN count WHEN ar.req_type = 13 THEN -count WHEN ar.req_type = 15 THEN -count ELSE 0 END) AS "Other pageviews": 기타 유형의 요청에 대한 카운트를 합산하되, req_type 13과 15의 카운트는 차감하여 조정하며, 결과를 "Other pageviews"라고 라벨링합니다.
  • FROM 절:
    • FROM application_requests ar: 데이터 소스로 application_requests 테이블을 지정하고 ar로 별칭을 부여합니다.
  • WHERE 절:
    • ar.date::date >= :start_date AND ar.date <= :end_date: date가 지정된 :start_date와 :end_date 범위에 포함되는 레코드만 포함하도록 필터링합니다.
  • GROUP BY 절:
    • GROUP BY ar.date: date 필드를 기준으로 결과를 그룹화하여 각 날짜별 카운트를 집계합니다.
  • ORDER BY 절:
    • ORDER BY ar.date ASC: date 필드를 기준으로 오름차순으로 결과를 정렬합니다.

결과

이 쿼리의 결과는 브라우저 또는 크롤러 유형별로 분류된 일별 페이지뷰 내역을 제공합니다. 결과 집합의 각 행에는 다음 내용이 포함됩니다:

  • date: 특정 날짜.
  • Logged In Browser: 로그인된 사용자의 총 페이지뷰 수.
  • Anonymous Browser: 익명 사용자의 총 페이지뷰 수.
  • Known Crawler: 알려진 크롤러의 총 페이지뷰 수.
  • Other pageviews: 기타 유형의 총 페이지뷰 수.

결과 예시

date Logged In Browser Anonymous Browser Known Crawler Other pageviews
2024-05-02 1238 1085 2727 3983
2024-05-03 1039 1068 5718 3958
2024-05-04 572 628 3847 3761
2024-05-05 447 551 2093 3773

이상하네요. 두 브라우저 모두에서 0이 나옵니다. 봇만 집계되는 것 같습니다.

‘Consolidated Pageviews with Browser Detection’ 대시보드 보고서도 봇만 표시하나요?

그 실험적인 걸 말하는 건가요? 잘 작동하고 모든 게 깔끔하게 표시됩니다.

이 보고서는 2024년 4월 25일에 Discourse에 추가되었으며, 이 날짜 이전의 Logged In Browser 또는 Anonymous Browser 뷰에 대한 결과를 표시하지 않습니다.

2024년 4월 25일 이후에도 Logged In Browser 또는 Anonymous Browser 뷰의 결과가 누락된 경우, Discourse 인스턴스를 최신 버전으로 업데이트해야 합니다.

왜 SQL 스니펫이 봇만 표시하고 사용자들은 보이지 않는지 궁금했어요. 그리고 나서 june를 시도해 봤습니다. 그리고 네, 제 인스턴스는 주 3회 정도 업그레이드됩니다 :winking_face_with_tongue:

(이 가상 키보드 때문에… 실수로 잘못 누르기 너무 쉬워요 :smirking_face: :man_facepalming:)

하지만 데이터 익스플로러 없이 다시 빌드한 뒤, 바로 그것으로 다시 빌드하자 숫자가 나타났습니다.

그러니 이건 또 다른 '트와일라이트 존’의 사례로 남을 것 같네요. SQL에서 어떤 종류의 캐싱 문제가 발생할 수 있을까요? :flushed_face: