If the recipients are not BO users, then you would have to use Dynamic Recipients. In this case, the filtering logic would occur in the report rather than in the query. So, instead of putting the filtering in the WHERE clause, the applicable object (region?) would need to be brought into the report as a result object. In the Publication settings, you would then associate the Region object in the main report with the one in the secondary report. The query will run once, and the result will be filtered for each recipient.
If the recipients are BO users (and each user’s email address is set), then you have more options. You can use a publication with Enterprise Recipients. Or, you can skip Publications entirely and just use a regular WebI schedule. In this case, you would apply row-level security in the universe. You would have a table in the database that is referenced in the universe, containing a mapping of user ID to region. In the universe, there would be a mandatory predefined condition similar to:
security.user_id = @variable('BOUSER')
and it would be joined to the main table like:
security.region = fact.region
Thus, when any user refreshes the report, they are only seeing their own region.
When the schedule is set up, you would use the “Schedule For” page to select the users, either individually or by group. In the Destination settings, the recipient email address would be set to %SI_EMAIL_ADDRESS%. Now, when the schedule executes, the report will refresh once for each user, and each user will receive their own customized report.
If you already have, or can easily create, the mapping table I described, then I would recommend the second method above. Publications are much more powerful than regular schedules, but they can sometimes be tricky to manage.
joepeters (BOB member since 2002-08-29)