Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Get Fabric Certified for FREE during Fabric Data Days. Don't miss your chance! Request now

Reply
Hieudao
Frequent Visitor

Power BI Custom Visual – update() function resets dataView to 30k rows after drill up/down

Hi everyone,

I'm developing a custom visual for Power BI, and I’m encountering an issue related to fetchMoreData() and the update() lifecycle when using drill up / expand down.

----------------------------------------------------------------------------------------------------------------------------------------

🔍Expected behavior:
Normally, when I load data, I use this.host.fetchMoreData() to retrieve all rows in batches of 30k until lastCall becomes undefined.

  • Example:
    • 1st call → 30k rows
    • 2nd call → 60k rows
    • 3rd call → 90k rows
    • Final → 105k rows, lastCall: undefined

When I drill up, I expect the visual to update with the correct dataset (e.g. 52,608 rows).

----------------------------------------------------------------------------------------------------------------------------------------

⚙️Current behavior / Problem:
When I navigate back to the page and perform a drill up or expand down one level, I notice the following sequence:

  1. Data returns correctly (52,608 rows, lastCall: undefined)
  2. Immediately after, update() is called again
  3. dataView resets to only 30,000 rows and here the columns is correct and the previous data is still column has not cleared the field I drill up
  4. Columns and rows revert to the initial structure
  5. fetchMoreData() is not called again, so I’m stuck with 30k rows.

Note: This only occurs when I return to the page and perform a drill up or drill down. During report development, everything works normally — meaning it only happens during the visual initialization when navigating back to the page and executing a drill up or drill down.

Console log shows:

 

Hieudao_0-1762880272364.png

 

----------------------------------------------------------------------------------------------------------------------------------------

🧠 Snippet (simplified)

 

Hieudao_1-1762880280168.png

 

----------------------------------------------------------------------------------------------------------------------------------------

Question:
Why does the visual’s update() function trigger again after drill up/down with a smaller dataset (e.g. 52k rows), but then reset dataView to 30k rows?

Is there a known behavior or timing issue with Power BI’s fetchMoreData() and update() events when navigating between pages or hierarchy levels?

How can I prevent update() from reinitializing the visual when data is already fully fetched?

----------------------------------------------------------------------------------------------------------------------------------------

I look forward to your help, thanks

7 REPLIES 7
Hieudao
Frequent Visitor

Hi everyone,
I am developing a Power BI Custom Visual and am getting a dataView related error when the user goes to page navigation and then back:

Symptom:

  • When the user drills down/up on the visual, Microsoft Fabric/Power BI returns the wrong dataView — specifically, it only returns a maximum of 30,000 rows, even though the original dataset is larger and the visual was displaying correctly before.
  • The error only occurs after changing pages (e.g., from Page 1 to Page 2 and then back to Page 1).
  • Before changing pages, the visual works normally (drill up/down returns correct data).

Video Bugs: https://drive.google.com/file/d/1ucCUaHpmQ06V6noZtgaqIBHSX9mQwPeN/view?usp=drive_link
Image: 

Hieudao_0-1762964720249.pngHieudao_1-1762964738532.pngHieudao_2-1762964753546.png

More details about the error: https://community.fabric.microsoft.com/t5/Developer/Power-BI-Custom-Visual-update-function-resets-da...
I need help. Thanks for watching. If you know, please help me.
Thanks.

v-aatheeque
Community Support
Community Support

Hi @Hieudao 

Thanks for the detailed explanation. Just to clarify the behavior

The behavior occurs only during the visual reinitialization phase after page navigation. During report development or normal refresh, the visual functions correctly. However, upon returning to the page, Power BI rehydrates the visual with a truncated dataView (limited to 30,000 rows), leading to incorrect drill up/down behavior.

 

Could you confirm:

  • Is your custom visual configured with a "dataReductionAlgorithm": { "window": { "count": 30000 } } limit in your capabilities.json?
  • Are you using import mode or DirectQuery mode for the dataset?
  • When navigating back to the page, does Power BI trigger update() immediately with a partial dataset ?
  • If you manually call this.host.fetchMoreData() on page return, does Power BI respond with additional rows, or does it stay at 30k?

Hi @v-aatheeque 

I will answer your questions:
1. In capabilities.json file I configured "dataReductionAlgorithm": { "window": { "count": 30000 } }

Hieudao_0-1762959175242.png

2. I import data from excel workbook
3. yes, when i go back to the page with 105k data it will call 30k - 59k - 89k - 105k in turn.

4.  When I returned to the page containing the custom visual, Power BI started returning data in chunks through multiple calls to the update() function.

Specifically, the data was returned in the following order:

Cast 1: Columns: 6, Rows: 30,000

Cast 2: Columns: 6, Rows: 52,000

(loading…)

Cast 3: Columns: 5, Rows: 30,000

However, when I drilled up, the actual correct data for the dataset at that level was 52,000 rows.

So:

Cast 1 and 2, the number of columns was wrong but the number of rows was right.

Cast 3, the number of columns was right but the number of rows was wrong.
Sumary: 

When returning to the Power BI page, the custom visual receives multiple update() calls with inconsistent data. The data is returned in chunks (30k → 59k → 89k → …), and when drilling up, the number of columns and rows between update() calls do not match.

Specifically:

1st & 2nd times: columns are wrong, rows are right.

3rd time: columns are right, rows are wrong.
The actual correct data should be 52k rows with 5 columns.
Thanks

Hi @Hieudao 

Thanks for sharing such detailed explanation.
The configuration confirms that Power BI is applying a windowed data reduction of 30,000 rows. This behavior is by design in Power BI.

When you drill up/down or navigate back to the page, Power BI reinitializes the visual and sends a fresh dataView starting from the first 30k rows. Even if you previously fetched all rows (105k), the visual does not persist that state across page navigation.

The inconsistent columns/rows you observed (6 columns → 5 columns, 30k rows → 52k rows → back to 30k rows) happen because drill changes alter the schema (columns).

To fix fetching data:

In update(options), check options.type:
If VisualUpdateType.All or VisualUpdateType.Data → clear previous cache and start fetching again.
Always assume update() after drill or navigation is a fresh start.

 

Hope this helps !!

Thank You

Hi @Hieudao 

Have you had a chance to look through the responses shared earlier? If anything is still unclear, we’ll be happy to provide additional support.

Hi @Hieudao 

Following up to confirm if the earlier responses addressed your query. If not, please share your questions and we’ll assist further.

Helpful resources

Announcements
November Power BI Update Carousel

Power BI Monthly Update - November 2025

Check out the November 2025 Power BI update to learn about new features.

Fabric Data Days Carousel

Fabric Data Days

Advance your Data & AI career with 50 days of live learning, contests, hands-on challenges, study groups & certifications and more!

FabCon Atlanta 2026 carousel

FabCon Atlanta 2026

Join us at FabCon Atlanta, March 16-20, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.