Really, this is a problem most easily solved with a traditional RDBMS, like PostgreSQL/MySQL.
However, there are a few ways you could do this in Redis.
One way would be to simply store attributes for each vote in a hash.
redis.hmset "vote:123", "age", 26, "abortion", "yes", "gun_control", "undecided" #, ...
You would also want a redis SET (ie: "all_votes") containing all the vote ids, so you don't have to use redis.keys
to search for votes.
The next step is making other sets. If you want to be able to look up by age ranges quickly, you will probably need to build a SET (ie: "vote_indexes:age:18-22") for each age range, populating it with the ids of any votes within that age range. Every time you add a vote or remove a vote you will need to add or remove them to/from the all_votes SET as well as its corresponding age range SET, and any other index SETs you build. If this sounds a lot like database indexes, it is exactly like that. Except you have to maintain them yourself, so that is quite a bit of extra code you wouldn't have to write with an RDBMS.
Now that you have your index sets, you can perform intersections of those sets to do some querying.
redis.sinter("indexes:age:18-22", "indexes:abortion:yes").count
# => 20
Instead of manually maintaining your own hand-built indexes, you could go the route of simply iterating through every vote and build the report as you go, hopefully in one pass. This would be pretty slow to implement within your application. The most performant option would likely be to use Lua scripting running within redis. Basically your Lua script would get passed to redis with the filter parameters and it would iterate through all votes and do the filtering, returning the matching results or even a final report.
That of course means you'll have to learn Lua. Its a nice little language and not difficult to pick up, but its a bit harder than a language you probably already know: SQL.
I love Redis, but not sure you have the need for it. An adhoc reporting system is something SQL was literally made for. Don't worry about performance issues until you have them. You'll be surprised how far SQL can get you. If you do hit some performance problems, Redis is an amazing way to cache your SQL results and give your RDBMS a break.