Answer detail
Every answer to every question, in long format, with question and matrix-row text attached.
- Grain
- qualtrics_account x response x question x sub question x response_index
- Built from
- 5Raw tables
- 5Staging
- 1Core
- 1Analytics
- Reads from Qualtrics
- questionquestion_responsesub_questionsurveysurvey_response
- Ships as
- Weld and dbt SQL, open source on GitHub
1-- core.qualtrics.answer_detail
2-- Every answer to every question, in long format, with question and matrix-row
3-- text attached.
4-- Grain: qualtrics_account x response x question x sub question x response_index.
5-- A single-answer question is one row; a multi-select answer is one row per choice
6-- selected; a matrix answer is one row per matrix row (sub question).
7-- Depends on: staging.qualtrics.question_response, .survey_response, .question,
8-- .sub_question, .survey
9--
10-- Test, preview and spam responses are kept but flagged with `is_test_or_spam`;
11-- filter on it for anything that should match Qualtrics' reports.
12--
13-- For an answer distribution, count rows per `response_label` for one question
14-- (and one `sub_question_key` on a matrix). For a multi-select question the counts
15-- add up to more than the number of respondents; divide by
16-- COUNT(DISTINCT response_id) for the share of respondents choosing each option.
17
18SELECT
19 a.qualtrics_account,
20 r.survey_id,
21 s.survey_name,
22 a.response_id,
23 r.recorded_at,
24 DATE(r.recorded_at) AS recorded_date,
25 r.is_finished,
26 r.is_test_or_spam,
27 r.distribution_channel,
28
29 a.question_id,
30 q.question_name,
31 q.question_text,
32 q.question_type,
33 q.selector,
34 a.sub_question_key,
35 sq.sub_question_text,
36 a.response_index,
37
38 -- The exported value (a choice's recode, or the typed text) and the label the
39 -- respondent saw. Use the label for display and the value for arithmetic.
40 a.response_value,This model and the 6 it depends on. Deploy them together; refs like {{staging.…}} resolve to the matching folders in Weld, and the dbt view uses source() and ref().
How it counts. And where it stops.
Test, preview and spam responses are kept but flagged with `is_test_or_spam`; filter on it for anything that should match Qualtrics' reports. For an answer distribution, count rows per `response_label` for one question (and one `sub_question_key` on a matrix). For a multi-select question the counts add up to more than the number of respondents; divide by COUNT(DISTINCT response_id) for the share of respondents choosing each option.
Raw tables it reads
- raw.qualtrics.question
- raw.qualtrics.question_response
- raw.qualtrics.sub_question
- raw.qualtrics.survey
- raw.qualtrics.survey_response
More Qualtrics models
Put Qualtrics in front
of your agents.
Connect Qualtrics, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.