<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Helenyue</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Helenyue"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Helenyue"/>
	<updated>2026-08-13T04:42:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_Experience/Proposal_DataPilot_byIBM&amp;diff=133001</id>
		<title>User Experience/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_Experience/Proposal_DataPilot_byIBM&amp;diff=133001"/>
		<updated>2009-06-25T08:45:18Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Summary */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{User Experience Community}}&lt;br /&gt;
&lt;br /&gt;
= DataPilot UX Design Proposal by IBM =&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&amp;lt;P&amp;gt;Symphony team start to develop/enhance DataPilot feature since Symphony 1.1, and still working to improve it. To improve user experience to use DataPilot, we designed&amp;amp;developed new user interface in the releases, including:&amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt; New DataPilot table: Show a predefined new table to users avoid the meaningless table which have nothing.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;DataPilot panel: Users can work with fields there and update the changes automatically.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Filter panel: The filter panel make users can filter items of fields directly in the DataPilot table. Some useful functions are added here, e.g. search items, show only the current item. Users can also set to show &amp;amp;quot;Top n&amp;amp;quot; items in this panel.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Dialogs: Improve the information architecture and UI controls of the dialogs, e.g. field options, sort.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Editing and reading mode: Provide two modes for the different scenarios: edit the DataPilot table and show the table to others.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== New DataPilot table ==&lt;br /&gt;
When users create a new DataPilot table, before they add any fields to table, a predefined table will be there. The table give users some clues about the areas of the table and how to start the work. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony NewDataPilotTable.gif‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DataPilot panel ==&lt;br /&gt;
The DataPilot panel will list all fields from the source data. The field will turn to be a button when users hover on it. Users can drag&amp;amp;drop the fields to the areas to assign them. Users can also modify the sequences or remove the fields via drag&amp;amp;drop in the panel.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony HoverOnField.gif]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The changes on DataPilot panel will be updated automatically, so that users can get the result immediately. Users can also disable it and manually update by themselves when there are large amount of data.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony EditDataPilotTable.gif‎‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Filter panel ==&lt;br /&gt;
&amp;lt;P&amp;gt;Users can show or hide items via the filer panel which can be accessed directly on the table. &amp;quot;Top n&amp;quot; is integrated on this panel so that users can show the top/bottom n items quickly. &amp;lt;/P&amp;gt;&lt;br /&gt;
&amp;lt;P&amp;gt;If users hide any items(or set Top n) on a filed, the filter button beside the filed within table will turn to a special style, so that users can know which items have been filtered quickly.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony DataPilot Filter.gif‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;P&amp;gt;Users can locate to certain item quickly via the search function of the panel. It is useful when there are lots of items of a field. They can also show/hide certain item quickly when they just want to make a single selection there. &amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony DataPilot Filter 2.gif‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dialogs ==&lt;br /&gt;
The information architecture and UI controls of the dialogs have been improved, e.g. field options, sort.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony DataPilot Dialog.gif‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Editing and reading mode ==&lt;br /&gt;
&amp;lt;P&amp;gt;When users focus on the DataPilot table, it will be editing mode and users can get the DataPilot panel and fields buttons within table automatically. Users can modify the table conveniently via these UI. When users focus out of the table, it will be reading mode and the DataPilot panel and fields buttons within table will be hided automatically, so that users can show the DataPilot table to others clearly.&amp;lt;/P&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Editing mode: DataPilot panel and field buttons within table will be shown automatically.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony EditDataPilotTable.gif‎‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Reading mode: DataPilot panel and field buttons within table will be hided automatically.&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
| [[Image:Symphony DataPilot TableReadingMode.gif‎‎‎]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132814</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132814"/>
		<updated>2009-06-23T15:16:00Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= DataPilot Performance Enhancement I =&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]], [[User:helenyue|Helen Yue]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Result ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Code Analysis ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then we scan and debug the code, get three root causes for the performance issue:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution Description ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132812</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132812"/>
		<updated>2009-06-23T15:11:06Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Solution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]], [[User:helenyue|Helen Yue]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Result ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Code Analysis ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then we scan and debug the code, get three root causes for the performance issue:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution Description ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132811</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132811"/>
		<updated>2009-06-23T15:10:03Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Analysis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]], [[User:helenyue|Helen Yue]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Result ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Code Analysis ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then we scan and debug the code, get three root causes for the performance issue:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132810</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132810"/>
		<updated>2009-06-23T15:09:27Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]], [[User:helenyue|Helen Yue]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Result ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then we scan and debug the code, get three root causes for the performance issue:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132809</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132809"/>
		<updated>2009-06-23T15:08:14Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Analyzing result */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Result ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Analysis ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then we scan and debug the code, get three root causes for the performance issue:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132808</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132808"/>
		<updated>2009-06-23T15:06:26Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Test Data */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Result ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Analyzing result ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then scan and debug the code, get three cause:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132807</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132807"/>
		<updated>2009-06-23T15:05:59Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Problem Description */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Test Data ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
We defined 6 scenario, and test it to a sample DataPilot table which have 5000 rows as data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0. Scenario 3 and 4 showed big delays to generate the table, while another office product can complete all the scenarios within 3 seconds.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 70%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
== Analyzing result ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then scan and debug the code, get three cause:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132806</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132806"/>
		<updated>2009-06-23T14:59:43Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: /* Background */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; {| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
&lt;br /&gt;
|- align=&amp;quot;left&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; bgcolor=&amp;quot;#cccccc&amp;quot;   | &amp;#039;&amp;#039;&amp;#039;Specification Status&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Author&amp;#039;&amp;#039;&amp;#039; || width=&amp;quot;150&amp;quot; |[[User:wangxum|Wang Xu Ming]]&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Last Change&amp;#039;&amp;#039;&amp;#039; || width =&amp;quot;150&amp;quot;|See wiki history&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
== Background==&lt;br /&gt;
DataPilot is a critical function to Spreadsheet users. In Symphony 1.2 and 1.3 release, IBM Lotus Symphony Spreadsheet team developed the new UI and some new features for DataPilot based on OpenOffice 1.1 code base and also with some code merged from OpenOffice 2.4.&lt;br /&gt;
&lt;br /&gt;
With our new UI, users can drag and drop to generate the DataPilot table based on the page/column/row/data fields, and change the structure easily. Furthermore, the function like DataPilot usually will process thousands of data records. Performance is one of our major focus. &lt;br /&gt;
&lt;br /&gt;
During the development, test team found that there was serious performance problem when user create or update a DataPilot table. This specification will describe what performance issues we have found, and the enhancement we did on the algorithm that created and output a DataPilot table. Although the code base (2.4 and 3.1) is different, the solution should also apply to the new code base.&lt;br /&gt;
&lt;br /&gt;
We are currently merging the code to OpenOffice.org 3.1 code base and will continue the enhancement work.&lt;br /&gt;
&lt;br /&gt;
== Problem Description ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Low performance when update a datapilot table&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Test team tested several operations to a sample DataPilot table which have 5000 rows data source. &lt;br /&gt;
&lt;br /&gt;
Test environment: Hardware: IBM T30  CPU: 2.4 GHz  Memory:1.0 GB Operation System: Window XP SP2&lt;br /&gt;
&lt;br /&gt;
Below table is the test result to OpenOffice 3.0.0:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0;  border: 1px #cccccc solid; border-collapse: collapse; width: 50%&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot; | &amp;#039;&amp;#039;&amp;#039;Test Scenario&amp;#039;&amp;#039;&amp;#039;|| width=&amp;quot;150&amp;quot; bgcolor=&amp;quot;#dddddd&amp;quot;|&amp;#039;&amp;#039;&amp;#039;Open Office 3.0.0&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1 &lt;br /&gt;
Action: - Add Product to Row &lt;br /&gt;
|| 3.15s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:- Product ID to Data &lt;br /&gt;
|| 3.06s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product to Row &lt;br /&gt;
|| 25.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 3  Row: 3   Data: 1&lt;br /&gt;
Action:- Add Product ID to Data &lt;br /&gt;
|| 44.21s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 2   Data: 3&lt;br /&gt;
Action:- Add SalesRep to Data &lt;br /&gt;
|| 6.28s&lt;br /&gt;
|-&lt;br /&gt;
| Page: 1  Column: 2  Row: 1   Data: 1&lt;br /&gt;
Action:-Change the function of Revenue from Sum to Max &lt;br /&gt;
|| 6.03s&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Crash&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Insert two field into row area ( Each field have about 1000 members ),causes freezing and crash.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Analyzing result ==&lt;br /&gt;
First, create a complex layout DataPilot table, and use rational quantify create a report for its performance.&lt;br /&gt;
&lt;br /&gt;
[[Image:quantify report.jpg]]&lt;br /&gt;
&lt;br /&gt;
From above table, we can see the top three &amp;quot;F time (% of Focus)&amp;quot; functions:&lt;br /&gt;
&lt;br /&gt;
* new &lt;br /&gt;
* OutputDevice::DrawLine&lt;br /&gt;
* SfxItemSet::==&lt;br /&gt;
&lt;br /&gt;
Then scan and debug the code, get three cause:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate a lot of abundant data&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For a simple datapilot table:&lt;br /&gt;
&lt;br /&gt;
[[Image:simple dptable.jpg]]&lt;br /&gt;
&lt;br /&gt;
Member A1 in L1 field will create an array for all members {B1,B2,B3}. But only B1 is visible and valid.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Allocate too much memories&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Every member&amp;#039;s data is stored in a big structure.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Set too many times of border styles for output area&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Some borders are set twice or more.&lt;br /&gt;
&lt;br /&gt;
== Solution ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Data Source buffer&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
A document stored a source buffer array. Every table have a buffer id. The datapilot table can use the same id if they have same data source.&lt;br /&gt;
&lt;br /&gt;
In the buffer, the members of a field can be identified by an id( the sorted index ).&lt;br /&gt;
&lt;br /&gt;
Then in the output table&amp;#039;s algorithm the ScDPItemData structure is replaced by an id.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Only allocate visible member&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Enhance the algorithm of setting border style&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132233</id>
		<title>Calc/Proposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Calc/Proposal_DataPilot_byIBM&amp;diff=132233"/>
		<updated>2009-06-19T09:25:40Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: New page: Background  Problem Description   Solution&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Background&lt;br /&gt;
&lt;br /&gt;
Problem Description&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solution&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_Experience/Proroposal_DataPilot_byIBM&amp;diff=131537</id>
		<title>User Experience/Proroposal DataPilot byIBM</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_Experience/Proroposal_DataPilot_byIBM&amp;diff=131537"/>
		<updated>2009-06-12T08:46:22Z</updated>

		<summary type="html">&lt;p&gt;Helenyue: New page: This is a placeholder for DataPilot by IBM&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a placeholder for DataPilot by IBM&lt;/div&gt;</summary>
		<author><name>Helenyue</name></author>
	</entry>
</feed>