Power BI Dynamic Subscriptions and Data Driven Report Delivery
Your monthly reports are ready. One customer wants a PDF by email; another needs an Excel workbook in an SFTP folder. Both expect their own figures, filenames and supporting reports.
PBRS uses your customer data to prepare and deliver each version—including complete report packages. Supported Power BI Pro and PPU workflows can do this without adding Premium or Fabric capacity.
- The monthly customer pack When every customer asks for something different
- Let the data decide Personalize the whole delivery with PBRS Inserts
- Bring the reports together Build a complete package for each recipient
- For developers Connect your application to the reporting process
- Your next step Test the delivery your customers actually need
When every customer asks for something different
The first request sounds straightforward: send every customer their monthly service report. Then the account managers explain what “send” means. Some customers need their finance contact copied. Others want a different message, a named worksheet or delivery into their own secure folder. A few need an invoice summary and an outstanding-jobs report alongside the service figures.
That is where PBRS data-driven scheduling becomes useful. Your delivery records can describe what each customer should receive and how it should arrive. PBRS reads those instructions, generates the appropriate output and delivers it. When a contact or folder changes, you update the driving data instead of rebuilding a separate schedule.
What a Power BI dynamic subscription does
A native dynamic subscription personalizes a report using a recipient semantic model: a Power BI model containing email addresses and the values to map to report filters. It can also take the subject and attachment choice from data. For a team that needs a different view of one report in each inbox, that can be a useful fit.
Native dynamic subscriptions for standard Power BI reports require a Premium- or Fabric-capacity workspace. A PPU license alone does not meet that requirement. The creator also needs Build permission on the recipient model and an appropriate workspace role. Microsoft documents a 1,000-recipient-row limit and single-value dynamic filters in its dynamic subscription guide.
What changes with PBRS
PBRS extends the instructions beyond the recipient and filtered report. A SQL or JSON data driver can supply the information used to name, format, secure, assemble and route the delivery. You do not need to buy capacity just to make that business process possible: PBRS supports applicable Pro and PPU configurations using alternative report-generation methods.
You still need the appropriate Power BI access and a PBRS license. Choose a supported rendering method for your report type; PBRS does not remove Microsoft’s limits from a workflow that explicitly uses Microsoft’s native export API. The practical benefit is that capacity is not a blanket prerequisite for PBRS personalized distribution.
Start with the finished delivery
Ask what the customer should receive: one filtered report, a workbook or a complete monthly pack. That answer makes the difference between native dynamic email and PBRS much easier to assess.
Personalize the whole delivery with PBRS Inserts
Imagine a customer record that contains an account number, the finance contact, the reporting month and an agreed delivery location. In PBRS, Inserts lets you place those values into the relevant schedule fields. You choose the field from the Inserts panel rather than writing a separate script to substitute it each time.
The same customer number can filter the report, appear in the filename and identify the destination folder. The contact’s name can turn a generic notification into a helpful message: “Hello Sam, your September service pack is attached, including the open jobs we discussed.”
What the data driver can control
- The report and its contents. Supply report selections, Power BI filters and supported paginated-report parameters, so each customer receives the information intended for them.
- The files people open. Drive filenames, supported output formats and Excel worksheet tab names. A workbook can arrive with meaningful tabs rather than names someone has to tidy up afterward.
- The conversation around the report. Populate To, CC and BCC separately, along with the subject, greeting and email body. The customer’s finance team can receive the file while their account manager gets the appropriate copy.
- The delivery route. Use the records to drive configured destination types and their final locations: email for one customer, an FTP or SFTP folder for another, or an agreed storage location.
- The connection behind that route. Supported insert-enabled fields can take mail-server details and credentials, FTP/SFTP credentials and destination paths from the driving data. A customer-specific connection can therefore be part of the delivery instructions, not an extra script maintained elsewhere.
- The protection applied to the output. Use recipient-specific passwords and supported security settings where the selected format allows them. The customer’s workbook or PDF can be protected before delivery.
These are configured PBRS capabilities. Inserts works across supported fields throughout the scheduling workflow; it is not confined to replacing an email address. Set up the destinations and their mappings first, and check the available Inserts options for each field and report type.
Inserts can supply more than a customer record
The PBRS Inserts guide also covers built-in dates and schedule values, user-defined constants, database lookups through Data Items, and reusable message or signature defaults. Supported report-parameter values and event data are available in their relevant schedule types. Custom constants can include formulas and optional JavaScript when a calculated value is needed.
For the monthly pack, that means you can combine the customer’s account number with the reporting period and a consistent signature. Routine personalization does not require custom code. Keep connection credentials in a restricted source and out of filenames, messages and diagnostic output.

A change in the data can change the delivery
When a customer appoints a new finance contact, update the record that PBRS reads. The configured To, CC, message and destination mappings then use the new values on the next run.
Build a complete package for each recipient
Now the customer asks for the service summary, outstanding jobs and invoice detail together. Three separate emails leave them to decide whether the pack is complete. A PBRS data-driven package lets you define the reports as one delivery process.
The driver can determine which reports belong in an individual recipient’s package and supply the filters or parameters for each. PBRS generates the selected reports, collates the results and sends the customer their package. The next customer can receive a different combination, with their own data and delivery instructions.
Choose how the pack should arrive
For a customer who wants to read the results, combine the PDF outputs into one ordered document. For a finance team that needs to work with the numbers, merge compatible Excel outputs into one workbook with named tabs. You can also deliver separate attachments or a ZIP package when keeping the original files is more useful.
PBRS includes options to protect the resulting files. Apply password protection to the final merged workbook or configure the supported PDF security settings for the finished document. This keeps assembly and protection within the reporting job rather than leaving someone to complete them manually.
When several driver records belong to the same email recipient, PBRS can group their reports. Grouping can also merge supported PDF or Excel outputs. That grouping option disables embedding reports in the email body, so choose deliberately between a grouped attachment delivery and an embedded report presentation.
Why Power Automate becomes harder here
A native Power BI dynamic subscription does not provide this recipient-specific, multi-report package assembly. You can build a broader process in Power Automate, but you must design the recipient loop, generate the right reports, wait for their exports, keep each customer’s files together and assemble the final delivery.
Then come the less visible requirements: what happens if the second report fails, how to avoid sending an incomplete pack, how to merge or protect files, and how to retry without duplicating deliveries. Those requirements add actions, expressions, connectors or scripts that someone must maintain as reports and customer instructions change.
PBRS is the better fit when that reporting work is the main job. Data-driven packages, output merging and delivery settings are built into the product. For standard Power BI reports, Power Automate’s Export to File route also inherits the native API’s capacity requirement; using a flow does not make that export available to a Pro-only workspace.
The PBRS report packages overview shows the available package approaches. PBRS works with reports published to Power BI Service, Power BI Report Server and SSRS; it does not schedule exports directly from Power BI Desktop.

One customer, one complete pack
Test the whole delivery: the selected reports, their order, the customer’s data, the workbook tabs and the final destination. A successful export of the first report does not establish that the package is complete.
Connect your application to the reporting process
If your customer portal already knows who should receive the monthly pack, the PBRS API gives your application a way to manage the reporting configuration. Your application supplies the business instructions; PBRS handles the configured report production and delivery.
You can use the PBRS interface without writing code. For developers who need an integration, the example below shows how a JSON driver and a report filter connect. It deliberately keeps the customer record visible, so the relationship is easy to follow.
Developer example: connect a package data driver to a report filter
This first fragment belongs inside a complete PBRS package definition. It supplies one test record; it is not a complete create request. ValuesJson contains a serialized JSON array, so build the records as objects and serialize them when preparing your request.
{
"DataDriven": true,
"DataDriver": {
"DataDriverType": 1,
"KeyField": "delivery_id",
"ValuesJson": "[{\"delivery_id\":\"101\",\"customer_id\":\"C104\",\"recipient_email\":\"review@example.com\"}]"
}
}
In the appropriate Power BI report definition within that package, the customer filter can use the current driver record:
{
"BasicFilters": [
{
"TargetField": "Customers.CustomerId",
"FieldDataType": "String",
"FilterLevel": 0,
"Operator": "In",
"BasicValues": [
"<[r]customer_id>"
],
"IgnoreBlankDataDrivenInserts": false
}
]
}
Replace Customers.CustomerId with the real model field. Here, <[r]customer_id> supplies C104 from the current row. Configure delivery separately: including recipient_email in the driver does not automatically map it to an email destination.
Use the documented schema for each destination and output setting. The filter insert syntax shown here is not a promise that every API field accepts the same expression. Preserve the complete package, report and destination configuration when updating an existing job.
Follow Create and Manage Report Packages and Configure Filters, Parameters, Bookmarks and Rendering for the supported request structures. Read the saved configuration back, run it to a controlled destination, then inspect the execution result and finished files before using customer addresses.
Whether the instructions come from SQL or your application’s JSON, give every driver row a stable identifier. It provides a useful reference when someone asks which record produced a particular pack.
Keep the business rule visible
A record should make it clear which customer receives which reports. The API is a way to supply and manage those instructions; it should not hide them inside a growing collection of one-off scripts.
Test the delivery your customers actually need
Start with two customers whose requirements differ. Give one an emailed PDF pack and the other an Excel workbook in a test SFTP folder. Use approved test addresses and credentials, then open the finished outputs as the recipients would.
Check the customer data in every report, not just the cover page. Confirm the filenames, worksheet tabs, To/CC/BCC recipients, message, connection and final folder. Try a missing customer identifier and a failed report, too: decide how the job should handle them before it runs unattended. Filtering is not a substitute for access control.
If all you need is one personalized report by email and you already have the required capacity, native dynamic subscriptions may be enough. When the requirement includes different destinations, connection details or a complete report pack for each person, PBRS gives you a more manageable place to keep the process—and supports appropriate Pro/PPU workflows without adding capacity.
Explore personalized Power BI report distribution with PBRS, or see how it fits into Power BI Report Automation. Use the evaluation guide to plan a test with your own customer deliveries.
Contributors:
Christian Ofori-Boateng
CEO, ChristianSteven Software