← Назад к вопросам

Какие идентификаторы в метрике SOMA считаются уникальными идентификаторами клиента?

3.0 Senior🔥 21 комментариев
#SQL и базы данных#Метрики продукта

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Уникальные идентификаторы клиента в метрике SOMA

Что такое SOMA?

SOMA — это фреймворк для анализа клиентов в B2B SaaS. Расшифровка зависит от контекста, но обычно это означает Segmentation, Organization, Metrics, Analysis. В некоторых случаях это может быть Sub, Org, Multiplayer, Account.

В контексте уникальности клиента, SOMA часто используется для определения иерархии идентификаторов:

  • S — Segment (сегмент, тип клиента)
  • O — Organization (организация/компания)
  • M — Master account (главный аккаунт)
  • A — Account (подаккаунт, юзер)

Иерархия идентификаторов в SOMA

Уровень 1: S (Segment)
    ↓
Уровень 2: O (Organization)
    ↓
Уровень 3: M (Master Account)
    ↓
Уровень 4: A (Account/User)

Уровень S — Segment (Сегмент)

Определение: Категория клиента по типу, размеру или поведению.

Примеры идентификаторов:

segment_id: "enterprise"
segment_id: "mid-market"
segment_id: "smb" (Small and Medium Business)
segment_id: "startup"
segment_id: "freemium"

Как используется:

  • Фильтрация по размеру клиента
  • Анализ retention по типу
  • Pricing разный для разных сегментов

В SQL:

SELECT 
    segment_id,
    COUNT(DISTINCT org_id) as org_count,
    AVG(mrr) as avg_mrr
FROM customers
GROUP BY segment_id;

-- Результат:
-- segment_id    org_count    avg_mrr
-- enterprise    150          50000
-- mid-market    500          5000
-- smb           5000         500
-- freemium      100000       0

Уровень O — Organization (Организация)

Определение: Уникальная компания, которая платит за услугу.

Примеры идентификаторов:

org_id: "abc123456" (UUID)
org_id: "company-slug" (human-readable)
company_name: "Acme Corp"
domain: "acme.com" (для B2B)
tax_id: "1234567890" (уникальный налоговый номер)

Характеристики Organization:

  • Одна Organization = один платёж
  • Может быть несколько пользователей
  • Один level M (Master account) и несколько A (подаккаунты)

Пример:

Organization: "Acme Corp" (org_id = abc123456)
├── Master Account: Peter Johnson (user_id = user_001)
├── Sub Account 1: Alice Smith (user_id = user_002)
├── Sub Account 2: Bob Brown (user_id = user_003)
└── Sub Account 3: Carol White (user_id = user_004)

Все платежи идут на org_id = abc123456
Все три пользователя отправляют данные на org_id

Как определить Organization:

  1. По домену email:
SELECT 
    user_id,
    email,
    SUBSTRING_INDEX(email, '@', -1) as email_domain,
    -- Если приложение учитывает домены, то все пользователи с одним доменом = одна org
FROM users;

-- alice@acme.com → org_id = acme.com
-- bob@acme.com → org_id = acme.com
-- carol@acme.com → org_id = acme.com
  1. По явно указанному org_id:
SELECT 
    user_id,
    org_id,
    organization_name,
    organization_domain
FROM users
WHERE org_id IS NOT NULL;
  1. По workspace/team:
-- В Slack, Notion, Figma
SELECT 
    user_id,
    workspace_id as org_id,  -- workspace = organization
    workspace_name
FROM users_in_workspace;

Важно: Organization ID должен быть уникальным и стабильным. Не меняется, если компания переименовывается или меняет домен.

Уровень M — Master Account (Главный аккаунт)

Определение: Primary administrator или owner Organization'и.

Характеристики:

master_account_id: UUID
master_account_user_id: который создал Organization
role: "Owner" или "Admin"
can_manage_billing: true
can_invite_users: true
can_delete_organization: true

Пример:

Organization: "Acme Corp"
Master Account: Peter Johnson (user_id = user_001)
  - может изменять настройки Organization
  - может добавлять/удалять users
  - может изменять billing
  - удаление Master Account удалит всю Organization

В SQL:

SELECT 
    org_id,
    master_user_id,
    user_name,
    role,
    created_at
FROM users
WHERE role = 'Owner' AND org_id IS NOT NULL;

-- abc123456   user_001   Peter Johnson   Owner   2020-01-15
-- def456789   user_005   John Smith      Owner   2021-06-20

Проблема: Что если Master Account удалит свой аккаунт?

✗ Плохо: Organization вися без owner
✓ Хорошо: Система автоматически назначает следующего Admin
✓ Хорошо: Требует явной передачи ownership

Уровень A — Account (Пользовательский аккаунт)

Определение: Индивидуальный пользователь, который может работать в системе.

Идентификаторы:

user_id: UUID
email: "alice@acme.com"
username: "alice.smith"
phone: "+1-555-0100" (в некоторых продуктах)
social_id: "google-oauth-123" (если OAuth)
device_id: "aabbccdd1234" (для мобильных приложений)
session_id: "sess-xyz789" (временный, для текущей сессии)

Характеристики:

  • Один user_id = один человек (или бот)
  • Может быть в одной Organization
  • Может иметь разные роли (Admin, Editor, Viewer)
  • Может иметь несколько сессий (мобиль + web + планшет)

Пример:

User: Alice Smith
├── user_id: user_002
├── email: alice@acme.com
├── org_id: abc123456 (Acme Corp)
├── role: Editor
└── sessions:
    ├── session_mobile_2024-03-26 (iPhone)
    ├── session_web_2024-03-26 (MacBook)
    └── session_tablet_2024-03-25 (iPad)

Что считается уникальным идентификатором КЛИЕНТА?

Это главный вопрос. Ответ зависит от того, что вы считаете "клиентом".

Вариант 1: ОРГАНИЗАЦИЯ = Клиент

Определение: Клиент — это компания, которая платит деньги.

Уникальный идентификатор: org_id

Метрики:

SELECT 
    org_id,
    organization_name,
    COUNT(DISTINCT user_id) as user_count,
    SUM(amount) as total_revenue,
    MAX(last_active_date) as last_active
FROM customers c
LEFT JOIN users u ON c.org_id = u.org_id
GROUP BY org_id;

-- org_id       name              user_count    revenue    last_active
-- abc123456    Acme Corp         5             50000      2024-03-26
-- def456789    Tech Inc          8             75000      2024-03-25
-- ghi789012    StartupXYZ        2             5000       2024-03-20

Когда использовать: В B2B SaaS, когда платит организация.

Вариант 2: ПОЛЬЗОВАТЕЛЬ = Клиент

Определение: Клиент — это индивидуальный человек.

Уникальный идентификатор: user_id или email

Метрики:

SELECT 
    user_id,
    email,
    org_id,
    first_login,
    last_login,
    DATEDIFF(day, first_login, last_login) as days_active,
    COUNT(actions) as total_actions
FROM users u
LEFT JOIN actions a ON u.user_id = a.user_id
GROUP BY user_id;

-- user_id    email               org_id     days_active
-- user_001   peter@acme.com      abc123456  100
-- user_002   alice@acme.com      abc123456  85
-- user_003   bob@acme.com        abc123456  45

Когда использовать: В B2C (Consumer Apps), когда платит или использует человек напрямую.

Вариант 3: АККАУНТ = Клиент (для многоаккаунтовых приложений)

Определение: Один аккаунт = один независимый клиент (например, Telegram:

  • Один user_id может быть в разных организациях
  • Но это не один "клиент" в SOMA смысле

Уникальный идентификатор: Зависит от модели

Пример Slack:

Пользователь: Alice
user_id: alice_uuid
Workspace 1 (Acme Corp): workspace_id = acme_uuid
  → combined_id = "alice_uuid@acme_uuid" (Alice в Acme)
Workspace 2 (Tech Inc): workspace_id = tech_uuid
  → combined_id = "alice_uuid@tech_uuid" (Alice в Tech)

Каждая комбинация = отдельный клиент в B2B смысле.

Какой идентификатор выбрать для SOMA?

Матрица выбора:

ВопросОтветУникальный ID
Один платёж на кого?На организациюorg_id
Кто платит?Компанияorg_id
Один юзер может быть в 1+ орг?Даorg_id + user_id
Это B2B или B2C?B2Borg_id
Это B2C?B2Cuser_id
Это платформа (как Slack)?Комбоworkspace_id + user_id

Практический пример: Правильная метрика в SOMA

Задача: Считать DAU (Daily Active Users) в Telegram-like приложении.

Неправильно (по умолчанию):

# Просто считаем user_id
DAU = SELECT COUNT(DISTINCT user_id) 
      FROM actions 
      WHERE DATE(created_at) = CURRENT_DATE

# Результат: 1,000,000 DAU

Правильно (по SOMA):

# Если это B2B Slack-like:
DAU_BY_ORG = SELECT 
    org_id,
    COUNT(DISTINCT user_id) as org_dau
FROM actions 
WHERE DATE(created_at) = CURRENT_DATE
GROUP BY org_id;

# Результат:
# org_id        org_dau
# acme_uuid     10
# tech_uuid     25
# startup_uuid  3

# Всего организаций активных: 3
# Всего пользователей активных: 38

Вывод: В SOMA смысле:

  • 38 DAU (users)
  • 3 DAU (organizations)

SQL примеры для определения уникальных ID

Пример 1: Какие user_id принадлежат одной org?

SELECT 
    org_id,
    COUNT(DISTINCT user_id) as unique_users_in_org,
    STRING_AGG(user_id, ', ') as user_ids
FROM users
GROUP BY org_id
HAVING COUNT(DISTINCT user_id) > 1;

-- org_id         unique_users_in_org    user_ids
-- abc123456      5                      user_001, user_002, user_003, user_004, user_005
-- def456789      8                      user_006, user_007, ...

Пример 2: Есть ли дублирующиеся email в системе?

SELECT 
    email,
    COUNT(DISTINCT user_id) as count_users,
    STRING_AGG(user_id, ', ') as user_ids
FROM users
GROUP BY email
HAVING COUNT(DISTINCT user_id) > 1;

-- Если результат не пуст, есть проблема: один email может быть у разных user_id
-- email              count_users    user_ids
-- alice@acme.com     2              user_002, user_999  <-- ОШИБКА!

Пример 3: Который user_id является Master Account?

SELECT 
    org_id,
    user_id,
    email,
    role
FROM users
WHERE role = 'Owner'
AND org_id IS NOT NULL
ORDER BY org_id;

-- org_id         user_id    email                role
-- abc123456      user_001   peter@acme.com      Owner
-- def456789      user_005   john@tech.com       Owner

Резюме: Иерархия уникальных ID в SOMA

┌─────────────────────────────┐
│ S — Segment ID              │ ("enterprise", "smb")
├─────────────────────────────┤
│ O — Organization ID         │ (org_id, workspace_id)
│ Уникален в системе          │ ← ГЛАВНЫЙ ИДЕНТИФИКАТОР КЛИЕНТА
├─────────────────────────────┤
│ M — Master Account ID       │ (owner_user_id, admin_id)
│ Один на Organization        │
├─────────────────────────────┤
│ A — Account/User ID         │ (user_id, email)
│ Много на Organization       │
└─────────────────────────────┘

Ответ на главный вопрос: В SOMA фреймворке, организация (O) — это основной уникальный идентификатор клиента. Все остальные ID (user_id, master_account_id) подчинены ей.

Но если ты анализируешь B2C приложение (как Instagram, Telegram для обычных юзеров), то уникальный идентификатор клиента — это user_id или email.

Какие идентификаторы в метрике SOMA считаются уникальными идентификаторами клиента? | PrepBro