Pivot table scaling issue

Hi,


I am facing a scaling problem with PivotView.

When the bound data is very limited, say 6000, everything is fluent.

When the underling goes to 600 000 items, the application is not usable:

1) the data population is very slow 

blazor_pivottable.Pages.Index: Information: [pivot-mkt] PivotEnginePopulating

blazor_pivottable.Pages.Index: Information: [dbg-perf] UI Refresh 600000 Mkt took 00:00:59.4519350

blazor_pivottable.RefreshingCache: Information: Skip UI update, UI is busy

blazor_pivottable.RefreshingCache: Information: Start UI update, UI is busy

blazor_pivottable.Pages.Index: Information: [dbg-perf] UI Refresh STARTS ...

blazor_pivottable.Pages.Index: Information: [pivot-mkt] PivotEnginePopulated

2) click on field list icon takes long time to open the dialog

3) drag and drop field list to configure the pivot table very slow.

4) application brokes:

Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: Error: Unhandled exception in circuit 'k0laMIlEvKcZOB7okgGjZgvuWee05BwCbEBD-4VnM8A'.


System.NullReferenceException: Object reference not set to an instance of an object.

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.GetAxisLength()

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.SeriesRenderer()

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.HandleChartSizeChange(Rect rect)

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRendererContainer.HandleChartSizeChange(Rect rect)

   at Syncfusion.Blazor.Charts.SfChart.UpdateRenderers()

   at Syncfusion.Blazor.Charts.SfChart.OnLayoutChange()

   at Syncfusion.Blazor.Charts.SfChart.DelayLayoutChange()

   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteSynchronously(TaskCompletionSource`1 completion, SendOrPostCallback d, Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c.<.cctor>b__23_0(Object state)

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

--- End of stack trace from previous location ---

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteBackground(WorkItem item)

blazor_pivottable.RefreshingCache: Information: Skip UI update, UI is busy

blazor_pivottable.RefreshingCache: Information: Start UI update, UI is busy

blazor_pivottable.Pages.Index: Information: [dbg-perf] UI Refresh STARTS ...

blazor_pivottable.Pages.Index: Information: [pivot-mkt] PivotEnginePopulating

blazor_pivottable.Pages.Index: Information: [dbg-perf] UI Refresh 600000 Mkt took 00:00:49.3102194

blazor_pivottable.Pages.Index: Information: [pivot-mkt] PivotEnginePopulated

blazor_pivottable.Pages.Index: Information: Disposed

blazor_pivottable.Pages.Index: Information: [dbg-perf] UI Refresh 600000 Mkt took 00:00:33.1504902

Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: Error: Unhandled exception in circuit 'k0laMIlEvKcZOB7okgGjZgvuWee05BwCbEBD-4VnM8A'.


System.Collections.Generic.KeyNotFoundException: The given key 'PrimaryXAxis' was not present in the dictionary.

   at System.Collections.Generic.Dictionary`2.get_Item(TKey key)

   at Syncfusion.Blazor.Charts.Internal.ChartAxisRendererContainer.AssignAxisToSeries(IEnumerable`1 seriesList, Boolean refreshSeries)

   at Syncfusion.Blazor.Charts.SfChart.InitiAxis()

   at Syncfusion.Blazor.Charts.SfChart.RefreshChart()

   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteSynchronously(TaskCompletionSource`1 completion, SendOrPostCallback d, Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c.<.cctor>b__23_0(Object state)

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

--- End of stack trace from previous location ---

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteBackground(WorkItem item)

The attached fake code illustrate the problem in production.

you can use appsettings.json to configure the data size and data refreshing interval:

"dataSize": 600000,
"cycleInSeconds": 30


Can you  please suggest what can I do to improve the performance ?


Many thanks,

Yi


29 Replies

YH Yi Han April 21, 2022 05:39 PM UTC

with attachment


Attachment: PivotScalingProblem_4244a63e.zip


AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team April 22, 2022 02:10 PM UTC

Hi Yi Han,


This problem occurs because the time interval you specified is insufficient to load the 6,00,000 data. However, we are analyzing the reported problem at our end. We will update further details within two business days (April 26, 2022).


Regards,

Angelin Faith Sheeba.



YH Yi Han April 22, 2022 02:45 PM UTC

Hi Angelin Faith Sheeba,


Once you find a way to perf tune the use case with 600 000 items (the data structure in my uploaded code), what's the latency can I expect ?


Thanks,

Yi



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team April 25, 2022 02:50 PM UTC

Hi Yi Han,


We would like to inform you that the virtualization feature only works with data sources that have unique records. As a result, when we offer 1 million data with no unique records, the pivot table renders normally even with virtualization enabled. For this kind of scenario, you can use AllowDataCompression property along with virtualization feature that will increase the component performance on rendering. This AllowDataCompression property allows the given data to be compressed based on the uniqueness of the raw data, and unique records will be used as a data source to the Pivot Table rendering further. These compressed data will then be used throughout the component for further operations. Please refer the code example.


Code Example:

appSettings.json

 

"dataSize": 600000,

  "cycleInSeconds": 15

 


Index.razor

 

<SfPivotView TValue="MarketOrderVm" EnableVirtualization=true AllowDataCompression="true">

</SfPivotView>

 


Meanwhile, we have modified your sample by enabling AllowDataCompression option and increase your time interval to 15s.

Sample: https://www.syncfusion.com/downloads/support/directtrac/general/ze/PivotScalingProblem-294223318


Also, please refer the following documentation for more details about “Data Compression”.

Document: Virtual Scrolling in Blazor Pivot Table Component | Syncfusion


On the other hand, we're working on a sample that will use data compression in the sample itself, which will boost performance even more. We will share you the sample within 2 business days (April 27, 2022).


We appreciate your patience until then. Please let us know if you have any concerns.


Regards,

Angelin Faith Sheeba.



YH Yi Han April 25, 2022 05:05 PM UTC

Hi,


Thanks for your reply.


For me, augmenting or reducing the refreshing interval (cycleInSeconds) should not change the performance. The Refresh skips when UI is busy doing update - please refer to RefreshingCache.cs.



The following exception disappears once EnableVirtualization is disabled.



[18:05:07] fail:


Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: Error: Unhandled exception in circuit 'jbDZ5W84PIa3kBpfgJAeqgrVPAH89MKFuB-5M7m23Vg'.




System.NullReferenceException: Object reference not set to an instance of an object.

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.GetAxisLength()

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.SeriesRenderer()

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.HandleChartSizeChange(Rect rect)

   at Syncfusion.Blazor.Charts.Internal.ChartSeriesRendererContainer.HandleChartSizeChange(Rect rect)

   at Syncfusion.Blazor.Charts.SfChart.UpdateRenderers()

   at Syncfusion.Blazor.Charts.SfChart.OnLayoutChange()

   at Syncfusion.Blazor.Charts.SfChart.DelayLayoutChange()

   at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteSynchronously(TaskCompletionSource`1 completion, SendOrPostCallback d, Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c.<.cctor>b__23_0(Object state)

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

--- End of stack trace from previous location ---

   at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state)

   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)

   at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteBackground(WorkItem item)





1) EnginePopulated




In this thread https://www.syncfusion.com/forums/172612/how-to-update-pivot-table-with-source-data-refreshed, your collegue suggested me using 'EnginePopulated' event to give me the signal that a new refresh can kick in. That's the why `CanUpdateData` is introduced.


With debugging, we can see clearly that UI is displayed several seconds after EnginePopulated being triggered. Please use the console output.


So EnginePopulated might not the green flag to say "ok, now you can kick off a new refreshing" ?




2) EnableVirtualization


According to your doc:


EnableVirtualization

Allows to load the large amounts of data without any performance degradation by rendering rows and columns only in the current content view port. Rest of the aggregated data will be brought into view port dynamically based on vertical or horizontal scroll position.



So with large number of unique row and column headers, all data can't be displayed in the visible zone, EnableVirtualization can improve the performance - this is not my case. So it is useless, right? Further more, there is a bug on EnableVirtualization which prevent the filtering from working correctly: https://www.syncfusion.com/forums/174433/filter-does-not-work-when-enablevirtualization-true?reply=Sg3kRd


3) AllowDataCompression

Does not seem to improve the performance - I tried enable/disable it.


4) The problem 2 and 3 in my initial question are still there.


Please suggest.


Thanks.

Yi



YH Yi Han April 26, 2022 07:17 AM UTC

new code with "Skip refresh pivot view when UI is busy".


Attachment: PivotScalingProblem_46dbd8e2.7z


AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team April 26, 2022 01:46 PM UTC

Hi Yi Han,


As we mentioned in our previous update, we are currently analyzing your requirements and preparing the sample to ensure performance. As a result, we will update the information by tomorrow (April 27, 2022). Until then, we appreciate your patience.


Regards,

Angelin Faith Sheeba.



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team April 27, 2022 02:23 PM UTC

Hi Yi Han,


We have tried to achieve the data compression at the sample level. But we are facing complexity to meet your requirement. As a result, we have consider to improve the performance with data compression at component source itself and logged an improvement task for that, and it will be available in 2022 Vol 2 SP Release which is scheduled to be released in July 2022. You can track the same by using the following link.

  

https://www.syncfusion.com/feedback/34504/improve-pivot-table-performance-with-data-compression


Please let us know if you have any concerns.


Regards,

Angelin Faith Sheeba.



YH Yi Han April 29, 2022 07:33 AM UTC

Hi


Thank you for your reply.


The use case is in our production - in the current state, the view is not usable.

That't why I would like very much to have a solution finding ASAP.

Do you want a production support ticket?

The production support plateform seems broken now: https://support.syncfusion.com/create




Thanks

Yi



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team May 2, 2022 02:35 PM UTC

Hi Yi Han,


We're now working on roadmaps for the 2022 Vol2 main release, and we'll consider your request into account, which is estimated to be rolled out at the end of June 2022.


We appreciate your patience until then.


Regards,

Angelin Faith Sheeba.



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team July 1, 2022 12:15 PM UTC

Hi Yi Han,


Sorry for the inconvenience.


We regret to inform you that, due to its priority and other high priority tasks in the queue, we are unable to consider your requirement in our 2022 Volume 2 main release. However, we will consider this in the Vol 2, SP release which is estimated to schedule at end of July, 2022.


Please let us know if you have any concerns.


Regards,

Angelin Faith Sheeba.



YH Yi Han August 2, 2022 10:49 AM UTC

Hi,


can you please make an update on this? 


Regards,

Yi



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team August 3, 2022 07:55 AM UTC

Hi Yi Han,


We improved the pivot table component's rendering time with the data compression option. And it will be available in our 2022 Volume 2 SP release, which is estimated to be rolled out at mid of August 2022.


We appreciate your patience until then.


Regards,

Angelin Faith Sheeba.



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team August 11, 2022 01:57 PM UTC

Hi Yi Han,


We are glad to announce that our Essential Studio weekly release V20.2.39 is rolled out and the improvement to render pivot table with DataCompression option has been included in this release. Please refer to the following sample.


Sample: https://www.syncfusion.com/downloads/support/directtrac/general/ze/PivotTable-366694193


We thank you for your support and appreciate your patience in waiting for this release. Please contact us if you require any further assistance.


Regards,

Angelin Faith Sheeba.



YH Yi Han August 11, 2022 06:38 PM UTC

Hi, 


thx for your reply

but are you sure that the perf issue is resolved ? 

the app is just hanging ...  

(Index.razor)




YH Yi Han August 11, 2022 06:39 PM UTC

Then ...




RG Rajeshkannah G Syncfusion Team August 12, 2022 01:58 PM UTC

Hi Yu Han,


Sorry for the inconvenience. For your reference, we have modified your sample below. The pivot table will now refresh can be done on setting “dataSize” up to 1M combinational records and a minimum cycle time of 5 seconds. And you can use the Pivot Table component with or without the data compression option enabled to obtain this performance.

Sample: https://www.syncfusion.com/downloads/support/directtrac/general/ze/PivotTable_(4)913600800


Additionally, while executing the Pivot Table component with the field list option enabled, we encounter some performance problems. And currently we are analyzing it at our end. We will update further details within two business days (17-August-2022). Until then, we recommend you to use the Pivot Table component without enabling field list option disabled. However, using the fields panel, which is positioned above the grouping bar and works similarly to the field list UI, you can add and remove fields that are available in the given data source.


To know more about fields panel option, please refer the below document link.


Document: https://blazor.syncfusion.com/documentation/pivot-table/grouping-bar#show-or-hide-fields-panel


Please let us know if you have any concerns.


With regards,


Rajeshkannah Gopalakrishnan



RG Rajeshkannah G Syncfusion Team August 12, 2022 04:09 PM UTC

Hi Yu Han,


Sorry for the inconvenience. For your reference, we have modified your sample below. The pivot table will now refresh can be done on setting “dataSize” up to 1M combinational records and a minimum cycle time of 5 seconds. And you can use the Pivot Table component with or without the data compression option enabled to obtain this performance.


Sample: https://www.syncfusion.com/downloads/support/directtrac/general/ze/PI1929~1-1562706016


Additionally, while executing the Pivot Table component with the field list option enabled, we encounter some performance problems. And currently we are analyzing it at our end. We will update further details within two business days (17-August-2022). Until then, we recommend you to use the Pivot Table component without enabling field list option disabled. However, using the fields panel, which is positioned above the grouping bar and works similarly to the field list UI, you can add and remove fields that are available in the given data source.


To know more about fields panel option, please refer the below document link.


Document: https://blazor.syncfusion.com/documentation/pivot-table/grouping-bar#show-or-hide-fields-panel


Please let us know if you have any concerns.


With regards,

Rajeshkannah Gopalakrishnan




YH Yi Han August 15, 2022 01:54 PM UTC

Hi  Rajeshkannah,


thx for your reply.

https://www.syncfusion.com/downloads/support/directtrac/general/ze/PI1929~1-1562706016 is not the right zip, I think.


With  https://www.syncfusion.com/downloads/support/directtrac/general/ze/PivotTable_(4)913600800: 


with AllowDataCompression=false EnableVirtualization=false:

[15:09:16] fail: Microsoft.Extensions.Hosting.Internal.Host[9] BackgroundService failed System.InvalidOperationException: Collection was modified; enumeration operation may not execute. at System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.MoveNext() at blazor_pivottable.RefreshingCache.Refresh() in D:\PivotTable SYNCFUSION NEW RELEASE\PivotScalingProblem\PivotScalingProblem\RefreshingCache.cs:

line 22 at blazor_pivottable.RefreshingCacheService.ExecuteAsync(CancellationToken stoppingToken) in D:\PivotTable SYNCFUSION NEW RELEASE\PivotScalingProblem\PivotScalingProblem\RefreshingCacheService.cs:line 24 at Microsoft.Extensions.Hosting.Internal.Host.TryExecuteBackgroundServiceAsync(BackgroundService backgroundService)

[15:09:16] crit: Microsoft.Extensions.Hosting.Internal.Host[10] The HostOptions.BackgroundServiceExceptionBehavior is configured to StopHost. A BackgroundService has thrown an unhandled exception, and the IHost instance is stopping. To avoid this behavior, configure this to Ignore; however the BackgroundService will not be restarted. System.InvalidOperationException: Collection was modified; enumeration operation ma

y not execute. at System.Collections.Generic.Dictionary`2.ValueCollection.Enumerator.MoveNext() at blazor_pivottable.RefreshingCache.Refresh() in D:\PivotTable SYNCFUSION NEW RELEASE\PivotScalingProblem\PivotScalingProblem\RefreshingCache.cs:line 22 at blazor_pivottable.RefreshingCacheService.ExecuteAsync(CancellationToken stoppingToken) in D:\PivotTable SYNCFUSION NEW RELEASE\PivotScalingProblem\PivotScali

ngProblem\RefreshingCacheService.cs:line 24 at Microsoft.Extensions.Hosting.Internal.Host.TryExecuteBackgroundServiceAsync(BackgroundService backgroundService)

[15:09:21] info: Microsoft.Hosting.Lifetime[0] Application is shutting down...

Stopping IIS Express ...


with AllowDataCompression=true EnableVirtualization=true :

Still have crash with adding / removing fields/ move field from row to column or reversely:

[15:23:18] fail: Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost[111] => SpanId:0f4a9591ce9bae16, TraceId:356d1d284bd23f3990df3eb0cc6400cf, ParentId:0000000000000000 => ConnectionId:0HMJUO15DK3I9 => RequestPath:/_blazor RequestId:0HMJUO15DK3I9:00000002 => TransportConnectionId:PwzVQ9h2IiQ-pT3QxDMQrA Unhandled exception in circuit 'uqMvPgyPM_E8oTkVVy_euF-S1CPegcV8m6zvy-8Frhk'. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.Charts.Internal.ColumnBaseRenderer.GetSideBySideInfo() at Syncfusion.Blazor.Charts.Internal.BarSeriesRenderer.CalculateColumnPathOption() at Syncfusion.Blazor.Charts.Internal.BarSeriesRenderer.RenderSeries() at Syncfusion.Blazor.Charts.Internal.ChartSeriesRenderer.SeriesRenderer() at Syncfusion.Blazor.Charts.Internal.ChartSe

riesRenderer.HandleChartSizeChange(Rect rect) at Syncfusion.Blazor.Charts.Internal.ChartSeriesRendererContainer.HandleChartSizeChange(Rect rect) at Syncfusion.Blazor.Charts.SfChart.UpdateRenderers() at Syncfusion.Blazor.Charts.SfChart.OnLayoutChange() at Syncfusion.Blazor.Charts.SfChart.DelayLayoutChange() at System.Threading.Tasks.Task.<>c.<ThrowAsync>b__128_0(Object state) at Microsoft.AspNetCore

.Components.Rendering.RendererSynchronizationContext.ExecuteSynchronously(TaskCompletionSource`1 completion, SendOrPostCallback d, Object state) at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.<>c.<.cctor>b__23_0(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previo

us location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at Microsoft.AspNetCore.Components.Rendering.RendererSynchronizationContext.ExecuteBackground(WorkItem item)


Or just let UI to refreshing:

  

System.NullReferenceException: Object reference not set to an instance of an object.

   at Syncfusion.Blazor.PivotView.Internal.Render`1.CalculateGridHeight()

   at Syncfusion.Blazor.PivotView.Internal.GridRenderer`1.OnDataBound()

   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

   at Syncfusion.Blazor.Grids.SfGrid`1.OnAfterRenderAsync(Boolean firstRender)

   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: Error: Unhandled exception in circuit 'Q6EnpByg2Cisunr8koPCvcZYTj3Ut1YP6ORxH2TPkAQ'.


System.NullReferenceException: Object reference not set to an instance of an object.

   at Syncfusion.Blazor.PivotView.Internal.Render`1.CalculateGridHeight()

   at Syncfusion.Blazor.PivotView.Internal.GridRenderer`1.OnDataBound()

   at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task)

   at Syncfusion.Blazor.Grids.SfGrid`1.OnAfterRenderAsync(Boolean firstRender)

   at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)

Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: Warning: Unhandled exception rendering component: Object reference not set to an instance of an object.



Then crashes:

 




ANOTHER important question:

can you provide guideline for upgrading from 19.4.0.48 to 20.2.0.43 ?

Just updating nuget pkg => nothing works.


Thanks!


Yi


Attachment: PivotScalingProblem_Yi_20220815_24bdacf0.zip


RG Rajeshkannah G Syncfusion Team August 16, 2022 12:28 PM UTC

Hi Yi Han,


Query

Response

with 

AllowDataCompression=false EnableVirtualization=false

We regret to inform you that from the provided sample, we are unable to reproduce the reported issue at our end. We have included the sample and video links below for your convenience that have undergone testing at our end.

 

Sample: https://www.syncfusion.com/downloads/support/directtrac/general/ze/PivotScalingProblem1343873317

Video: https://www.syncfusion.com/downloads/support/directtrac/general/ze/PivotScalingIssue-video353727942

with 

AllowDataCompression=true EnableVirtualization=true

We are validating this query at our end and will provide further details within two business days (August 18, 2022). 

 

Can you provide guideline for upgrading from 19.4.0.48 to 20.2.0.43 ?

Please refer the following document links for upgrading latest NuGet package.

 

Document: https://blazor.syncfusion.com/documentation/upgrade/

https://blazor.syncfusion.com/documentation/common/adding-script-references


Please let us know if any concerns occur.


With regards,

Rajeshkannah Gopalakrishnan




YH Yi Han August 16, 2022 02:45 PM UTC

Thank you for your reply.

However, using the fields panel, which is positioned above the grouping bar and works similarly to the field list UI, you can add and remove fields that are available in the given data source.


=> ​ given the poor performance on 1_000_000 data size, even with  20.2.0.43 and <AllowDataCompression=true EnableVirtualization=true >,


this won't be an option - user change the pivot table configuration with moving/add/removing aggregating N times, they wait for the final result of that.

with field panel, after every action, user has to wait => the UI is just unusable.







TK tanu krishna August 16, 2022 04:35 PM UTC

Right-click a cell inside the pivot table. Select “Pivot Table Options…” from the menu. On the Layout & Format tab, uncheck the “Autofit on column widths on update” checkbox. Press OK.



YH Yi Han August 16, 2022 05:25 PM UTC

Hi Tanu Krishna

Are you sure your reply is for this ticket? 

Yi




RG Rajeshkannah G Syncfusion Team August 17, 2022 11:01 AM UTC

Hi Yi Han,


We have examined your query and we would inform you that when data compression and virtualization is enabled, it will take less time to do report manipulations like filtering, sorting, and modifying the aggregation for the bound fields in the report as compared to the initial rendering. However, changing the fields in a report by adding, deleting, or rearranging them takes the same amount of engine population time as initial rendering. And due to the current architecture of our pivot table, only this behavior can be used to update the data in the pivot table.


For 1 milllion “dataSize” for 5 “cycleInSecs” , below are the statistics of time taken to update the pivot table.


 

During initial rendering

 

 

 

Report manipulation by adding/removing or rearranging fields

 

 


Kindly let us know if any concerns occur.


With regards,

Rajeshkannah Gopalakrishnan




YH Yi Han August 17, 2022 01:49 PM UTC

Thank you for your reply.

Additionally, while executing the Pivot Table component with the field list option enabled, we encounter some performance problems. And currently we are analyzing it at our end. We will update further details within two business days (17-August-2022).

=> any update on this?


As I mentioned in the reply August 16, 2022 04:45 PM,  " using the fields panel" is not an option. The batched+differed update with field list UI is a must, given the waiting time 22 sec.


Thank you for mentioning the stats, - that's my stats => you may have more insight on perf issue. If you do, please kindly provide and suggest how to improve the perf more.



SP Sastha Prathap Selvamoorthy Syncfusion Team August 18, 2022 01:52 PM UTC

Hi Yi Han,


Sorry for the delay. We have checked the performance problem that occurs “when using the Pivot Table component with field list option enabled”. Based on the that, we have fixed the reported performance issues in the field list now. And the fix will be available in our upcoming
weekly release, which is scheduled to be released on August 30, 2022.


We hope that the above fix would resolve the reported issue at your end. We appreciate your patience until then.


Regards,

Sastha Prathap S.



AP AngelinFaithSheeba PaulvannanRajadurai Syncfusion Team August 24, 2022 12:21 PM UTC

Hi Yi Han,


We are glad to announce that our Essential Studio weekly release V20.2.45 is rolled out and fix for the reported performance issue
has been included in this release. For your reference, you can also find below screenshots that illustrate the time it takes for the UI to update in comparison to a previous release version.


Screenshot:

Previously

Now


We thank you for your support and appreciate your patience in waiting for this release. Please contact us if you require any further assistance.


Regards,

Angelin Faith Sheeba.



YH Yi Han September 6, 2022 06:04 PM UTC


Thank you for your reply

with the latest  packages:

<PackageReference Include="Syncfusion.Blazor.PivotTable" Version="20.2.0.48" />
<PackageReference Include="Syncfusion.Blazor.Themes" Version="20.2.0.43" />


no issue with 

EnableVirtualization = false


but with:

EnableVirtualization=true


with production data, I've got :


[3]Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: 2022-09-06 18:58:31.7624|0|WARN|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer|Unhandled exception rendering component: The given key '0' was not present in the dictionary. System.Collections.Generic.KeyNotFoundException: The given key '0' was not present in the dictionary. at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at Syncfusion.Blazor.PivotView.Internal.Render`1.GetCellInfo(AxisSet cellData) at Syncfusion.Blazor.PivotView.Internal.PivotCell`2.UpdateRowCellInfo() at Syncfusion.Blazor.PivotView.Internal.PivotCell`2.BuildRenderTree(RenderTreeBuilder __builder) at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer.HandleException [4]Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: 2022-09-06 18:58:31.7842|0|ERROR|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost|Unhandled exception in circuit 'VphVGens9GZNgFCvTRoPQ34JvJyrDzIJ0EbnF5SvPyM'. System.Collections.Generic.KeyNotFoundException: The given key '0' was not present in the dictionary. at System.Collections.Generic.Dictionary`2.get_Item(TKey key) at Syncfusion.Blazor.PivotView.Internal.Render`1.GetCellInfo(AxisSet cellData) at Syncfusion.Blazor.PivotView.Internal.PivotCell`2.UpdateRowCellInfo() at Syncfusion.Blazor.PivotView.Internal.PivotCell`2.BuildRenderTree(RenderTreeBuilder __builder) at Microsoft.AspNetCore.Components.ComponentBase.<.ctor>b__6_0(RenderTreeBuilder builder) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException)|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost.ReportUnhandledException [3]Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: 2022-09-06 18:58:31.8110|0|WARN|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer|Unhandled exception rendering component: Cannot access a disposed object. System.ObjectDisposedException: Cannot access a disposed object. at Microsoft.AspNetCore.Components.RenderTree.ArrayBuilder`1.ThrowObjectDisposedException() at Microsoft.AspNetCore.Components.RenderTree.ArrayBuilder`1.GrowBuffer(Int32 desiredCapacity) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.RemoveOldFrame(DiffContext& diffContext, Int32 oldFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.RemoveOldFrame(DiffContext& diffContext, Int32 oldFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.ComputeDiff(Renderer renderer, RenderBatchBuilder batchBuilder, Int32 componentId, ArrayRange`1 oldTree, ArrayRange`1 newTree) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException) at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer.HandleException [4]Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: 2022-09-06 18:58:31.8344|0|ERROR|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost|Unhandled exception in circuit 'VphVGens9GZNgFCvTRoPQ34JvJyrDzIJ0EbnF5SvPyM'. System.ObjectDisposedException: Cannot access a disposed object. at Microsoft.AspNetCore.Components.RenderTree.ArrayBuilder`1.ThrowObjectDisposedException() at Microsoft.AspNetCore.Components.RenderTree.ArrayBuilder`1.GrowBuffer(Int32 desiredCapacity) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.RemoveOldFrame(DiffContext& diffContext, Int32 oldFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.RemoveOldFrame(DiffContext& diffContext, Int32 oldFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForFramesWithSameSequence(DiffContext& diffContext, Int32 oldFrameIndex, Int32 newFrameIndex) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.AppendDiffEntriesForRange(DiffContext& diffContext, Int32 oldStartIndex, Int32 oldEndIndexExcl, Int32 newStartIndex, Int32 newEndIndexExcl) at Microsoft.AspNetCore.Components.RenderTree.RenderTreeDiffBuilder.ComputeDiff(Renderer renderer, RenderBatchBuilder batchBuilder, Int32 componentId, ArrayRange`1 oldTree, ArrayRange`1 newTree) at Microsoft.AspNetCore.Components.Rendering.ComponentState.RenderIntoBatch(RenderBatchBuilder batchBuilder, RenderFragment renderFragment, Exception& renderFragmentException) at Microsoft.AspNetCore.Components.RenderTree.Renderer.ProcessRenderQueue()|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost.ReportUnhandledException [3]Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: 2022-09-06 18:58:31.8489|0|WARN|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer|Unhandled exception rendering component: Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.PivotView.SfPivotView`1.InvokeFailureAsync(Exception exception) at Syncfusion.Blazor.PivotView.SfPivotView`1.OnAfterScriptRendered() at Syncfusion.Blazor.SfBaseComponent.OnAfterRenderAsync(Boolean firstRender) at Syncfusion.Blazor.SfDataBoundComponent.OnAfterRenderAsync(Boolean firstRender) at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer.HandleException [4]Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: 2022-09-06 18:58:31.8620|0|ERROR|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost|Unhandled exception in circuit 'VphVGens9GZNgFCvTRoPQ34JvJyrDzIJ0EbnF5SvPyM'. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.PivotView.SfPivotView`1.InvokeFailureAsync(Exception exception) at Syncfusion.Blazor.PivotView.SfPivotView`1.OnAfterScriptRendered() at Syncfusion.Blazor.SfBaseComponent.OnAfterRenderAsync(Boolean firstRender) at Syncfusion.Blazor.SfDataBoundComponent.OnAfterRenderAsync(Boolean firstRender) at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost.ReportUnhandledException [3]Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: 2022-09-06 18:58:31.8804|0|WARN|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer|Unhandled exception rendering component: Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.PivotView.Internal.Render`1.CalculateGridHeight() at Syncfusion.Blazor.PivotView.Internal.GridRenderer`1.OnParametersSetAsync() at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task) at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer.HandleException [4]Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: 2022-09-06 18:58:31.8906|0|ERROR|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost|Unhandled exception in circuit 'VphVGens9GZNgFCvTRoPQ34JvJyrDzIJ0EbnF5SvPyM'. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.PivotView.Internal.Render`1.CalculateGridHeight() at Syncfusion.Blazor.PivotView.Internal.GridRenderer`1.OnParametersSetAsync() at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task) at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost.ReportUnhandledException [3]Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer: 2022-09-06 18:58:31.8906|0|WARN|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer|Unhandled exception rendering component: Object reference not set to an instance of an object. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.PivotView.Internal.GridRenderer`1.OnParametersSetAsync() at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task) at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)|Microsoft.AspNetCore.Components.Server.Circuits.RemoteRenderer.HandleException [4]Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost: 2022-09-06 18:58:31.9139|0|ERROR|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost|Unhandled exception in circuit 'VphVGens9GZNgFCvTRoPQ34JvJyrDzIJ0EbnF5SvPyM'. System.NullReferenceException: Object reference not set to an instance of an object. at Syncfusion.Blazor.PivotView.Internal.GridRenderer`1.OnParametersSetAsync() at Microsoft.AspNetCore.Components.ComponentBase.CallStateHasChangedOnAsyncCompletion(Task task) at Microsoft.AspNetCore.Components.RenderTree.Renderer.GetErrorHandledTask(Task taskToHandle, ComponentState owningComponentState)|Microsoft.AspNetCore.Components.Server.Circuits.CircuitHost.ReportUnhandledException



YH Yi Han September 6, 2022 06:11 PM UTC

Hi,


Tried excel export feature following https://blazor.syncfusion.com/documentation/pivot-table/excel-export, but it does not work.


Loader.
Up arrow icon