When and Why to Use
Use these to save calculated values into your survey data so they show up in reporting, just like answers to real questions.
- store_value() saves a single value (like a derived age or score) as a named calculated variable
- store_values() saves a list of values as a calculated multi-select variable
Common use cases include:
- Calculating age from birth year
- Storing a derived score
For survey logic — branching, filtering, termination — keep using normal Python variables instead of retrieving stored reporting values. Both functions also return the stored value, so you can store a value and keep working with it in one step.
store_value(name, value, tags)
Stores a single scalar value as a calculated variable. Returns the stored value as a typed response value (StringResponse, IntResponse, or BoolResponse).
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | str | yes | Name to assign to the stored value |
| value | str, int, or bool | yes | Value to store, often calculated from a previous answer |
tags | s.tag() | no | Used for grouping and metadata in reporting |
store_values(name, values, tags)
Stores a list of values as a calculated multi-select variable — useful when the derived value naturally has more than one entry, such as a set of brands a respondent qualifies for, or a list of segments they belong to. Returns the stored list as a ListResponse.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | str | yes | Name to assign to the stored values |
| values | list of str, int, or bool | yes | List of values to store |
tags | s.tag() | no | Used for grouping and metadata in reporting |
Example Code
Single value:
from datetime import datetime
from survey import Survey
s = Survey(**globals())
birth_year = s.numeric_question("What year were you born in?", min_max=(1920, 2020))
# Keep the calculated value in a normal Python variable for survey logic...
age = datetime.now().year - birth_year
# ...and store it so it also appears in reporting.
s.store_value("age", age)
s.terminate_if(age < 18, "Sorry, this survey is for adults 18 and older.")
List of values:
from survey import Survey
s = Survey(**globals())
known = s.multi_select_question(
"Which brands have you heard of?",
options=["Acme", "Globex", "Initech", "Umbrella"],
)
considering = s.multi_select_question(
"Which would you consider buying?",
options=known,
)
# Save the intersection as a derived multi-select variable.
# (The sandbox does not allow the set() builtin, so use a comprehension.)
s.store_values("aware_and_considering",
[brand for brand in known if brand in considering],
tags=s.tag(source="derived"))
Notes
- store_value can be used multiple times to keep track of intermediate calculations
- store_values produces a multi-select variable in reporting, just like a real multi-select question would
- For survey logic, keep using normal Python variables (as in the examples above) rather than retrieving stored reporting values
- You can apply tags for each stored value to categorize them in your reporting schema

