inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

176만명의 커뮤니티!! 함께 토론해봐요.

시각화 도구 사용

해결됨

초보자를 위한 BigQuery(SQL) 입문

안녕하세요 카일님! 초기창업팀에서 데이터분석 업무를 하고 있는 경험이 부족한 초보입니다. 대시보드를 저희 제휴사나 다른 사람들과 공유할 일이 많아서 시각화 도구 선택을 공유가 쉽고 조작이 쉬운 루커 스튜디오로 사용하려고 하는데, Tableau나 Power BI 가 더 좋은 선택일까요?? Tableau 는 가격이 비싼편이고, viewer 마다 결제를 해야되어서 제휴사가 늘어나면 계속해서 seat 를 구매해야 되는 어려움이 있는거 같아요. PowerBI 는 빅쿼리와 연동했을때, 데이터 양이 많은 경우 잘 안될수도 있다고 들었는데 확실히는 모르겠습니다. 빅쿼리에는 20만건 정도의 공고데이터, 그리고 posthog라는 mixpanel 같은 트래킹 툴에서 생기는 이벤트와 persons 모델을 저장해두고 있습니다. 3개월 정도 모인 데이터인데 약 300기가 정도 되는거 같습니다.(앞으로 계속 적재될 예정) GCP 크레딧이 있어서 구글내에서는 비용 걱정없이 여러가지 도입하는데 무리는 없는 상황입니다. 시각화 도구 사용에 있어서 공유하기 쉽고, 자유도는 높으면서 가격은 그렇게 비싸진 않은 도구 혹시 있을까요?? - 추가적으로 질문이 하나 더 있는데, posthog 나 mixpanel 데이터를 Bigquery 에 가져와서 데이터 분석을 하는거는 실무적으로 좋은 방법일까요? mixpanel 내에서 만들 수 없는 대시보드가 있어서 그걸 위해 가져오는 이유도 있고, 추천 시스템이나 혹은 ML을 할 일이 생기는 경우도 있어서 bigquery에도 적재되게끔 했는데 너무 overkill 은 아닐지 고민이 되네요ㅠ

  • sql
  • bigquery
  • 데이터-리터러시
조경찬 댓글 2 좋아요 0 조회수 174

Weekly Retention 구하기 완성하였습니다.

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

WITH base AS( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), first_week_and_diff AS( SELECT *, DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week FROM ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) ), user_count AS( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ORDER BY diff_of_week ), division_before AS( SELECT *, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week) AS first FROM user_count ) SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first),2) AS retention_rate FROM division_before

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
강효주 댓글 2 좋아요 0 조회수 130

11번 문제 GROUP BY 사용하는 이유

해결됨

초보자를 위한 BigQuery(SQL) 입문

안녕하세요! 11번 문제에서 GROUP BY를 필수로 사용해야 하는 이유가 궁금합니다. 11번 : pokemon 테이블 중 type2가 있으면서 가장 많은 수의 type1이 무엇인지에 대한 문제입니다. 저 같은 경우 GROUP BY를 빼고 SELECT type1 FROM pokemon.basic WHERE type2 IS NOT NULL ORDER BY type1 DESC LIMIT 1; 이렇게 쿼리를 짰는데, 답은 똑같이 나와서, GROUP BY를 사용하신 이유, 이 문제에서 GROUP BY를 사용해야 하는 이유가 궁금합니다.

  • sql
  • bigquery
  • 데이터-리터러시
민서 강 댓글 1 좋아요 0 조회수 142

[과제] 퍼널 쿼리(피벗테이블 적용) 작성 완료

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

강의 다 듣고, 마지막에 주신 계산하기 좋은 형태로 만드는 피벗테이블을 만들어 보았습니다. 코드에 대한 피드백이 있으시다면 알려주세요! 감사합니다. WITH base AS( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, MAX(IF(event_param.key = 'firebase_screen', event_param.value.string_value, NULL)) AS firebase_screen, -- MAX(IF(event_param.key = 'food_id', event_param.value.int_value, NULL)) AS food_id, MAX(IF(event_param.key = 'session_id', event_param.value.string_value, NULL)) AS session_id FROM advanced.app_logs CROSS JOIN UNNEST(event_params) AS event_param WHERE event_date between "2022-08-01" and "2022-08-18" GROUP BY ALL ), filter_event_and_concat_event_and_screen AS ( SELECT * EXCEPT(event_name, firebase_screen, event_timestamp), CONCAT(event_name, "-", firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM base WHERE event_name IN ("screen_view", "click_payment") ), pivot1 AS( SELECT event_date, event_name_with_screen, CASE WHEN event_name_with_screen = 'screen_view-welcome' THEN 1 WHEN event_name_with_screen = 'screen_view-home' THEN 2 WHEN event_name_with_screen = 'screen_view-food_category' THEN 3 WHEN event_name_with_screen = 'screen_view-restaurant' THEN 4 WHEN event_name_with_screen = 'screen_view-cart' THEN 5 WHEN event_name_with_screen = 'click_payment-cart' THEN 6 ELSE NULL END AS step_number, COUNT(DISTINCT user_pseudo_id) AS cnt FROM filter_event_and_concat_event_and_screen GROUP BY ALL HAVING step_number IS NOT NULL ORDER BY event_date, step_number ASC ) # 피벗 한번 더 돌려서 계산 쉽게 할 수 있는 테이블 형태 만들기 SELECT event_date, MAX(IF(event_name_with_screen = 'screen_view-welcome', cnt, NULL)) AS `screen_view-welcome`, MAX(IF(event_name_with_screen = 'screen_view-home', cnt, NULL)) AS `screen_view-home`, MAX(IF(event_name_with_screen = 'screen_view-food_category', cnt, NULL)) AS `screen_view-food_category`, MAX(IF(event_name_with_screen = 'screen_view-restaurant', cnt, NULL)) AS `screen_view-restaurant`, MAX(IF(event_name_with_screen = 'screen_view-cart', cnt, NULL)) AS `screen_view-cart`, MAX(IF(event_name_with_screen = 'click_payment-cart', cnt, NULL)) AS `click_payment-cart` FROM pivot1 GROUP BY event_date ORDER BY 1;

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
강효주 댓글 2 좋아요 0 조회수 166

3-7 Weekly, Monthly Retention 쿼리 작성

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

# WEEKLY Retention 쿼리 WITH base AS( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ),first_week_and_diff AS ( SELECT *, DATE_DIFF(event_week, first_week, WEEK) AS diff_of_week FROM ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week FROM base ) ), user_counts AS ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ORDER BY diff_of_week ) SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_week_user_cnt),3) AS retention_rate FROM( SELECT diff_of_week, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_week) AS first_week_user_cnt FROM user_counts ) # Monthly Retention 쿼리 WITH base AS( SELECT DISTINCT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ),first_month_and_diff AS ( SELECT *, DATE_DIFF(event_month, first_month, MONTH) AS diff_of_month FROM ( SELECT DISTINCT user_pseudo_id, DATE_TRUNC(MIN(event_date) OVER(PARTITION BY user_pseudo_id), MONTH) AS first_month, DATE_TRUNC(event_date, MONTH) AS event_month FROM base ) ), user_counts AS ( SELECT diff_of_month, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_month_and_diff GROUP BY diff_of_month ORDER BY diff_of_month ) SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_month_user_cnt),3) AS retention_rate FROM( SELECT diff_of_month, user_cnt, FIRST_VALUE(user_cnt) OVER(ORDER BY diff_of_month) AS first_month_user_cnt FROM user_counts )

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
김재현 댓글 2 좋아요 0 조회수 120

정성 데이터 분석 방법 문의

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

카일스쿨님 안녕하세요, 사용자 VoC 나 SNS 등의 정성 데이터를 모아서 분석하는 방법이 있을까요? 데이터 분석 관련해서는 아직 기초적인 지식도 없다보니 정성 데이터는 어떤 방법으로 분석하는지, 어떤 방법이 가장 효과적일지 궁금합니다! (정성 데이터를 분석해서 문제 정의의 근거로 사용하려는 목적입니다. SQL 초급 강의는 아직 수강 전입니다 🥹)

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
askare 댓글 1 좋아요 0 조회수 217

최종 과제 제출

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

안녕하세요! 현재도 최종과제 피드백을 해주시는지 잘 모르겠으나,, 피드백 받아보고 싶어서, 최종 과제 제출해보겠습니다! 3번 문제에서는 특히 생각처럼 인사이트가 안나와서 어려웠습니다.. ㅎㅎ https://www.notion.so/Foodie-express-SQL-223249eb444480eca214ed420d3699a4?source=copy_link

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
김동현 댓글 3 좋아요 0 조회수 157

big query 쿼리 결과 컬럼 폭

해결됨

초보자를 위한 BigQuery(SQL) 입문

초반에는 그러지 않았던 것 같은데, 갑자기 쿼리 결과 창에 가장 우측 컬럼이 넓게 출력되어서 나옵니다. (사진에서 wineer_id, win_ratio, incheon_cnt) 그래서 결과를 볼 때 한눈에 들어오지 않고, 수동으로 폭 조절을 해줘야 해서 번거롭네요. 혹시 따로 폭을 조정하는 설정이 있을까요? 검색으로 해결 방법을 찾을 수 없어 질문드립니다. 특정 쿼리에서만 그런게 아니라는 걸 보여드리기 위해 여러장 첨부합니다!

  • sql
  • bigquery
  • 데이터-리터러시
이혜리 댓글 3 좋아요 0 조회수 162

1-6 예시 문제 풀이

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

질문을 남겨주실 때 아래 부분을 같이 남겨주시면 더 빠르게 상황을 파악하고 답변드릴 수 있어요 🙂 어떤 강의를 들으면서 발생했나요? 1-6 PIVOT 예시 문제 풀이 어떤 문제가 생겼나요? 강의에서 사용하신 쿼리 그대로 입력했는데 추출되는 결과가 다릅니다. 왜 인지 이유를 모르겠습니다ㅠ 어떤 시도를 해보셨나요? 잘못입력한 쿼리가 있는지 확인해봤는데 어떤 것이 문제인지 잘 모르겠습니다. 어떤 쿼리를 사용했나요? #앱 로그 데이터 PIVOT SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, MAX(IF(param.key = "firebase_screen", param.value.string_value, NULL)) AS firebase_screen, --MAX(IF(param.key = "food_id", param.value.string_value, NULL)) AS food_id, MAX(IF(param.key = "food_id", param.value.int_value, NULL)) AS food_id2, MAX(IF(param.key = "session_id", param.value.string_value, NULL)) AS session_id FROM advanced.app_logs CROSS JOIN UNNEST(event_params) AS param WHERE event_date = "2022-08-01" GROUP BY ALL LIMIT 100 환경이 어떻게 되나요?(윈도우, 맥 중 택1, 크롬 같은 웹브라우저 환경) 크롬 결과값 선생님께서 입력하신 쿼리와 무슨 차이가 있는건가요? 데이터가 표출되는 정렬이 달라서 이렇게 나오는 것인지 강의 영상 내 결과에서는 food_id2 컬럼의 값이 모두 채워져있는데 저는 NULL로 나옵니다. 왜인지 모르겠습니다 ㅠ

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
김재현 댓글 2 좋아요 0 조회수 106

battle 스키마 조건 복사 파일이 열리지 않아요.

해결됨

초보자를 위한 BigQuery(SQL) 입문

파일 형식이 맞지 않는건지 파일이 열리지 않아서, 속성 클릭 > 연결프로그램을 '메모장'으로 수정하니 깨져서 보이지가 않는데 어떻게 해결하면 될까요? 파일을 아예 지우고 다시 다운 받아도 똑같고, 이전에 무슨 파일 형식이였는지 모르겠어서 대처가 되지 않아요...

  • sql
  • bigquery
  • 데이터-리터러시
  • 수업질문
leigh990214 댓글 1 좋아요 0 조회수 174

6-5 데이터 검증 결과 예시문제

해결됨

초보자를 위한 BigQuery(SQL) 입문

안녕하세요! 강의 6-5 데이터 검증 결과 예시 문제를 보고 잠깐 멈춰서 풀고 선생님 강의 풀이를 참고했는데요, 검증 과정자체는 저도 특정한 id를 두고 맞는지 우선 확인한 다음 전체 쿼리를 짜는 식으로 했습니다. 제가 짠 쿼리가 이런식이었는데, 결과 자체는 동일하게 나온것 같습니다. 근데 선생님 풀이를 보니 처음엔 조금은 길어보인다고 생각했지만 확실히 실무에서는 선생님처럼 접근하는게 누가봐도 명시적으로 알기 쉽겠다 생각이 들더라구요. 저는 너무 문제 푸는데에만 집중했던 쿼리인것 같다라는 생각을 했구요...선생님처럼 접근하는게 실무적으론 더 맞는 방식이죠?

  • sql
  • bigquery
  • 데이터-리터러시
서승현 댓글 2 좋아요 0 조회수 124

battle 스키마 조건 복사붙여넣기용 자료

해결됨

초보자를 위한 BigQuery(SQL) 입문

battle 스키마 조건 복사붙여넣기용 자료 어디서 찾아요?

  • sql
  • bigquery
  • 데이터-리터러시
hi-aga.park 댓글 2 좋아요 0 조회수 153

17번 문제 질문드립니다.

해결됨

초보자를 위한 BigQuery(SQL) 입문

안녕하세요. 아래 코드를 작성하고 돌려보니 아래와 같이 결과가 나옵니다. SELECT trainer_id, pokemon_id, status, COUNTIF(status = 'Released'), COUNT(pokemon_id) FROM basic.trainer_pokemon WHERE trainer_id = 17 GROUP BY trainer_id, pokemon_id, status 즉 예상되는 COUNTIF() 함수의 결과는 3, COUNT() 함수의 결과는 12 입니다. 그러나 아래와 같은 코드를 돌려 집계한 결과, 다른 결과가 나옵니다. SELECT trainer_id, COUNTIF(status = 'Released'), COUNT(pokemon_id) FROM basic.trainer_pokemon WHERE trainer_id = 17 GROUP BY trainer_id ; 왜 이런 문제가 발생하는지 모르겠습니다 ㅠ

  • sql
  • bigquery
  • 데이터-리터러시
nanki 댓글 3 좋아요 0 조회수 231

섹션11 매출 대시보드 구성하기에서 강의 누락 질문

미해결

이커머스 데이터로 시작하는 스토리형 SQL – BigQuery & Looker Studio 실습

섹션11 매출 대시보드 구성하기에서 첫번째 강의와 두번째 강의 사이에 강의 영상이 누락된게 있는 것 같습니다. 두번째 강의의 시작부에 강사님이 저번시간에 테마까지 변경해봤다고 하셨는데 첫번째 강의엔 테마 변경 강의 내용이 없습니다. 이전에도 같은 내용의 질문을 누렸고, 검토해보겠다는 답변을 주셨는데 다시 들어가보니 아직도 동일하게 누락되어 있어 다시 질문드립니다. 빨리 완강하고 싶습니다ㅠ

  • sql
  • data-visualization
  • looker-studio
  • bigquery
  • 데이터-리터러시
JE 댓글 2 좋아요 0 조회수 188

최종과제 제출

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

질문을 남겨주실 때 아래 부분을 같이 남겨주시면 더 빠르게 상황을 파악하고 답변드릴 수 있어요 🙂 어떤 강의를 들으면서 발생했나요? 어떤 문제가 생겼나요? 어떤 시도를 해보셨나요? 어떤 쿼리를 사용했나요? 환경이 어떻게 되나요?(윈도우, 맥 중 택1, 크롬 같은 웹브라우저 환경) 배운 것을 토대로 분석해보았는데, 홈페이지에 올렸습니다 링크

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
j808esc 댓글 2 좋아요 0 조회수 179

3-13. 리텐션 과제

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

안녕하세요 3-13 리텐션 과제를 풀어보았습니다 익숙치 않아서 그런지 꽤나 어려웠네요 https://uncleq.tistory.com/entry/%EB%A6%AC%ED%85%90%EC%85%98-%EC%97%B0%EC%8A%B5

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
j808esc 댓글 3 좋아요 0 조회수 250

Mysql과 빅쿼리

해결됨

초보자를 위한 BigQuery(SQL) 입문

안녕하세요 강사님, 강의 잘 들었습니다! 혹시 기업에서 서비스 기획이나 마케팅 직군을 뽑을 때 SQL 코딩 테스트를 한다면, 보통 빅쿼리가 아닌, Mysql로 시험을 보는지 여쭤봅니다! 그리고 Mysql이랑은 문법이나 활용 방법이 많이 다른가요?

  • sql
  • bigquery
  • 데이터-리터러시
김태희 댓글 2 좋아요 0 조회수 241

JOIN 1번 문제

해결됨

초보자를 위한 BigQuery(SQL) 입문

JOIN 1번 문제를 풀이하던 도중 강사님의 쿼리문과 제가 작성한 것의 차이가 궁금해서 문의 드립니다.! 저는 해당 결과를 출력했을때, 166행이 출력되는데 강사님은 158행이 출력되어 어떤부분을 제가 누락시켰는지 궁금합니다. ㅠ select p.kor_name as pokemon_name, tp.pokemon_cnt from ( select pokemon_id, countif(status in ('Active','Training')) as pokemon_cnt from basic.trainer_pokemon group by pokemon_id ) as tp left join basic.pokemon as p on p.id = tp.pokemon_id order by pokemon_cnt desc

  • sql
  • bigquery
  • 데이터-리터러시
박종호 댓글 1 좋아요 0 조회수 132

1-9. [자습] PIVOT 테이블 생성하기

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

WITH base as ( SELECT event_date, event_timestamp, event_name, user_id, user_pseudo_id, platform, MAX(IF(params.key='firebase_screen', params.value.string_value, NULL)) as firebase_screen, -- MAX(IF(params.key='food_id', params.value.int_value, NULL)) as food_id, MAX(IF(params.key='session_id', params.value.string_value, NULL)) as session_id, FROM advanced.app_logs CROSS JOIN UNNEST(event_params) as params WHERE -- event_date = "2022-08-01" # 적은 데이터로 쿼리를 작성하기 위해 만든 조건 event_date BETWEEN "2022-08-01" AND "2022-08-18" GROUP BY ALL ), fileter_event_and_concat_event_and_screen AS( -- event_name + screen 하면서(필요한 이벤트만 WHERE 조건에 걸어서 사용) SELECT * EXCEPT(event_name, firebase_screen, event_timestamp), CONCAT(event_name, "-", firebase_screen) AS event_name_with_screen, DATETIME(TIMESTAMP_MICROS(event_timestamp), "Asia/Seoul") AS event_datetime FROM base WHERE event_name IN("screen_view", "click_payment") ) -- step_number + cnt 만들기 -- step_number : CASE WHEN을 사용해 숫자 지정 , pivot_base as ( SELECT event_date, # 일자별로 퍼널별 유저 수 쿼리, 일자별로 처리하기 위해 event_date 추가 event_name_with_screen, CASE WHEN event_name_with_screen = 'screen_view-welcome' THEN 1 WHEN event_name_with_screen = 'screen_view-home' THEN 2 WHEN event_name_with_screen = 'screen_view-food_category' THEN 3 WHEN event_name_with_screen = 'screen_view-restaurant' THEN 4 WHEN event_name_with_screen = 'screen_view-cart' THEN 5 WHEN event_name_with_screen = 'click_payment-cart' THEN 6 ELSE NULL END AS step_number, COUNT(DISTINCT user_pseudo_id) as cnt FROM fileter_event_and_concat_event_and_screen GROUP BY ALL HAVING step_number IS NOT NULL ORDER BY event_date -- WHERE -- user_pseudo_id = "2173465695.8694960923" -- user_pseudo_id = "2173465695.8694960923" :event_name_with_screen = screen_view-welcome의 user_id는 NULL -> home에서 로그인 -- food_detal, search 등 event_name_with_scree의 여러 요소들을 확인해보기 ) # [자습] 위 테이블을 screen_view 타입별로 피벗 테이블 만들기 쿼리 (위 테이블을 with 절로 만들고 아래 쿼리 실행) SELECT event_date, MAX(IF(event_name_with_screen="screen_view-welcome", cnt, NULL)) as `scren_view-welcome`, MAX(IF(event_name_with_screen="screen_view-home", cnt, NULL)) as `scren_view-home`, MAX(IF(event_name_with_screen="screen_view-food_category", cnt, NULL)) as `scren_view-category`, MAX(IF(event_name_with_screen="screen_view-restaurant", cnt, NULL)) as `scren_view-restaurant` FROM pivot_base GROUP BY event_date ORDER BY event_date 과제 올립니다 감사합니다

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
j808esc 댓글 2 좋아요 0 조회수 198

3-7. 리텐션 쿼리 작성 및 질문(Weekly, Montly)

해결됨

BigQuery(SQL) 활용편(퍼널 분석, 리텐션 분석)

안녕하세요, 강의 수강하면서 Weekly, Monthly Retention 쿼리를 작성해보았습니다! 그리고 질문이 하나 있는데, 첨부해드린 코드는 현재 첨부해드린 사진처럼 오류가 발생합니다. 그런데 Weekly Retention 쿼리를 전부 주석처리하면 Monthly Retention 쿼리는 정상 작동합니다. 반대로 Monthly Retention 쿼리를 주석처리하면 Weekly Retention 쿼리는 정상 작동합니다. 이 현상의 원리에 대한 감이 잡히지 않아서 질문드립니다! 그 외에 쿼리 관련해서 고칠 점이 있다면 편하게 말씀해주시면 감사하겠습니다! WITH base AS ( SELECT user_id, user_pseudo_id, event_name, DATE(DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul')) AS event_date, DATETIME(TIMESTAMP_MICROS(event_timestamp), 'Asia/Seoul') AS event_datetime FROM advanced.app_logs WHERE event_date BETWEEN "2022-08-01" AND "2022-11-03" ), first_week_and_diff AS ( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) diff_of_day DATE_DIFF(event_week, first_week, WEEK) diff_of_week FROM ( SELECT DISTINCT -- 일자별로 중복 제거 user_pseudo_id, -- DATE_TRUNC DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), WEEK(MONDAY)) AS first_week, MIN(event_date) OVER (PARTITION BY user_pseudo_id) AS first_date, DATE_TRUNC(event_date, WEEK(MONDAY)) AS event_week, event_date FROM base ) ), first_month_and_diff AS ( SELECT *, -- DATE_DIFF(event_date, first_date, DAY) diff_of_day DATE_DIFF(event_month, first_month, MONTH) AS diff_of_month FROM ( SELECT DISTINCT user_pseudo_id, --DATE_TRUNC DATE_TRUNC(MIN(event_date) OVER (PARTITION BY user_pseudo_id), MONTH) AS first_month, DATE_TRUNC(event_date, MONTH) AS event_month, MIN(event_date) OVER (PARTITION BY user_pseudo_id) AS first_date, event_date FROM base ) ) -- Weekly Retention SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 3) AS week_retention_rate FROM ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_week) AS first_cnt FROM ( SELECT diff_of_week, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_week_and_diff GROUP BY diff_of_week ) ) ORDER BY diff_of_week; -- 추가. Monthly Retention SELECT *, ROUND(SAFE_DIVIDE(user_cnt, first_cnt), 3) AS month_retention_rate FROM ( SELECT *, FIRST_VALUE(user_cnt) OVER (ORDER BY diff_of_month) AS first_cnt FROM ( SELECT diff_of_month, COUNT(DISTINCT user_pseudo_id) AS user_cnt FROM first_month_and_diff GROUP BY diff_of_month ) ) ORDER BY diff_of_month;

  • sql
  • Google-Analytics
  • firebase
  • google-sheets
  • bigquery
lchb0506 댓글 2 좋아요 0 조회수 204

인기 태그

인프런 TOP Writers

주간 인기글