dx-data-navigator
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseDX Data Navigator
DX 数据导航工具
Install
安装
bash
npx skills add pskoett/pskoett-ai-skills/dx-data-navigatorQuery the DX Data Cloud PostgreSQL database using the tool.
mcp__dx-mcp-server__queryDatabash
npx skills add pskoett/pskoett-ai-skills/dx-data-navigator使用工具查询DX Data Cloud PostgreSQL数据库。
mcp__dx-mcp-server__queryDataTool Usage
工具使用
mcp__dx-mcp-server__queryData(sql: "SELECT ...")Always query first if uncertain about table/column names:
information_schema.columnssql
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'table_name' ORDER BY ordinal_position;mcp__dx-mcp-server__queryData(sql: "SELECT ...")如果不确定表/列名称,请先查询:
information_schema.columnssql
SELECT column_name, data_type FROM information_schema.columns
WHERE table_name = 'table_name' ORDER BY ordinal_position;Critical: Team Tables
重点:团队表
Three team table types exist - use the right one:
| Table | Use Case |
|---|---|
| Current org structure, linking users to teams for PR/deployment metrics |
| Teams within DX survey snapshots (use for DX scores) |
| Historical team structure at specific dates |
For DX survey scores: Join through . Use GROUP BY to avoid duplicates (team names can appear multiple times across snapshot history):
dx_snapshot_teamssql
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND st.name = 'Your Team Name'
AND i.item_type = 'core4'
GROUP BY st.name, i.name;For PR/deployment metrics by team: Join through to :
dx_usersdx_teamssql
SELECT t.name, COUNT(*) as prs
FROM pull_requests p
JOIN dx_users u ON p.dx_user_id = u.id
JOIN dx_teams t ON u.team_id = t.id
WHERE p.merged IS NOT NULL GROUP BY t.name;存在三种团队表类型,请选择合适的表:
| 表名 | 适用场景 |
|---|---|
| 当前组织架构,关联用户与团队,用于PR/部署指标分析 |
| DX调研快照中的团队(用于查询DX分数) |
| 特定日期的历史团队架构 |
查询DX调研分数: 通过进行关联。使用GROUP BY避免重复数据(团队名称可能在不同快照历史中多次出现):
dx_snapshot_teamssql
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND st.name = 'Your Team Name'
AND i.item_type = 'core4'
GROUP BY st.name, i.name;按团队查询PR/部署指标: 通过关联到:
dx_usersdx_teamssql
SELECT t.name, COUNT(*) as prs
FROM pull_requests p
JOIN dx_users u ON p.dx_user_id = u.id
JOIN dx_teams t ON u.team_id = t.id
WHERE p.merged IS NOT NULL GROUP BY t.name;Discovering Team Names
查找团队名称
Query the database to find available teams:
sql
SELECT name FROM dx_teams WHERE deleted_at IS NULL ORDER BY name;查询数据库获取可用团队:
sql
SELECT name FROM dx_teams WHERE deleted_at IS NULL ORDER BY name;Data Domains
数据域
Core DX Metrics
核心DX指标
Survey snapshots with team scores, benchmarks, and sentiment data.
Key tables: , , ,
dx_snapshotsdx_snapshot_teamsdx_snapshot_itemsdx_snapshot_team_scoresdx_snapshots columns: id, account_id, contributors, participation_rate, start_date (date), end_date (date)
dx_snapshot_teams columns: id, snapshot_id, team_id, name, parent (boolean), flattened_parent, contributors, participation_rate
dx_snapshot_items columns: id, snapshot_id, name, item_type, prompt, target_label
dx_snapshot_team_scores columns: id, snapshot_id, snapshot_team_id (FK to dx_snapshot_teams.id), team_id (FK to dx_teams.id), item_id (FK to dx_snapshot_items.id), score, vs_org, vs_prev, vs_industry50, vs_industry75, vs_industry90, unit
Item types in dx_snapshot_items:
- : Effectiveness, Impact, Quality, Speed
core4 - : Ease of delivery, Engagement, Weekly time loss, Quality, Speed
kpi - : Deep work, Change Confidence, Documentation, Cross-team collaboration, Customer focus, Decision-making, etc.
sentiment - : Review wait time, CI wait time, Deploy frequency, PR merge frequency, AI time savings, Red tape, etc.
workflow - : Raw average values for workflow metrics (actual numbers, not percentiles)
workflow_averages - : Tool satisfaction scores (e.g., code editors, issue trackers, CI/CD tools)
csat
sql
-- Latest snapshot info
SELECT id, start_date, end_date, contributors, participation_rate
FROM dx_snapshots ORDER BY end_date DESC LIMIT 1;
-- Team scores for specific metric (use GROUP BY to dedupe)
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND st.name = 'Your Team Name'
AND i.item_type = 'core4'
GROUP BY st.name, i.name;
-- All teams comparison on one metric
SELECT st.name as team, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.name = 'Effectiveness' AND i.item_type = 'core4'
AND st.parent = false
GROUP BY st.name
ORDER BY score DESC NULLS LAST;包含团队分数、基准和情绪数据的调研快照。
关键表: , , ,
dx_snapshotsdx_snapshot_teamsdx_snapshot_itemsdx_snapshot_team_scoresdx_snapshots列: id, account_id, contributors, participation_rate, start_date (date), end_date (date)
dx_snapshot_teams列: id, snapshot_id, team_id, name, parent (boolean), flattened_parent, contributors, participation_rate
dx_snapshot_items列: id, snapshot_id, name, item_type, prompt, target_label
dx_snapshot_team_scores列: id, snapshot_id, snapshot_team_id (FK to dx_snapshot_teams.id), team_id (FK to dx_teams.id), item_id (FK to dx_snapshot_items.id), score, vs_org, vs_prev, vs_industry50, vs_industry75, vs_industry90, unit
dx_snapshot_items中的item类型:
- : 效能、影响力、质量、速度
core4 - : 交付便捷性、参与度、每周时间损耗、质量、速度
kpi - : 深度工作、变革信心、文档、跨团队协作、客户聚焦、决策制定等
sentiment - : 评审等待时间、CI等待时间、部署频率、PR合并频率、AI时间节省、冗余流程等
workflow - : 工作流指标的原始平均值(实际数值,而非百分位数)
workflow_averages - : 工具满意度分数(如代码编辑器、问题追踪器、CI/CD工具)
csat
sql
-- 最新快照信息
SELECT id, start_date, end_date, contributors, participation_rate
FROM dx_snapshots ORDER BY end_date DESC LIMIT 1;
-- 特定指标的团队分数(使用GROUP BY去重)
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND st.name = 'Your Team Name'
AND i.item_type = 'core4'
GROUP BY st.name, i.name;
-- 所有团队在单一指标上的对比
SELECT st.name as team, MAX(ts.score) as score, MAX(ts.vs_industry50) as vs_industry
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.name = 'Effectiveness' AND i.item_type = 'core4'
AND st.parent = false
GROUP BY st.name
ORDER BY score DESC NULLS LAST;Teams and Users
团队与用户
Organization structure, team hierarchies, user profiles.
Key tables: , , ,
dx_teamsdx_usersdx_team_hierarchiesdx_groupsdx_teams columns: id, name, contributors, deleted_at
dx_users key columns: id, name, email, team_id, ai_light_adoption_date, ai_moderate_adoption_date, ai_heavy_adoption_date
sql
-- Teams with contributor counts
SELECT name, contributors FROM dx_teams WHERE deleted_at IS NULL ORDER BY contributors DESC;
-- Users with AI adoption status
SELECT name, email, ai_heavy_adoption_date FROM dx_users
WHERE ai_heavy_adoption_date IS NOT NULL ORDER BY ai_heavy_adoption_date DESC;
-- Team members
SELECT u.name, u.email FROM dx_users u
JOIN dx_teams t ON u.team_id = t.id
WHERE t.name = 'Your Team Name';组织架构、团队层级、用户资料。
关键表: , , ,
dx_teamsdx_usersdx_team_hierarchiesdx_groupsdx_teams列: id, name, contributors, deleted_at
dx_users关键列: id, name, email, team_id, ai_light_adoption_date, ai_moderate_adoption_date, ai_heavy_adoption_date
sql
-- 包含贡献者数量的团队列表
SELECT name, contributors FROM dx_teams WHERE deleted_at IS NULL ORDER BY contributors DESC;
-- 具有AI采用状态的用户
SELECT name, email, ai_heavy_adoption_date FROM dx_users
WHERE ai_heavy_adoption_date IS NOT NULL ORDER BY ai_heavy_adoption_date DESC;
-- 团队成员
SELECT u.name, u.email FROM dx_users u
JOIN dx_teams t ON u.team_id = t.id
WHERE t.name = 'Your Team Name';Pull Requests
拉取请求(PR)
PR metrics including cycle times, review wait times, and throughput.
Key tables: , ,
pull_requestspull_request_reviewsrepospull_requests key columns: id, dx_user_id, repo_id, title, base_ref, head_ref, additions, deletions, created, merged, closed, draft, bot_authored
Key metrics (all in seconds, divide by 3600 for hours):
- : Total PR cycle time
open_to_merge - : Time to first review
open_to_first_review - : Time to approval
open_to_first_approval - Business hour variants: add suffix
_business_hours
sql
-- PR metrics by team last 30 days
SELECT t.name, COUNT(*) as prs,
AVG(p.open_to_merge)/3600 as avg_hours_to_merge,
AVG(p.open_to_first_review)/3600 as avg_hours_to_first_review
FROM pull_requests p
JOIN dx_users u ON p.dx_user_id = u.id
JOIN dx_teams t ON u.team_id = t.id
WHERE p.merged IS NOT NULL AND p.created > NOW() - INTERVAL '30 days'
GROUP BY t.name ORDER BY prs DESC;
-- PR size distribution
SELECT
CASE
WHEN additions + deletions < 50 THEN 'XS (<50)'
WHEN additions + deletions < 200 THEN 'S (50-199)'
WHEN additions + deletions < 500 THEN 'M (200-499)'
ELSE 'L (500+)'
END as size_bucket,
COUNT(*) as count,
AVG(open_to_merge)/3600 as avg_hours
FROM pull_requests
WHERE merged IS NOT NULL AND created > NOW() - INTERVAL '90 days'
GROUP BY size_bucket ORDER BY avg_hours;PR指标包括周期时间、评审等待时间和吞吐量。
关键表: , ,
pull_requestspull_request_reviewsrepospull_requests关键列: id, dx_user_id, repo_id, title, base_ref, head_ref, additions, deletions, created, merged, closed, draft, bot_authored
关键指标(单位:秒,除以3600转换为小时):
- : PR总周期时间
open_to_merge - : 首次评审等待时间
open_to_first_review - : 首次批准等待时间
open_to_first_approval - 工作时间变体:添加后缀
_business_hours
sql
-- 过去30天的团队PR指标
SELECT t.name, COUNT(*) as prs,
AVG(p.open_to_merge)/3600 as avg_hours_to_merge,
AVG(p.open_to_first_review)/3600 as avg_hours_to_first_review
FROM pull_requests p
JOIN dx_users u ON p.dx_user_id = u.id
JOIN dx_teams t ON u.team_id = t.id
WHERE p.merged IS NOT NULL AND p.created > NOW() - INTERVAL '30 days'
GROUP BY t.name ORDER BY prs DESC;
-- PR大小分布
SELECT
CASE
WHEN additions + deletions < 50 THEN 'XS (<50)'
WHEN additions + deletions < 200 THEN 'S (50-199)'
WHEN additions + deletions < 500 THEN 'M (200-499)'
ELSE 'L (500+)'
END as size_bucket,
COUNT(*) as count,
AVG(open_to_merge)/3600 as avg_hours
FROM pull_requests
WHERE merged IS NOT NULL AND created > NOW() - INTERVAL '90 days'
GROUP BY size_bucket ORDER BY avg_hours;Deployments and Incidents
部署与事件
Deployment frequency, success rates, and incident tracking for DORA metrics.
Key tables: , ,
deploymentsincidentsincident_servicesdeployments columns: id, service, repository, environment, deployed_at, success, commit_sha
incidents columns: id, name, priority, source, source_url, started_at, resolved_at, started_to_resolved (seconds), deleted
Deployment environments: dev, stage, prod, production
Incident priorities: '1 - Critical', '2 - High', '3 - Moderate', '4 - Low', '5 - Planning'
Incident source: Check for available sources
SELECT DISTINCT source FROM incidentssql
-- Deploy frequency by environment
SELECT environment, COUNT(*) FROM deployments
WHERE deployed_at > NOW() - INTERVAL '30 days' GROUP BY environment;
-- Deployment success rate
SELECT
COUNT(*) as total,
COUNT(*) FILTER (WHERE success) as successful,
COUNT(*) FILTER (WHERE success)::float / COUNT(*) * 100 as success_rate
FROM deployments WHERE deployed_at > NOW() - INTERVAL '30 days';
-- Mean Time to Recovery (MTTR)
SELECT AVG(started_to_resolved)/3600 as avg_hours_to_resolve
FROM incidents
WHERE resolved_at IS NOT NULL AND priority IN ('1 - Critical', '2 - High');
-- Incidents by priority
SELECT priority, COUNT(*) FROM incidents
WHERE started_at > NOW() - INTERVAL '90 days' AND deleted = false
GROUP BY priority ORDER BY priority;部署频率、成功率,以及用于DORA指标的事件追踪。
关键表: , ,
deploymentsincidentsincident_servicesdeployments列: id, service, repository, environment, deployed_at, success, commit_sha
incidents列: id, name, priority, source, source_url, started_at, resolved_at, started_to_resolved (seconds), deleted
部署环境: dev, stage, prod, production
事件优先级: '1 - Critical', '2 - High', '3 - Moderate', '4 - Low', '5 - Planning'
事件来源: 查询获取可用来源
SELECT DISTINCT source FROM incidentssql
-- 按环境统计部署频率
SELECT environment, COUNT(*) FROM deployments
WHERE deployed_at > NOW() - INTERVAL '30 days' GROUP BY environment;
-- 部署成功率
SELECT
COUNT(*) as total,
COUNT(*) FILTER (WHERE success) as successful,
COUNT(*) FILTER (WHERE success)::float / COUNT(*) * 100 as success_rate
FROM deployments WHERE deployed_at > NOW() - INTERVAL '30 days';
-- 平均恢复时间(MTTR)
SELECT AVG(started_to_resolved)/3600 as avg_hours_to_resolve
FROM incidents
WHERE resolved_at IS NOT NULL AND priority IN ('1 - Critical', '2 - High');
-- 按优先级统计事件
SELECT priority, COUNT(*) FROM incidents
WHERE started_at > NOW() - INTERVAL '90 days' AND deleted = false
GROUP BY priority ORDER BY priority;AI Tools
AI工具
AI coding assistant adoption tracking (e.g., GitHub Copilot).
Key tables: , , ,
ai_toolsai_tool_daily_metricsgithub_copilot_daily_usagesgithub_usersgithub_copilot_daily_usages columns: id, login, date, enterprise_slug, active (boolean)
github_users columns: id, login, verified_emails, bot, active
Linking Copilot to teams: GitHub logins don't match DX user emails directly. Use to link:
github_users.verified_emailssql
-- Copilot usage by team (via github_users email linking)
SELECT t.name as team, COUNT(DISTINCT c.login) as active_copilot_users
FROM github_copilot_daily_usages c
JOIN github_users gu ON c.login = gu.login
JOIN dx_users u ON gu.verified_emails = u.email
JOIN dx_teams t ON u.team_id = t.id
WHERE c.date > NOW() - INTERVAL '30 days' AND c.active = true
GROUP BY t.name ORDER BY active_copilot_users DESC;sql
-- Daily Copilot active users (overall)
SELECT date, COUNT(*) FILTER (WHERE active) as active_users
FROM github_copilot_daily_usages
WHERE date > NOW() - INTERVAL '30 days'
GROUP BY date ORDER BY date;
-- Copilot adoption rate (latest day)
SELECT
COUNT(DISTINCT login) FILTER (WHERE active) as active_users,
COUNT(DISTINCT login) as total_users,
COUNT(DISTINCT login) FILTER (WHERE active)::float / COUNT(DISTINCT login) * 100 as adoption_pct
FROM github_copilot_daily_usages
WHERE date = (SELECT MAX(date) FROM github_copilot_daily_usages);
-- Weekly trend
SELECT DATE_TRUNC('week', date) as week,
COUNT(DISTINCT login) FILTER (WHERE active) as active_users
FROM github_copilot_daily_usages
WHERE date > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;AI编码助手采用情况追踪(如GitHub Copilot)。
关键表: , , ,
ai_toolsai_tool_daily_metricsgithub_copilot_daily_usagesgithub_usersgithub_copilot_daily_usages列: id, login, date, enterprise_slug, active (boolean)
github_users列: id, login, verified_emails, bot, active
关联Copilot与团队: GitHub登录名与DX用户邮箱不直接匹配。使用进行关联:
github_users.verified_emailssql
-- 按团队统计Copilot使用情况(通过github_users邮箱关联)
SELECT t.name as team, COUNT(DISTINCT c.login) as active_copilot_users
FROM github_copilot_daily_usages c
JOIN github_users gu ON c.login = gu.login
JOIN dx_users u ON gu.verified_emails = u.email
JOIN dx_teams t ON u.team_id = t.id
WHERE c.date > NOW() - INTERVAL '30 days' AND c.active = true
GROUP BY t.name ORDER BY active_copilot_users DESC;sql
-- 每日Copilot活跃用户数(整体)
SELECT date, COUNT(*) FILTER (WHERE active) as active_users
FROM github_copilot_daily_usages
WHERE date > NOW() - INTERVAL '30 days'
GROUP BY date ORDER BY date;
-- Copilot采用率(最新一日)
SELECT
COUNT(DISTINCT login) FILTER (WHERE active) as active_users,
COUNT(DISTINCT login) as total_users,
COUNT(DISTINCT login) FILTER (WHERE active)::float / COUNT(DISTINCT login) * 100 as adoption_pct
FROM github_copilot_daily_usages
WHERE date = (SELECT MAX(date) FROM github_copilot_daily_usages);
-- 周趋势
SELECT DATE_TRUNC('week', date) as week,
COUNT(DISTINCT login) FILTER (WHERE active) as active_users
FROM github_copilot_daily_usages
WHERE date > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;Issue Tracking
问题追踪
Project management data including issues, sprints, and cycle times (e.g., Jira).
Key tables: , , , , ,
jira_issuesjira_projectsjira_sprintsjira_issue_sprintsjira_issue_typesjira_statusesjira_issues key columns: id, key, summary, story_points, cycle_time (seconds), created_at, completed_at, project_id, status_id, issue_type_id, user_id
jira_sprints columns: id, name, state ('active', 'closed', 'future'), start_date, end_date, complete_date
sql
-- Sprint velocity (last 5 closed sprints)
SELECT s.name, SUM(i.story_points) as points, COUNT(*) as issues
FROM jira_sprints s
JOIN jira_issue_sprints jis ON s.id = jis.sprint_id
JOIN jira_issues i ON jis.issue_id = i.id
WHERE s.state = 'closed' AND i.completed_at IS NOT NULL
GROUP BY s.id, s.name ORDER BY s.complete_date DESC LIMIT 5;
-- Issue cycle time by type
SELECT it.name as issue_type, COUNT(*) as issues, AVG(i.cycle_time)/3600 as avg_hours
FROM jira_issues i
JOIN jira_issue_types it ON i.issue_type_id = it.id
WHERE i.completed_at IS NOT NULL AND i.completed_at > NOW() - INTERVAL '90 days'
GROUP BY it.name ORDER BY issues DESC;项目管理数据,包括问题、迭代和周期时间(如Jira)。
关键表: , , , , ,
jira_issuesjira_projectsjira_sprintsjira_issue_sprintsjira_issue_typesjira_statusesjira_issues关键列: id, key, summary, story_points, cycle_time (seconds), created_at, completed_at, project_id, status_id, issue_type_id, user_id
jira_sprints列: id, name, state ('active', 'closed', 'future'), start_date, end_date, complete_date
sql
-- 最近5个已关闭迭代의速度
SELECT s.name, SUM(i.story_points) as points, COUNT(*) as issues
FROM jira_sprints s
JOIN jira_issue_sprints jis ON s.id = jis.sprint_id
JOIN jira_issues i ON jis.issue_id = i.id
WHERE s.state = 'closed' AND i.completed_at IS NOT NULL
GROUP BY s.id, s.name ORDER BY s.complete_date DESC LIMIT 5;
-- 按问题类型统计周期时间
SELECT it.name as issue_type, COUNT(*) as issues, AVG(i.cycle_time)/3600 as avg_hours
FROM jira_issues i
JOIN jira_issue_types it ON i.issue_type_id = it.id
WHERE i.completed_at IS NOT NULL AND i.completed_at > NOW() - INTERVAL '90 days'
GROUP BY it.name ORDER BY issues DESC;Service Catalog
服务目录
Software catalog with services, teams, domains, and ownership.
Key tables: , ,
dx_catalog_entitiesdx_catalog_entity_ownersdx_catalog_entity_typesdx_catalog_entities columns: id, name, identifier, entity_type_identifier, description
Entity types: service, team, domain (check column)
entity_type_identifiersql
-- Services count by owning team
SELECT t.name as team, COUNT(*) as services
FROM dx_catalog_entity_owners eo
JOIN dx_catalog_entities e ON eo.entity_id = e.id
JOIN dx_teams t ON eo.team_id = t.id
WHERE e.entity_type_identifier = 'service'
GROUP BY t.name ORDER BY services DESC;
-- List services with owners
SELECT e.name as service, e.identifier, t.name as owner_team
FROM dx_catalog_entities e
JOIN dx_catalog_entity_owners eo ON e.id = eo.entity_id
JOIN dx_teams t ON eo.team_id = t.id
WHERE e.entity_type_identifier = 'service'
ORDER BY t.name, e.name;包含服务、团队、领域和所有权的软件目录。
关键表: , ,
dx_catalog_entitiesdx_catalog_entity_ownersdx_catalog_entity_typesdx_catalog_entities列: id, name, identifier, entity_type_identifier, description
实体类型: service, team, domain(查看列)
entity_type_identifiersql
-- 按负责团队统计服务数量
SELECT t.name as team, COUNT(*) as services
FROM dx_catalog_entity_owners eo
JOIN dx_catalog_entities e ON eo.entity_id = e.id
JOIN dx_teams t ON eo.team_id = t.id
WHERE e.entity_type_identifier = 'service'
GROUP BY t.name ORDER BY services DESC;
-- 列出带有负责人的服务
SELECT e.name as service, e.identifier, t.name as owner_team
FROM dx_catalog_entities e
JOIN dx_catalog_entity_owners eo ON e.id = eo.entity_id
JOIN dx_teams t ON eo.team_id = t.id
WHERE e.entity_type_identifier = 'service'
ORDER BY t.name, e.name;Pipelines and Code Quality
流水线与代码质量
CI/CD pipeline runs and code quality metrics (e.g., SonarCloud).
Key tables: , , ,
pipeline_runssonarcloud_issuessonarcloud_projectssonarcloud_project_metricspipeline_runs columns: id, status, started_at, completed_at, duration
sql
-- Pipeline success rate
SELECT COUNT(*) as runs,
COUNT(*) FILTER (WHERE status = 'success') as successful,
COUNT(*) FILTER (WHERE status = 'success') * 100.0 / COUNT(*) as success_pct
FROM pipeline_runs WHERE started_at > NOW() - INTERVAL '30 days';
-- Pipeline duration trend
SELECT DATE_TRUNC('week', started_at) as week,
AVG(duration)/60 as avg_minutes
FROM pipeline_runs WHERE started_at > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;CI/CD流水线运行和代码质量指标(如SonarCloud)。
关键表: , , ,
pipeline_runssonarcloud_issuessonarcloud_projectssonarcloud_project_metricspipeline_runs列: id, status, started_at, completed_at, duration
sql
-- 流水线成功率
SELECT COUNT(*) as runs,
COUNT(*) FILTER (WHERE status = 'success') as successful,
COUNT(*) FILTER (WHERE status = 'success') * 100.0 / COUNT(*) as success_pct
FROM pipeline_runs WHERE started_at > NOW() - INTERVAL '30 days';
-- 流水线时长趋势
SELECT DATE_TRUNC('week', started_at) as week,
AVG(duration)/60 as avg_minutes
FROM pipeline_runs WHERE started_at > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;Issues
问题
Normalized issue data from source control platforms (e.g., GitHub Issues).
Key tables: , , ,
issuesgithub_issuesgithub_issue_labelsgithub_labelsissues columns: id, source, dx_user_id, title, state, created, completed, cycle_time
sql
-- Issue throughput
SELECT DATE_TRUNC('week', completed) as week, COUNT(*) as completed
FROM issues WHERE completed > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;来自源码控制平台的标准化问题数据(如GitHub Issues)。
关键表: , , ,
issuesgithub_issuesgithub_issue_labelsgithub_labelsissues列: id, source, dx_user_id, title, state, created, completed, cycle_time
sql
-- 问题吞吐量
SELECT DATE_TRUNC('week', completed) as week, COUNT(*) as completed
FROM issues WHERE completed > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;Documentation
文档
Documentation and knowledge base activity (e.g., Confluence, wikis).
Key tables: , , , ,
confluence_spacesconfluence_pagesconfluence_page_versionsconfluence_usersconfluence_page_labelsconfluence_spaces columns: id, name, external_key, space_type, status, source_url, created_at
confluence_pages columns: id, space_id, author_id, title, status, views_count, created_at, updated_at
confluence_page_versions columns: id, page_id, version_number, author_id, created_at
sql
-- Most active Confluence spaces
SELECT s.name as space_name, s.external_key,
COUNT(DISTINCT p.id) as page_count,
COUNT(DISTINCT pv.id) as total_edits,
MAX(pv.created_at) as last_activity
FROM confluence_spaces s
LEFT JOIN confluence_pages p ON s.id = p.space_id
LEFT JOIN confluence_page_versions pv ON p.id = pv.page_id
GROUP BY s.id, s.name, s.external_key
ORDER BY total_edits DESC LIMIT 15;
-- Recent documentation activity
SELECT p.title, s.name as space, pv.created_at
FROM confluence_page_versions pv
JOIN confluence_pages p ON pv.page_id = p.id
JOIN confluence_spaces s ON p.space_id = s.id
WHERE pv.created_at > NOW() - INTERVAL '7 days'
ORDER BY pv.created_at DESC LIMIT 20;文档与知识库活动(如Confluence、维基)。
关键表: , , , ,
confluence_spacesconfluence_pagesconfluence_page_versionsconfluence_usersconfluence_page_labelsconfluence_spaces列: id, name, external_key, space_type, status, source_url, created_at
confluence_pages列: id, space_id, author_id, title, status, views_count, created_at, updated_at
confluence_page_versions列: id, page_id, version_number, author_id, created_at
sql
-- 最活跃的Confluence空间
SELECT s.name as space_name, s.external_key,
COUNT(DISTINCT p.id) as page_count,
COUNT(DISTINCT pv.id) as total_edits,
MAX(pv.created_at) as last_activity
FROM confluence_spaces s
LEFT JOIN confluence_pages p ON s.id = p.space_id
LEFT JOIN confluence_page_versions pv ON p.id = pv.page_id
GROUP BY s.id, s.name, s.external_key
ORDER BY total_edits DESC LIMIT 15;
-- 近期文档活动
SELECT p.title, s.name as space, pv.created_at
FROM confluence_page_versions pv
JOIN confluence_pages p ON pv.page_id = p.id
JOIN confluence_spaces s ON p.space_id = s.id
WHERE pv.created_at > NOW() - INTERVAL '7 days'
ORDER BY pv.created_at DESC LIMIT 20;Data Quality Notes
数据质量说明
Known issues:
- Some team names may have typos - verify names by querying
dx_teams - table is empty - incidents cannot be linked to specific services
incident_services - AI adoption date fields are mostly NULL - use
dx_usersinsteadgithub_copilot_daily_usages - DX survey scores may have duplicates - always use GROUP BY with MAX() aggregation
已知问题:
- 部分团队名称可能存在拼写错误 - 通过查询验证名称
dx_teams - 表为空 - 事件无法关联到特定服务
incident_services - 中的AI采用日期字段大多为NULL - 请使用
dx_users替代github_copilot_daily_usages - DX调研分数可能存在重复 - 请始终结合GROUP BY与MAX()聚合函数使用
Common Query Patterns
常见查询模式
DORA Metrics
DORA指标
sql
-- Deployment Frequency (daily average, production only)
SELECT COUNT(*)::float / 30 as deploys_per_day FROM deployments
WHERE deployed_at > NOW() - INTERVAL '30 days' AND environment IN ('prod', 'production');
-- Lead Time for Changes (PR cycle time)
SELECT
AVG(open_to_merge)/3600 as avg_hours,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY open_to_merge)/3600 as median_hours
FROM pull_requests
WHERE merged IS NOT NULL AND created > NOW() - INTERVAL '30 days';
-- Mean Time to Recovery
SELECT AVG(started_to_resolved)/3600 as mttr_hours FROM incidents
WHERE resolved_at IS NOT NULL AND priority IN ('1 - Critical', '2 - High')
AND started_at > NOW() - INTERVAL '90 days';
-- Change Failure Rate (requires correlating incidents with deployments)sql
-- 部署频率(日均,仅生产环境)
SELECT COUNT(*)::float / 30 as deploys_per_day FROM deployments
WHERE deployed_at > NOW() - INTERVAL '30 days' AND environment IN ('prod', 'production');
-- 变更前置时间(PR周期时间)
SELECT
AVG(open_to_merge)/3600 as avg_hours,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY open_to_merge)/3600 as median_hours
FROM pull_requests
WHERE merged IS NOT NULL AND created > NOW() - INTERVAL '30 days';
-- 平均恢复时间
SELECT AVG(started_to_resolved)/3600 as mttr_hours FROM incidents
WHERE resolved_at IS NOT NULL AND priority IN ('1 - Critical', '2 - High')
AND started_at > NOW() - INTERVAL '90 days';
-- 变更失败率(需要关联事件与部署)Time-based Trends
基于时间的趋势
sql
-- Weekly PR throughput trend
SELECT DATE_TRUNC('week', merged) as week, COUNT(*) as prs
FROM pull_requests WHERE merged > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;
-- Monthly deployment trend
SELECT DATE_TRUNC('month', deployed_at) as month, COUNT(*) as deploys
FROM deployments WHERE deployed_at > NOW() - INTERVAL '12 months'
GROUP BY month ORDER BY month;sql
-- 每周PR吞吐量趋势
SELECT DATE_TRUNC('week', merged) as week, COUNT(*) as prs
FROM pull_requests WHERE merged > NOW() - INTERVAL '90 days'
GROUP BY week ORDER BY week;
-- 每月部署趋势
SELECT DATE_TRUNC('month', deployed_at) as month, COUNT(*) as deploys
FROM deployments WHERE deployed_at > NOW() - INTERVAL '12 months'
GROUP BY month ORDER BY month;Historical DX Survey Comparison
历史DX调研对比
sql
-- Compare team scores across all surveys
SELECT s.end_date as survey_date, i.name as metric, ts.score
FROM dx_snapshot_team_scores ts
JOIN dx_snapshots s ON ts.snapshot_id = s.id
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id AND st.snapshot_id = s.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = s.id
WHERE st.name = 'Your Team Name'
AND i.item_type = 'core4'
AND ts.score IS NOT NULL
ORDER BY s.end_date, i.name;
-- Teams that improved most since last survey (use vs_prev)
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_prev) as change
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.name = 'Effectiveness' AND i.item_type = 'core4'
AND st.parent = false
GROUP BY st.name, i.name
ORDER BY change DESC NULLS LAST;sql
-- 对比团队在所有调研中的分数
SELECT s.end_date as survey_date, i.name as metric, ts.score
FROM dx_snapshot_team_scores ts
JOIN dx_snapshots s ON ts.snapshot_id = s.id
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id AND st.snapshot_id = s.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = s.id
WHERE st.name = 'Your Team Name'
AND i.item_type = 'core4'
AND ts.score IS NOT NULL
ORDER BY s.end_date, i.name;
-- 自上次调研以来进步最大的团队(使用vs_prev)
SELECT st.name as team, i.name as metric, MAX(ts.score) as score, MAX(ts.vs_prev) as change
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.name = 'Effectiveness' AND i.item_type = 'core4'
AND st.parent = false
GROUP BY st.name, i.name
ORDER BY change DESC NULLS LAST;Tool Satisfaction Analysis
工具满意度分析
sql
-- Tool satisfaction scores (csat)
SELECT i.name as tool, AVG(ts.score) as avg_satisfaction, COUNT(DISTINCT st.name) as teams_using
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.item_type = 'csat' AND st.parent = false AND ts.score IS NOT NULL
GROUP BY i.name ORDER BY avg_satisfaction ASC;sql
-- 工具满意度分数(csat)
SELECT i.name as tool, AVG(ts.score) as avg_satisfaction, COUNT(DISTINCT st.name) as teams_using
FROM dx_snapshot_team_scores ts
JOIN dx_snapshot_teams st ON ts.snapshot_team_id = st.id
JOIN dx_snapshot_items i ON ts.item_id = i.id AND i.snapshot_id = ts.snapshot_id
WHERE ts.snapshot_id = (SELECT id FROM dx_snapshots ORDER BY end_date DESC LIMIT 1)
AND i.item_type = 'csat' AND st.parent = false AND ts.score IS NOT NULL
GROUP BY i.name ORDER BY avg_satisfaction ASC;Reference Files
参考文档
For detailed schema documentation, read these files:
| Domain | File | When to read |
|---|---|---|
| DX Surveys/Scores | references/developer-experience.md | Survey data, snapshots, team scores, sentiment |
| Teams/Users | references/teams-users.md | Team structure, user profiles, AI adoption dates |
| Pull Requests | references/pull-requests.md | PR metrics, reviews, cycle times |
| Deployments | references/deployments-incidents.md | Deploy frequency, incidents, DORA metrics |
| AI Tools | references/ai-tools.md | AI assistant usage, adoption tracking |
| Issue Tracking | references/jira.md | Issues, sprints, story points |
| Catalog | references/catalog.md | Services, ownership, domains |
| Pipelines/Quality | references/pipelines-quality.md | CI/CD runs, code quality issues |
| Issues | references/issues-github.md | Source control issues, labels |
如需详细的架构文档,请阅读以下文件:
| 领域 | 文件 | 阅读场景 |
|---|---|---|
| DX调研/分数 | references/developer-experience.md | 调研数据、快照、团队分数、情绪分析 |
| 团队/用户 | references/teams-users.md | 团队架构、用户资料、AI采用日期 |
| 拉取请求 | references/pull-requests.md | PR指标、评审、周期时间 |
| 部署 | references/deployments-incidents.md | 部署频率、事件、DORA指标 |
| AI工具 | references/ai-tools.md | AI助手使用情况、采用追踪 |
| 问题追踪 | references/jira.md | 问题、迭代、故事点 |
| 目录 | references/catalog.md | 服务、所有权、领域 |
| 流水线/质量 | references/pipelines-quality.md | CI/CD运行、代码质量问题 |
| 问题 | references/issues-github.md | 源码控制问题、标签 |