kapa.ai ์ฐํ๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ NoSQL์ ์ ์ฅํด๋์์ต๋๋ค. ์ด๊ฑธ ๋ฏน์คํจ๋๋ก migrationํ๊ณ ์ถ์๋ฐ ์ด๋ป๊ฒ ํ๋ฉด๋ ๊น์?
์ฐํ๋ฆฌํ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ NoSQL์ ์ ์ฅํด๋์ จ๊ณ , ์ด๋ฅผ Mixpanel๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ ์ถ์ผ์๊ตฐ์. ๊ณต์ ๋ฌธ์์์๋ NoSQL์์ ์ง์ ์ ์ผ๋ก Mixpanel๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์๋ด๋ ์์ง๋ง, ์ผ๋ฐ์ ์ธ ๋ฐ์ดํฐ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฐจ์ Mixpanel์ ๋ฐ์ดํฐ ์์ง ๋ฐฉ์์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ ๊ถ์ฅํฉ๋๋ค.1. NoSQL ๋ฐ์ดํฐ ์ถ์ถ ๋ฐ ๋ณํ - NoSQL์ ์ ์ฅ๋ ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ์ฌ Mixpanel์ด ์๊ตฌํ๋ ์ด๋ฒคํธ ํฌ๋งท(JSON)์ผ๋ก ๋ณํํด์ผ ํฉ๋๋ค. - Mixpanel ์ด๋ฒคํธ ํฌ๋งท ์์:
"event": "Signup",
"properties": {
"time": 1618716477000,
"distinct_id": "user-123",
"$insert_id": "unique-event-id",
"property1": "value1"
}
}
```LBKS - ์ฐํ๋ฆฌํ๋์ Mixpanel์ ์ด๋ฒคํธ ๊ตฌ์กฐ๊ฐ ๋ค๋ฅด๋ฏ๋ก, [Mixpanel ๋ฐ์ดํฐ ๋ชจ๋ธ](https://docs.mixpanel.com/docs/migration/amplitude#differences-in-the-data-models)์ ๋ง๊ฒ ํ๋๋ฅผ ๋งคํํด์ผ ํฉ๋๋ค.LBKS2. **Mixpanel Import API๋ฅผ ํตํ ์
๋ก๋**
- ๋ณํ๋ ๋ฐ์ดํฐ๋ฅผ Mixpanel์ [Import API](https://developer.mixpanel.com/reference/import-events)๋ฅผ ์ฌ์ฉํด ์
๋ก๋ํ ์ ์์ต๋๋ค.
- ์์ cURL ์์ฒญ:
```LBKS curl --request POST \
--url '[https://api.mixpanel.com/import?strict=1&project_id=<YOUR_PROJECT_ID](https://api.mixpanel.com/import?strict=1&project_id=<YOUR_PROJECT_ID) >' \
--header 'Content-Encoding: gzip' \
--header 'Content-Type: application/json' \
--header 'accept: application/json' \
--header 'authorization: Basic <BASE64_ENCODED_SERVICE_ACCOUNT> ' \
--data-binary @โyour_events.json.gz
```LBKS - ๋๋์ ๋ฐ์ดํฐ๋ฅผ ์
๋ก๋ํ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ๋ฅผ gzip์ผ๋ก ์์ถํ์ฌ ์ ์กํ๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค.LBKS3. **๋ฐ์ดํฐ ๊ฒ์ฆ**
- ์
๋ก๋ ํ Mixpanel์ [Insights Report](https://docs.mixpanel.com/docs/reports/insights) ๋ฑ์์ ๋ฐ์ดํฐ๊ฐ ์ ์์ ์ผ๋ก ๋ค์ด์๋์ง ํ์ธํ์ธ์.LBKS**์ฐธ๊ณ :**
- NoSQL์์ ์ง์ Mixpanel๋ก ์ฐ๋ํ๋ ๊ณต์ ์ปค๋ฅํฐ๋ ์์ผ๋ฏ๋ก, ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ ๋ณํํ๋ ์คํฌ๋ฆฝํธ(์: Python, Node.js ๋ฑ)๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค.
- ๋ฐ์ดํฐ ๋ณํ ์ ์ด๋ฒคํธ ํ์์คํฌํ, distinct_id, $insert_id ๋ฑ Mixpanel์์ ์๊ตฌํ๋ ํ๋๋ฅผ ๋ฐ๋์ ํฌํจํด์ผ ํฉ๋๋ค.
- ์์ธํ ๋ฐ์ดํฐ ํฌ๋งท ๋ฐ API ์ฌ์ฉ๋ฒ์ [๊ณต์ ๋ฌธ์](https://docs.mixpanel.com/docs/migration/amplitude#import-api)์ [์ด๋ฒคํธ ํฌ๋งท ์ค๋ช
](https://docs.mixpanel.com/docs/migration/amplitude#differences-in-the-data-models)์ ์ฐธ๊ณ ํ์ธ์.LBKS๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค(BigQuery, Snowflake ๋ฑ)๋ก ์ฎ๊ธธ ์ ์๋ค๋ฉด, Mixpanel์ [Warehouse Connector](https://docs.mixpanel.com/docs/tracking-methods/warehouse-connectors)๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ๋ ๊ฐํธํ ์ ์์ต๋๋ค.LBKS> ๊ณต์ ๋ฌธ์์ NoSQL์์ ์ง์ ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ตฌ์ฒด์ ์ธ ์์๋ ์์ผ๋, ์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์งํํ์ค ์ ์์ต๋๋ค. ์ถ๊ฐ์ ์ธ ๋์์ด ํ์ํ์๋ฉด Mixpanel ์ง์ํ์ ๋ฌธ์ํ์๋ ๊ฒ๋ ์ถ์ฒ๋๋ฆฝ๋๋ค.
[[Import API ์๋ด](https://docs.mixpanel.com/docs/migration/amplitude#import-api)] [[์ด๋ฒคํธ ํฌ๋งท ์ค๋ช
](https://docs.mixpanel.com/docs/migration/amplitude#differences-in-the-data-models)]
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
์ฃ์กํ์ง๋ง, ์ ๊ณต๋ ๊ณต์ ๋ฌธ์๋ค์๋ ์ฐํ๋ฆฌํ๋(Amplitude) ์ด๋ฒคํธ ๋ฐ์ดํฐ๋ฅผ Mixpanel ํฌ๋งท์ผ๋ก ์๋ ๋ณํํด์ฃผ๋ ๋ณ๋์ ํด์ด๋ ์๋น์ค์ ๋ํ ์ธ๊ธ์ ์์ต๋๋ค.Mixpanel์ Amplitude์์ ์ง์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ง์ด๊ทธ๋ ์ด์ ์๋น์ค๋ฅผ ์ ๊ณตํ์ง๋ง, ์ด ์๋น์ค๋ Amplitude API๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ถ์ถํ๋ ๊ฒฝ์ฐ์๋ง ํด๋น๋๋ฉฐ, NoSQL ๋ฑ ๋ณ๋์ ์ ์ฅ์์์ ์๋์ผ๋ก ํฌ๋งท์ ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ์ ์๋ด๋์ด ์์ง ์์ต๋๋ค.๋ฐ๋ผ์, NoSQL์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ Mixpanel ํฌ๋งท์ผ๋ก ๋ณํํ๋ ค๋ฉด ์ง์ ์คํฌ๋ฆฝํธ(์: Python ๋ฑ)๋ฅผ ์์ฑํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ถ์ถํ๊ณ , Mixpanel ์ด๋ฒคํธ ํฌ๋งท์ ๋ง๊ฒ ๋ณํํ ํ Import API๋ก ์ ๋ก๋ํด์ผ ํฉ๋๋ค. ์๋ ๋ณํ ํด์ด ๊ณต์์ ์ผ๋ก ์ ๊ณต๋๋ค๋ ์ ๋ณด๋ ๋ฌธ์์ ์์ต๋๋ค. ๊ด๋ จ ๋ฌธ์ ์ฐธ๊ณ ์ถ๊ฐ๋ก, ๋ฐ์ดํฐ ์จ์ดํ์ฐ์ค(BigQuery, Snowflake ๋ฑ)๋ฅผ ์ฌ์ฉ ์ค์ด๋ผ๋ฉด Mixpanel์ Warehouse Connector๋ฅผ ํตํด ๋ณด๋ค ์ฝ๊ฒ ๋ง์ด๊ทธ๋ ์ด์ ํ ์ ์์ง๋ง, ์ด ์ญ์ NoSQL์์ ์๋ ๋ณํํด์ฃผ๋ ๊ธฐ๋ฅ์ ์๋๋๋ค.
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel์์ ์ด๋ฒคํธ์ ์ง๋ฆฌ์ ๋ณด(GeoIP) ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ip
ํ๋กํผํฐ๋, Mixpanel ๋ด๋ถ์ ์ผ๋ก๋ง ์ฌ์ฉ๋๋ฉฐ, ์ค์ ๋ก Mixpanel UI์์ โipโ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅ๋๊ฑฐ๋ ์กฐํ๋์ง ์์ต๋๋ค.
๋ง์ฝ ip ์ฃผ์๋ฅผ Mixpanel ์ด๋ฒคํธ์ ์ผ๋ฐ ํ๋กํผํฐ๋ก ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด, ํ๋กํผํฐ ์ด๋ฆ์ ip
๊ฐ ์๋ ๋ค๋ฅธ ์ด๋ฆ(์: user_ip
๋ฑ)์ผ๋ก ์ง์ ํด์ผ ํฉ๋๋ค.์์: LBKS{ "event": "Signed Up", "properties": { "distinct_id": "13793", "token": "mytoken", "user_ip": "203.0.113.9" // ์ด๋ ๊ฒ ๋ณ๋์ ํ๋กํผํฐ๋ก ์ ์ฅ } }LBKS
Mixpanel์ ๊ณต์ ๋ฌธ์์ ๋ฐ๋ฅด๋ฉด,
- ip
ํ๋กํผํฐ๋ Mixpanel์ด GeoIP ์ ๋ณด๋ฅผ ์ถ์ถํ ๋ค ์ ์ฅํ์ง ์๊ณ ํ๊ธฐํฉ๋๋ค.
- ๋ง์ฝ ์ค์ ip ์ฃผ์ ๊ฐ์ Mixpanel ๋ฐ์ดํฐ์ ์ ์ฅํ๊ณ ์ถ๋ค๋ฉด, ๋ฐ๋์ ip
๊ฐ ์๋ ๋ค๋ฅธ ์ด๋ฆ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค
(๊ณต์ ๋ฌธ์ ์ฐธ๊ณ ).> ์ ๋ฆฌ:
- GeoIP ์ฒ๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ๋ ip
ํ๋กํผํฐ๋ ์ ์ฅ๋์ง ์์ต๋๋ค.
- ip ์ฃผ์๋ฅผ Mixpanel ์ด๋ฒคํธ์ ์ ์ฅํ๋ ค๋ฉด, user_ip
๋ฑ ๋ณ๋์ ํ๋กํผํฐ๋ช
์ ์ฌ์ฉํ์ธ์.์์ธํ ๋ด์ฉ์ Mixpanel ๊ณต์ ๋ฌธ์ - Define IP Address์์ ํ์ธํ์ค ์ ์์ต๋๋ค.
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel ํ๋ก์ ํธ์ ํ์์กด์ "์์ธ"๋ก ์ค์ ํด๋์ จ๋ค๋ฉด, Mixpanel ๋ด์์์ ๋ฐ์ดํฐ ์กฐํ ๋ฐ ๋ฆฌํฌํธ๋ ์๋์ผ๋ก ์์ธ(Asia/Seoul) ํ์์กด ๊ธฐ์ค์ผ๋ก ํ์๋ฉ๋๋ค. ํ์ง๋ง, ์ด๋ฒคํธ ๋ฐ์ดํฐ์ ํ์์คํฌํ๋ฅผ ์ด๋ป๊ฒ ๋ณํํด์ผ ํ๋์ง๋ ๋ฐ์ดํฐ ์ด๊ด(Import) ์์ ๊ณผ ๊ธฐ์กด ํ๋ก์ ํธ ์์ฑ ์์ ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.- Mixpanel์ ๋ฐ์ดํฐ๋ฅผ Importํ ๋๋ ํญ์ UTC ๊ธฐ์ค์ผ๋ก ํ์์คํฌํ๋ฅผ ๋ณด๋ด๋ ๊ฒ์ด ๊ถ์ฅ๋ฉ๋๋ค. - Mixpanel์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ UTC๋ก ์ ์ฅํ๊ณ , ํ๋ก์ ํธ ํ์์กด(์ฌ๊ธฐ์๋ ์์ธ)์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ณํํด์ ๋ณด์ฌ์ค๋๋ค. - ๋ง์ฝ ์ฐํ๋ฆฌํ๋ ๋ฐ์ดํฐ์ ํ์์คํฌํ๊ฐ ์ด๋ฏธ KST(ํ๊ตญ ํ์ค์, UTC+9)๋ผ๋ฉด, Import ์ ์ UTC๋ก ๋ณํํด์ ์ ๋ก๋ํด์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, 2024-07-25 15:00:00 (KST) โ 2024-07-25 06:00:00 (UTC)๋ก ๋ณํ ํ ์ ๋ก๋ํด์ผ Mixpanel์์ ์ฌ๋ฐ๋ฅด๊ฒ ์์ธ ์๊ฐ์ผ๋ก ๋ค์ ๋ณด์ฌ์ง๋๋ค.๊ณต์ ๋ฌธ์์์๋ ํญ์ UTC๋ก Importํ ๊ฒ์ ๋ช ํํ ์๋ดํ๊ณ ์์ต๋๋ค.
Always send imported data to Mixpanel in UTC to ensure it displays correctly in your project. Mixpanel stores your data in UTC, then use your project timezone setting to output data in your selected timezone.
[๊ณต์ ๋ฌธ์ - ํ์์กด ๊ด๋ฆฌ]์ ๋ฆฌ: - Import ์์ ์ ํ์์คํฌํ๋ฅผ UTC๋ก ๋ง์ถฐ์ ์ ๋ก๋ํด์ผ ํ๋ฉฐ, - Mixpanel ํ๋ก์ ํธ ํ์์กด์ด ์์ธ๋ก ์ค์ ๋์ด ์๋ค๋ฉด, ๋ฆฌํฌํธ์์๋ ์๋์ผ๋ก KST๋ก ๋ณํ๋์ด ํ์๋ฉ๋๋ค.๋ฐ๋ผ์, ์ฐํ๋ฆฌํ๋ ๋ฐ์ดํฐ๊ฐ KST๋ผ๋ฉด ๋ฐ๋์ UTC๋ก ๋ณํ ํ Import ํ์ ์ผ ํฉ๋๋ค. ๋ง์ฝ ์ด๋ฏธ UTC๋ผ๋ฉด ๋ณ๋์ ์ ์ฒ๋ฆฌ ์์ด Importํ์๋ฉด ๋ฉ๋๋ค.
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel์์๋ ์ธ์ ์ ์๋์ผ๋ก ๊ณ์ฐํด์ฃผ๋ฉฐ, ์ธ์ ๋จ์๋ก ์ด๋ฒคํธ๋ฅผ ๊ตฌ๋ถํด์ ๋ถ์ํ ์ ์์ต๋๋ค. ๋ค๋ง, ์ธ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ํ๋ก์ ํธ์ ์ธ์ ์ค์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋์ด ์์ด์ผ ํ๋ฉฐ, ๋ณด๊ณ ์(Insights, Funnels, Flows ๋ฑ)์์ Session Start์ Session End ์ด๋ฒคํธ๋ฅผ ํ์ฉํด์ผ ์ธ์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณผ ์ ์์ต๋๋ค.- Mixpanel์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฒคํธ๋ฅผ ์๊ฐ์์ผ๋ก ๋ณด์ฌ์ฃผ์ง๋ง, Sessions ๊ธฐ๋ฅ์ ํ์ฑํํ๋ฉด ์ธ์ ๋ณ๋ก ์ด๋ฒคํธ๋ฅผ ๋ฌถ์ด์ ๋ถ์ํ ์ ์์ต๋๋ค. - ์ธ์ ์ Timeout ๊ธฐ๋ฐ(๊ธฐ๋ณธ๊ฐ), Event ๊ธฐ๋ฐ, Property ๊ธฐ๋ฐ ๋ฑ์ผ๋ก ์ ์ํ ์ ์์ผ๋ฉฐ, Project Settings์์ ์ํ๋ ๋ฐฉ์์ผ๋ก ์ธ์ ๊ตฌ๋ถ ๊ธฐ์ค์ ์ค์ ํ ์ ์์ต๋๋ค. - ์ธ์ ์ด ํ์ฑํ๋๋ฉด, ๊ฐ ์ด๋ฒคํธ์ ๋ํด "Session Start", "Session End"์ ๊ฐ์ ๊ฐ์ ์ด๋ฒคํธ๊ฐ ์์ฑ๋๊ณ , ์ธ์ ๋ณ๋ก ์ด๋ฒคํธ๋ฅผ ๋ถ์ํ๊ฑฐ๋ ์ธ์ ๋จ์๋ก ๋ฆฌํฌํธ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.๋ง์ฝ ๋จ์ํ ์ด๋ฒคํธ๋ง ์๊ฐ์์ผ๋ก ๋ณด์ด๊ณ ์ธ์ ๊ตฌ๋ถ์ด ๋์ง ์๋๋ค๋ฉด, 1. ํ๋ก์ ํธ์ ์ธ์ ์ค์ ์ด ๋์ด ์๋์ง ํ์ธํ์ธ์. 2. ๋ฆฌํฌํธ์์ "Session Start", "Session End" ์ด๋ฒคํธ๋ฅผ ํ์ฉํด ์ธ์ ๋จ์๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถ์ํ์ธ์.์์ธํ ์ธ์ ์ค์ ๋ฐ ํ์ฉ ๋ฐฉ๋ฒ์ ๊ณต์ ์ธ์ ๊ธฐ๋ฅ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์๋ฉด ๋ฉ๋๋ค. ์ธ์ ๋ณ๋ก ์ด๋ฒคํธ๋ฅผ ๋ณด๊ณ ์ถ๋ค๋ฉด, Insights, Funnels, Flows ๋ฆฌํฌํธ์์ ์ธ์ ๊ด๋ จ ์ด๋ฒคํธ์ ์์ฑ์ ํ์ฉํ์ค ์ ์์ต๋๋ค. ์ธ์ ๋ฆฌํฌํธ ํ์ฉ๋ฒ ์ฐธ๊ณ
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel๋ก ์ด๋ฒคํธ๊ฐ ์ ์ก๋ ํ, **์น(JavaScript SDK ๋ฑ)์์๋ ์ผ๋ฐ์ ์ผ๋ก ๊ฑฐ์ ์ค์๊ฐ(์ ์ด ์ด๋ด)**์ผ๋ก ์ด๋ฒคํธ๊ฐ Mixpanel์ ํ์๋ฉ๋๋ค.
ํ์ง๋ง **๋ชจ๋ฐ์ผ SDK(iOS, Android ๋ฑ)**๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, ์ด๋ฒคํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก 1๋ถ ๋์ ๋ฒํผ๋ง๋๊ฑฐ๋ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์ ํ๋ ๋ ์ ์ก๋๊ธฐ ๋๋ฌธ์ 1~2๋ถ ์ ๋ ์ง์ฐ๋ ์ ์์ต๋๋ค.
๋ํ, ๋ชจ๋ฐ์ผ SDK์์๋ .flush()
๋ฉ์๋๋ฅผ ํธ์ถํ์ฌ ์ฆ์ ์ด๋ฒคํธ๋ฅผ ์ ์กํ ์๋ ์์ต๋๋ค.> If tracking from a mobile device, events may take 1-2 minutes to appear because Mixpanelโs mobile SDKs buffer events for 1 minute, or when the app transitions to the background, to conserve battery life and bandwidth. You can call .flush()
in the mobile SDKs to manually flush events to Mixpanel
Track Events FAQ์น์์ ์ด๋ฒคํธ๊ฐ ๋ฐ๋ก ๋ณด์ด์ง ์๋ ๊ฒฝ์ฐ, ๊ด๊ณ ์ฐจ๋จ๊ธฐ๋ ๋ธ๋ผ์ฐ์ ์ Do Not Track ์ค์ ์ด ์์ธ์ผ ์ ์์ผ๋ ์ด ๋ถ๋ถ๋ ํ์ธํด๋ณด์๊ธฐ ๋ฐ๋๋๋ค.
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel ๊ณต์ ๋ฌธ์์๋ ๋์ผํ $device_id์ ip๋ฅผ ๊ฐ์ง ์ ์ ๋ฆฌ์คํธ๋ฅผ ์ถ์ถํ๋ ๊ตฌ์ฒด์ ์ธ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ์ ๋ํ ์ง์ ์ ์ธ ์๋ด๋ ์์ต๋๋ค.๋ค๋ง, ๋ค์๊ณผ ๊ฐ์ ์ ์ ์ฐธ๊ณ ํ์ค ์ ์์ต๋๋ค: - $device_id
๋ Mixpanel์ ์ด๋ฒคํธ ํ๋กํผํฐ๋ก ์ ์ฅ๋๋ฉฐ, ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.
- ํ์ง๋ง ip
ํ๋กํผํฐ๋ Mixpanel์์ ์ง๋ฆฌ์ ๋ณด(GeoIP) ์ถ์ถ ํ ์ ์ฅ๋์ง ์๊ณ ํ๊ธฐ๋๋ฏ๋ก, ์ด๋ฒคํธ์ ์ผ๋ฐ ํ๋กํผํฐ๋ก ์ ์ฅํ์ง ์๋ ํ, Mixpanel UI๋ ์ฟผ๋ฆฌ์์ ์ง์ ์ ์ผ๋ก ip
๊ฐ์ ์กฐํํ๊ฑฐ๋ ํํฐ๋งํ ์ ์์ต๋๋ค.
(๊ณต์ ๋ฌธ์ ์ฐธ๊ณ )๋ง์ฝ ๋ณ๋์ ์ปค์คํ
ํ๋กํผํฐ(์: user_ip
)๋ก ip ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์๋ค๋ฉด,
- Insights ๋ฆฌํฌํธ ๋ฑ์์ $device_id
์ user_ip
๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋งํ์ฌ ์ ์ ๋ฆฌ์คํธ๋ฅผ ์ถ์ถํ ์ ์์ต๋๋ค.์ ๋ฆฌ:
- $device_id
๋ ํํฐ๋ง ๋ฐ ์กฐํ๊ฐ ๊ฐ๋ฅํ์ง๋ง, ๊ธฐ๋ณธ ip
ํ๋กํผํฐ๋ Mixpanel์ ์ ์ฅ๋์ง ์์ผ๋ฏ๋ก ์ง์ ์ ์ผ๋ก ๋ ๊ฐ์ ๋์์ ๊ธฐ์ค์ผ๋ก ์ ์ ๋ฆฌ์คํธ๋ฅผ ์ถ์ถํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
- ip ์ฃผ์๋ฅผ ๋ณ๋์ ํ๋กํผํฐ๋ก ์ ์ฅํ๊ณ ์๋ค๋ฉด, ํด๋น ํ๋กํผํฐ์ $device_id
๋ฅผ ์กฐํฉํ์ฌ ๋ฆฌํฌํธ์์ ํํฐ๋งํ ์ ์์ต๋๋ค.> ๊ณต์ ๋ฌธ์์๋ ์ด์ ๊ด๋ จ๋ ๊ตฌ์ฒด์ ์ธ ์ฟผ๋ฆฌ ์์๋ ๋ฐฉ๋ฒ์ด ๋ช
์๋์ด ์์ง ์์ต๋๋ค.
Reserved Event Properties
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel ๊ณต์ ๋ฌธ์์๋ ๋์๋ณด๋(Users ํ์ด์ง ๋ฑ)์์ ๋์ผํ Device ID๋ฅผ ๊ฐ์ง ์ฌ๋ฌ User ID๋ฅผ ์ง์ ์ ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์๋ด๋ ์์ต๋๋ค.Mixpanel์ ID ๊ด๋ฆฌ ์์คํ
์์๋ $device_id
์ $user_id
๊ฐ ID ํด๋ฌ์คํฐ๋ก ๋ฌถ์ฌ ํ๋์ ์ ์ ๋ก ์ธ์๋์ง๋ง,
- ํ $device_id
์ ์ฌ๋ฌ $user_id
๊ฐ ์ฐ๊ฒฐ๋ ๊ฒฝ์ฐ(์: ์ฌ๋ฌ ์ฌ์ฉ์๊ฐ ๊ฐ์ ๊ธฐ๊ธฐ๋ฅผ ์ฌ์ฉ) ๊ฐ๊ฐ์ $user_id
๋ ๋ณ๋์ ์ ์ ๋ก ์ทจ๊ธ๋ฉ๋๋ค.
- Users ํ์ด์ง๋ ๋ฆฌํฌํธ์์ $device_id
๋ก ํํฐ๋ง์ ๊ฐ๋ฅํ์ง๋ง, ๋์ผํ $device_id
๋ฅผ ๊ณต์ ํ๋ ์ฌ๋ฌ $user_id
๋ฅผ ํ ๋ฒ์ ๋ฆฌ์คํธ์
ํ๋ ๊ธฐ๋ฅ์ด๋ ์ฟผ๋ฆฌ ์์๋ ๋ฌธ์์ ๋ช
์๋์ด ์์ง ์์ต๋๋ค.๋ง์ฝ $device_id
์ $user_id
์ ๋งคํ์ ์ง์ ์ ์ผ๋ก ๋ถ์ํ๊ณ ์ถ๋ค๋ฉด,
- Mixpanel ๋ฐ์ดํฐ ์ต์คํฌํธ ํ ์ธ๋ถ์์ ๋ถ์ํ๊ฑฐ๋,
- ๊ฐ ์ด๋ฒคํธ์ $device_id
์ $user_id
๋ฅผ ๋ชจ๋ ํ๋กํผํฐ๋ก ์ ์ฅํ ๋ค, Insights ๋ฆฌํฌํธ ๋ฑ์์ ๊ฐ๋ณ์ ์ผ๋ก ํํฐ๋งํ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.> ๊ฒฐ๋ก ์ ์ผ๋ก, ๊ณต์ ๋ฌธ์์๋ ๋์๋ณด๋์์ ๋์ผํ Device ID๋ฅผ ๊ฐ์ง User ID๋ค์ ์ง์ ์ ์ผ๋ก ์ฐพ๋ ๋ฐฉ๋ฒ์ด ๋ช
์๋์ด ์์ง ์์ต๋๋ค.
Reserved Event Properties
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel์ JQL(JavaScript Query Language)์ ์ฌ์ฉํ์ฌ ํน์ USER ID์ ๋์ผํ IP ๋๋ device ID๋ฅผ ๊ฐ์ง ์ ์ ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๊ณต์ ๋ฌธ์์์๋ ๊ตฌ์ฒด์ ์ธ ์์๋ ์ง์ ์ ์ธ ์ฟผ๋ฆฌ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ง ์์ต๋๋ค.ํนํ, IP ์ฃผ์์ ๊ฒฝ์ฐ Mixpanel์ GeoIP ์ฒ๋ฆฌ๋ฅผ ์ํด ip
ํ๋กํผํฐ๋ฅผ ์ผ์์ ์ผ๋ก๋ง ์ฌ์ฉํ๊ณ , ์ด๋ฒคํธ ๋ฐ์ดํฐ์ ์ ์ฅํ์ง ์์ผ๋ฏ๋ก JQL์์ ๊ธฐ๋ณธ์ ์ผ๋ก IP๋ก ํํฐ๋งํ๊ฑฐ๋ ์กฐํํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํฉ๋๋ค. ๋ง์ฝ IP๋ฅผ ๋ณ๋์ ์ปค์คํ
ํ๋กํผํฐ(์: user_ip
)๋ก ์ ์ฅํ๊ณ ์๋ค๋ฉด, ํด๋น ํ๋กํผํฐ๋ฅผ ํ์ฉํ ์ ์์ต๋๋ค.$device_id
์ ๊ฒฝ์ฐ ์ด๋ฒคํธ ํ๋กํผํฐ๋ก ์ ์ฅ๋๋ฏ๋ก, JQL์์ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ํํฐ๋งํ๋ ๊ฒ์ ๊ฐ๋ฅํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํน์ USER ID(์: "target_user_id"
)์ ๋์ผํ $device_id
๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ์ ์ ๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋
ผ๋ฆฌ๋ก ์ ๊ทผํ ์ ์์ต๋๋ค: 1. ๋จผ์ , ํด๋น USER ID์ $device_id
๊ฐ์ ์ฐพ์ต๋๋ค.
2. ๊ทธ $device_id
๋ฅผ ๊ฐ์ง ๋ค๋ฅธ USER ID์ ์ด๋ฒคํธ๋ฅผ ์กฐํํฉ๋๋ค.JQL ์์(์ฐธ๊ณ ์ฉ, ์ค์ ๋์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์): LBKSfunction main() { // 1. ํน์ USER ID์ device_id ์ฐพ๊ธฐ var targetDeviceIds = Events({ from_date: "2024-01-01", to_date: "2024-12-31" }) .filter(function(ev) { return ev.properties.$user_id === "target_user_id"; }) .map(function(ev) { return ev.properties.$device_id; }) .distinct();LBKS // 2. ๋์ผํ device_id๋ฅผ ๊ฐ์ง ๋ค๋ฅธ user_id ์ฐพ๊ธฐ return Events({ from_date: "2024-01-01", to_date: "2024-12-31" }) .filter(function(ev) { return targetDeviceIds.indexOf(ev.properties.$device_id) !== -1 && ev.properties.$user_id !== "target_user_id"; }) .map(function(ev) { return ev.properties.$user_id; }) .distinct(); }LBKS
์ค์:
- ์ ์ฝ๋๋ ๊ณต์ ๋ฌธ์์ ์๋ JQL ๋ฌธ๋ฒ๊ณผ ์์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ ์ผ๋ฐ์ ์ธ ํจํด์
๋๋ค. ์ค์ ๋ก๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ ์ฅ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์์ต๋๋ค.
- ๊ณต์ ๋ฌธ์์๋ IP ์ฃผ์๋ก ์ง์ ํํฐ๋งํ๋ ๋ฐฉ๋ฒ์ด๋, ์์ ๊ฐ์ ๋ณตํฉ ์ฟผ๋ฆฌ์ ๊ตฌ์ฒด์ ์ธ ์์๋ ์ ๊ณต๋์ง ์์ต๋๋ค.
- JQL์ 2025๋
12์ 31์ผ๋ถ๋ก ์์ ํ ์ง์ ์ข
๋ฃ๋ ์์ ์ด๋ฏ๋ก, ์ฅ๊ธฐ์ ์ผ๋ก๋ Export API ๋ฑ ๋์ฒด ๋ฐฉ๋ฒ์ ๊ณ ๋ คํ์
์ผ ํฉ๋๋ค [JQL Deprecation ์๋ด].๋ฐ๋ผ์, device ID ๊ธฐ์ค์ผ๋ก๋ JQL๋ก ์ ์ฌํ ์ฟผ๋ฆฌ๊ฐ ๊ฐ๋ฅํ์ง๋ง, IP ๊ธฐ์ค์ Mixpanel์ ๋ณ๋ ์ ์ฅํ์ง ์๋ ํ ๋ถ๊ฐ๋ฅํฉ๋๋ค.
๊ณต์ ๋ฌธ์์ ๋ช
ํํ ์์๊ฐ ์์ผ๋ฏ๋ก, ์ค์ ๊ตฌํ ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋์ ํ์ธํ์๊ธฐ ๋ฐ๋๋๋ค
[JQL ๊ณต์ ๋ฌธ์] [Reserved Event Properties].
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.
kapa.ai ๋ด๋ณด๋ด๊ธฐ์ค๋ฅ UserVisiblePreconditionFailedError: Uncaught exception TypeError: Events(...).filter(...).map(...).distinct is not a function .distinct(); ^ Stack trace: TypeError: Events(...).filter(...).map(...).distinct is not a function at main (<anonymous>:13:4) If the problem continues, please reach out to our wonderful customer support team.
Let me check the knowledge base for you again. One moment! ๐
Mixpanel JQL์์ .distinct()
ํจ์๋ ๊ณต์์ ์ผ๋ก ์ ๊ณต๋์ง ์์ต๋๋ค.
JQL์ ํ์ค Transformations์๋ .filter()
, .map()
, .groupBy()
, .groupByUser()
, .reduce()
๋ฑ์ด ์์ง๋ง, .distinct()
๋ ํฌํจ๋์ด ์์ง ์์ต๋๋ค.
๋ฐ๋ผ์, LBKS.map(...).distinct()LBKS
์ ๊ฐ์ ์ฝ๋๋ Mixpanel JQL์์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, ์์ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค
๊ณต์ JQL ๋ฌธ์ ์ฐธ๊ณ .ํด๊ฒฐ ๋ฐฉ๋ฒ:
- ์ค๋ณต ์ ๊ฑฐ๊ฐ ํ์ํ๋ค๋ฉด, .groupBy()
๋๋ .groupByUser()
๋ฅผ ํ์ฉํด ์ ๋ํฌํ ๊ฐ์ ์ถ์ถํด์ผ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด, ์ ๋ํฌํ $user_id
๋ฆฌ์คํธ๋ฅผ ์ป๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์์ต๋๋ค: LBKSfunction main() { return Events({ from_date: "2024-01-01", to_date: "2024-12-31" }) .groupBy(["properties.$user_id"], mixpanel.reducer.count()); }LBKS
์ด๋ ๊ฒ ํ๋ฉด ๊ฐ $user_id
๋ณ๋ก ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ ์ ์์ต๋๋ค.> JQL์์ .distinct()
๋ ์ง์ํ์ง ์์ผ๋ฏ๋ก, ๋ฐ๋์ .groupBy()
๋ฅผ ์ฌ์ฉํด ์ค๋ณต์ ์ ๊ฑฐํ์ธ์
Transformations in JQL.
kapa.ai is still learning and improving, please let me know how I did by reacting below.
โน๏ธย Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.