473,416 Members | 1,530 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,416 software developers and data experts.

Speed up report performance

Hi!

I have an Access 97 report based on tables linked to an SQL back end.
The report has 5 subreports in it (unfortunately unavoidable due to the
nature of the report) and performance is quite slow. The query runs
quickly and the report displays the first page in a short amount of
time, but takes quite a while to format each page. This means it takes
a long time to print the report (up to 50 mins to print around 360
pages!) as it formats each page.

My main report has some controls that hide or change captions depending
on the values of other controls on the report, as well as one level of
grouping (both header and footers for that grouping). I have tried to
minimize the number of changes that are done on the fly in the report
and I have experimented with the 'Keep Together' options of my
grouping. My subreports link to the main report by a key that is a
combination of two fields (calculated in the query for the main
report), but is not indexed since it's calculated at run-time. We only
have read access to the SQL back end (it's part of a proprietary
program).

My question is this: Would it be faster to write the data to temp
tables, thereby allowing me to create an index on my key field, and
then base the report/sub reports on local tables rather than linked
tables? What about putting just the objects required for this report
in it's own front end? Are there any other tricks I could use to
improve the formatting speed? This is a complex report, but certainly
not the MOST complex thing I've ever written, so I'm at a loss as to
how to make it better.

Thanks in advance,
Jana

Jan 18 '07 #1
4 7189
Jana wrote:
>I have an Access 97 report based on tables linked to an SQL back end.
The report has 5 subreports in it (unfortunately unavoidable due to the
nature of the report) and performance is quite slow. The query runs
quickly and the report displays the first page in a short amount of
time, but takes quite a while to format each page. This means it takes
a long time to print the report (up to 50 mins to print around 360
pages!) as it formats each page.

My main report has some controls that hide or change captions depending
on the values of other controls on the report, as well as one level of
grouping (both header and footers for that grouping). I have tried to
minimize the number of changes that are done on the fly in the report
and I have experimented with the 'Keep Together' options of my
grouping. My subreports link to the main report by a key that is a
combination of two fields (calculated in the query for the main
report), but is not indexed since it's calculated at run-time. We only
have read access to the SQL back end (it's part of a proprietary
program).

My question is this: Would it be faster to write the data to temp
tables, thereby allowing me to create an index on my key field, and
then base the report/sub reports on local tables rather than linked
tables? What about putting just the objects required for this report
in it's own front end? Are there any other tricks I could use to
improve the formatting speed? This is a complex report, but certainly
not the MOST complex thing I've ever written, so I'm at a loss as to
how to make it better.

The most important performance factor is to index the
linking fields and the fields with criteria in the subreport
record source queries. If you have to use temporary tables
to do that, then I suggest that you put the temp tables in a
temporary mdb on the front end machine and link to them.

Of lesser importance is to avoid using Pages (e.g. a text
box with: =Page & " of " & Pages) and, if feasible, Whole
Group KeepTogether that will usually be forced to the start
of a page. Also make sure the subreport record source
queries do not have an Order By clause.

--
Marsh
Jan 18 '07 #2
Marshall:
Thanks for the input. I'll set up temp tables for my data on the front
end and index the key. For the record, I don't have any page numbering
or any Whole Group keep together settings, but I do have the records
sorted on my subreport (which is required for the report).

I will set up my temp tables and see how that does for me.

Thanks again!
Jana
Marshall Barton wrote:
Jana wrote:
I have an Access 97 report based on tables linked to an SQL back end.
The report has 5 subreports in it (unfortunately unavoidable due to the
nature of the report) and performance is quite slow. The query runs
quickly and the report displays the first page in a short amount of
time, but takes quite a while to format each page. This means it takes
a long time to print the report (up to 50 mins to print around 360
pages!) as it formats each page.

My main report has some controls that hide or change captions depending
on the values of other controls on the report, as well as one level of
grouping (both header and footers for that grouping). I have tried to
minimize the number of changes that are done on the fly in the report
and I have experimented with the 'Keep Together' options of my
grouping. My subreports link to the main report by a key that is a
combination of two fields (calculated in the query for the main
report), but is not indexed since it's calculated at run-time. We only
have read access to the SQL back end (it's part of a proprietary
program).

My question is this: Would it be faster to write the data to temp
tables, thereby allowing me to create an index on my key field, and
then base the report/sub reports on local tables rather than linked
tables? What about putting just the objects required for this report
in it's own front end? Are there any other tricks I could use to
improve the formatting speed? This is a complex report, but certainly
not the MOST complex thing I've ever written, so I'm at a loss as to
how to make it better.


The most important performance factor is to index the
linking fields and the fields with criteria in the subreport
record source queries. If you have to use temporary tables
to do that, then I suggest that you put the temp tables in a
temporary mdb on the front end machine and link to them.

Of lesser importance is to avoid using Pages (e.g. a text
box with: =Page & " of " & Pages) and, if feasible, Whole
Group KeepTogether that will usually be forced to the start
of a page. Also make sure the subreport record source
queries do not have an Order By clause.

--
Marsh
Jan 19 '07 #3
Sorting a report via Sorting and Grouping is normal. The
point I was trying to make is that sorting in a report's
**record source query** is a waste of time. Just make sure
the record source queries do not have an ORDER BY clause.

Putting temp tables in your front end MDB file might be a
major clause of bloat. This in turn forces you to have a
robust backup procedure so you can be safe during the more
frequent compact operations you will need to perform.

For details of how to use a temporary database to hold the
temp tables, see:
http://www.granite.ab.ca/access/temptables.htm

You may also want to browse Tony's Performace FAQ at:
http://www.granite.ab.ca/access/performancefaq.htm
--
Marsh
Jana wrote:
>Thanks for the input. I'll set up temp tables for my data on the front
end and index the key. For the record, I don't have any page numbering
or any Whole Group keep together settings, but I do have the records
sorted on my subreport (which is required for the report).

I will set up my temp tables and see how that does for me.

Marshall Barton wrote:
>Jana wrote:
>I have an Access 97 report based on tables linked to an SQL back end.
The report has 5 subreports in it (unfortunately unavoidable due to the
nature of the report) and performance is quite slow. The query runs
quickly and the report displays the first page in a short amount of
time, but takes quite a while to format each page. This means it takes
a long time to print the report (up to 50 mins to print around 360
pages!) as it formats each page.

My main report has some controls that hide or change captions depending
on the values of other controls on the report, as well as one level of
grouping (both header and footers for that grouping). I have tried to
minimize the number of changes that are done on the fly in the report
and I have experimented with the 'Keep Together' options of my
grouping. My subreports link to the main report by a key that is a
combination of two fields (calculated in the query for the main
report), but is not indexed since it's calculated at run-time. We only
have read access to the SQL back end (it's part of a proprietary
program).

My question is this: Would it be faster to write the data to temp
tables, thereby allowing me to create an index on my key field, and
then base the report/sub reports on local tables rather than linked
tables? What about putting just the objects required for this report
in it's own front end? Are there any other tricks I could use to
improve the formatting speed? This is a complex report, but certainly
not the MOST complex thing I've ever written, so I'm at a loss as to
how to make it better.


The most important performance factor is to index the
linking fields and the fields with criteria in the subreport
record source queries. If you have to use temporary tables
to do that, then I suggest that you put the temp tables in a
temporary mdb on the front end machine and link to them.

Of lesser importance is to avoid using Pages (e.g. a text
box with: =Page & " of " & Pages) and, if feasible, Whole
Group KeepTogether that will usually be forced to the start
of a page. Also make sure the subreport record source
queries do not have an Order By clause.
Jan 19 '07 #4
Marshall:

Ahhhh....I missed that when I first read your response with respect to
a temp db rather than just temp tables in my front end. I'll also
double check my queries for Order By clauses and delete as needed.
Thanks for the clarification, I'll check out the links you've given me.

Thanks much,
Jana
Marshall Barton wrote:
Sorting a report via Sorting and Grouping is normal. The
point I was trying to make is that sorting in a report's
**record source query** is a waste of time. Just make sure
the record source queries do not have an ORDER BY clause.

Putting temp tables in your front end MDB file might be a
major clause of bloat. This in turn forces you to have a
robust backup procedure so you can be safe during the more
frequent compact operations you will need to perform.

For details of how to use a temporary database to hold the
temp tables, see:
http://www.granite.ab.ca/access/temptables.htm

You may also want to browse Tony's Performace FAQ at:
http://www.granite.ab.ca/access/performancefaq.htm
--
Marsh
Jana wrote:
Thanks for the input. I'll set up temp tables for my data on the front
end and index the key. For the record, I don't have any page numbering
or any Whole Group keep together settings, but I do have the records
sorted on my subreport (which is required for the report).

I will set up my temp tables and see how that does for me.

Marshall Barton wrote:
Jana wrote:
I have an Access 97 report based on tables linked to an SQL back end.
The report has 5 subreports in it (unfortunately unavoidable due to the
nature of the report) and performance is quite slow. The query runs
quickly and the report displays the first page in a short amount of
time, but takes quite a while to format each page. This means it takes
a long time to print the report (up to 50 mins to print around 360
pages!) as it formats each page.

My main report has some controls that hide or change captions depending
on the values of other controls on the report, as well as one level of
grouping (both header and footers for that grouping). I have tried to
minimize the number of changes that are done on the fly in the report
and I have experimented with the 'Keep Together' options of my
grouping. My subreports link to the main report by a key that is a
combination of two fields (calculated in the query for the main
report), but is not indexed since it's calculated at run-time. We only
have read access to the SQL back end (it's part of a proprietary
program).

My question is this: Would it be faster to write the data to temp
tables, thereby allowing me to create an index on my key field, and
then base the report/sub reports on local tables rather than linked
tables? What about putting just the objects required for this report
in it's own front end? Are there any other tricks I could use to
improve the formatting speed? This is a complex report, but certainly
not the MOST complex thing I've ever written, so I'm at a loss as to
how to make it better.
The most important performance factor is to index the
linking fields and the fields with criteria in the subreport
record source queries. If you have to use temporary tables
to do that, then I suggest that you put the temp tables in a
temporary mdb on the front end machine and link to them.

Of lesser importance is to avoid using Pages (e.g. a text
box with: =Page & " of " & Pages) and, if feasible, Whole
Group KeepTogether that will usually be forced to the start
of a page. Also make sure the subreport record source
queries do not have an Order By clause.
Jan 19 '07 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

5
by: Tony Clarke | last post by:
Hi, Background: I have written a Call Logging and Reporting System using PHP that integrates with an existing MS Access Database. The information in the database is all held in flat tables...
16
by: Shailesh Humbad | last post by:
I posted this article I wrote a couple weeks ago, but I've completely updated it, with new sections on the performance of 'bursting' GetRows and GetString. If you're interested: ...
2
by: Wouter | last post by:
Hi, I was wandering. Does the query speed also depend on the colums that you don't use in the query (so not in the where and not in the select part). I have a lange unused backup field in...
30
by: Mike Cox | last post by:
Hi. I recently ran a benchmark against two simple programs, one written in Java and the other in C++. The both accomplish the same thing, outputting "Hello World" on my screen. The C++ program...
4
by: Richard Hollenbeck | last post by:
The following query takes about one second to execute with less than 1,000 records, but the report that's based on it takes from 15-30 seconds to format and display. That's frustrating for both me...
3
by: Mike Kelly | last post by:
Hi. I've built a page using standard ASP.NET 2.0 features and when I upload a large file (>20MB) to our intranet server, I get a paltry 100KB/s on our 100Mb/s LAN. Simply copying the file, I get...
2
by: jphelan | last post by:
Ever since I successfully applied some techniques for increasing the speed of my 17 meg. Application; it has only made me hunger for more. First, let me list what I have done so far: 1. Split...
45
by: charles.lobo | last post by:
Hi, I have recently begun using templates in C++ and have found it to be quite useful. However, hearing stories of code bloat and assorted problems I decided to write a couple of small programs...
0
by: MattGaff | last post by:
I have a Web server running Reporting Services which has (all of a sudden) dropped in performance. When a user logs in, they are presented with an initial report (Main Menu) which provides links to...
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...
0
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.