If the personalization info you need is in an all subscribers attribute, you dont need it to be in the data extension, just use the personalization strings you indicated.
Personalization strings always check for a match on all subscribers profile attributes as well as the DE audience.
If they are not, you can use ampscript functions in the body of the email to pull from wherever the data is located.
Supposing that firstname is a column in a DE called 'subscribers', and that this DE has an 'emailaddress' column you could do this:
%%[
set @email = [email address]
set @firstname = Lookup('subscribers','firstname','emailaddress',@email)
]%%
This lookup function basically says return the value of firstname from the DE 'subscribers' where emailaddress equals this specific subscribers email address, then assign that value to @firstname.
To have it write to the html, instead of %%firstname%%, write:
%%=v(@firstname)=%%
Regarding your data filter question: I dont believe you can filter on tracking data with a data view without a solution like Audience builder.
You could, however, build a query activity and join in whatever columns were needed. This would return all the subscribers who meet your criteria:
select subscriberkey from _click
where jobid = 12345
where linkcontent like 'http://http://%'
From that point, you'd want to add an inner join, likely on subscriber key, to include whatever other columns you'd like in your sendable DE.
Ok not sure if this is going to help, but may be your only route. I have briefly used Discover and did not like it. It seemed way more complicated to use than it should be, and slow. If you have Automation Studio go there and write some query activities to do this. Set up a data extension for you to write to. You may need several data extensions as this can get very complex, fast. It's easier to break the queries up into smaller pieces rather than write one very complex query.
See the screenshots above. A Query can either be an Overwrite, an Update, or an Append. You usually start with an Overwrite as your first query. You might start with a very simple query that does one thing, then subsequent queries will use an Update and fill in the data. To make it really easy on yourself, each query can grab one piece of data. In order to do this, the Data Extension will need to have a Primary Key. Usually that's going to be a JobID.
Here is a set of queries I did for Content Reporting. It's not exactly what you're doing, but if it should help. The instructions are here
https://github.com/garek007/Marketing-Cloud/blob/master/README.md
The queries are here:
https://github.com/garek007/Marketing-Cloud/tree/master/content-reporting/sql
Best Answer
You have to determine the combination of content each subscriber receives with AMPScript, store it in an AMPScript variable and and include that variable name as a column in the Send Log. Once you've started collecting the data, you can aggregate the tracking data, either from the System Data Views or Data Extract of Tracking Data imported back into Data Extensions.
You can also use Impression Regions and the corresponding canned report, but you can't (easily) use dynamic names for your regions.