Worth knowing before you build a report on one.
A multi-select cell holding two values is stored and matched as a single string. So an equality filter finds only the rows where that value stands alone:
json
{ "filters": [{ "columnName": "Content Theme",
"operator": "EQUAL",
"columnValue": "World News & Research" }] }
Result: 1 row (expected: 2)
Two rows carry that theme. The second holds [Data Sharing, World News & Research], which is a different string, so it does not match.
Grouping works the same way, and the output is more convincing because it arrives as a clean breakdown:
Content Theme
General 8
(blank) 5
World News & Research 1
Data Sharing, World News & Research 1
The same theme is counted in two places, so no single line shows the true total.
Each distinct combination becomes its own category. Multi-contact columns do the same: one person owning four rows shows up as two groups of two, because two of those rows name a second owner alongside them.
The tool that gives you the right answer is find_in_sheet, because it matches inside the cell rather than against the whole of it:
json
{ "request": { "term": "World News & Research" } }
occurrences: 2
[World News & Research]
[Data Sharing, World News & Research]
So: equality filters and group_by for single-value columns, find_in_sheet when the column allows more than one value. If you have already built something on the first approach, the counts are a floor rather than a total.
How are you handling multi-select in your reporting?