Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CRW_REF.PDF
Скачиваний:
5
Добавлен:
13.02.2015
Размер:
13.99 Mб
Скачать

This report displays the running total in each group.

Related Topics

How to create group headers, Page 313

Formulas 101, Page 321

Advanced Formulas, Page 345

Reporting 101, Page 95

How to subtotal without grouping

The value in each record is added to the sum of the previous value in the report.

The running total starts fresh with each new group.

The final running total for each group becomes the subtotal for that group (Header total).

There may be times when you have a list of values that are ungrouped, and you only want to subtotal some of the values in the list. For example:

you have a list that contains both Canadian and US customers,

you want to keep customer records sorted alphabetically based on customer name,

you do not want to break the data into groups based on the country, but

384

Seagate Crystal Reports User’s Guide

you want a total of the values from just the Canadian records, and

you also want a total of the values from just the US records.

To do this you will need to create three formulas, one to keep track of US and Canadian records, one to print the US total, and one to print the Canadian total.

1.USCan

Maintains separate running totals of US and Canadian records.

2.PrintUSA

Prints the grand total of US records.

3.PrintCanada

Prints the grand total of Canadian records.

NOTE: To see an example of this report, open the SUBTOTL.RPT file in the \CRW directory.

To get started, create a report using the sample data, CRAZE.MDB, and place the following fields from left to right in the Details section:

{customer.CUSTOMER NAME} {customer.COUNTRY} {customer.LAST YEAR'S SALES}

Sort the records based on the {customer.CUSTOMER NAME} field.

!Create the formula USCan and enter the following in the Formula Editor:

If {Customer.Country} = “Canada” Then RT (“CanadaAmount”, “Sum”,

ToNumber({Customer.Last Year's Sales}), {Customer.Customer Name})

Else If {Customer.Country} = “USA” Then RT (“USAAmount”, “Sum”,

ToNumber({Customer.Last Year's Sales}), {Customer.Customer Name})

Else 0

Advanced Totalling

385

This formula says look at each record:

If the value in the {customer.COUNTRY} field is “Canada”, add the value in the {customer.LAST YEAR’S SALES} field to the value in the CanadaAmount variable.

If the value in the {customer.COUNTRY} field is “USA”, add the value in the {customer.LAST YEAR’S SALES} field to the value in the USAAmount variable.

If the value is something other than “Canada” or “USA”, print 0.

"Place this formula in the Details section, just to the right of the {customer.LAST YEAR’S SALES} field.

NOTE: It is critical that you place this formula in the Details section. Since the formula has to evaluate each record, it has to run every time the program prints a record and that happens only if you place it in the Details section. See Area printing

characteristics, Page 69.

#Create the PrintCanada formula and enter the following in the Formula Editor:

RT (“CanadaAmount”, “Fetchsum”, ToNumber({Customer.Last Year's Sales}),““)

This formula says to print, as a total, the value in the CanadaAmount variable.

$Place this formula in the Report Footer section, just below the Last Year’s Sales field.

NOTE: It is critical that you place this formula in the Report Footer section so it gets evaluated and printed just once, at the end of the report. This will provide you with a total of all the US values for the entire report. See Area printing characteristics, Page 69.

%Create the PrintUSA formula and enter the following in the Formula Editor:

RT (“USAAmount”, “Fetchsum”, ToNumber({Customer.Last Year's Sales}),““)

This formula says to print, as a total, the value in the USAAmount variable.

386

Seagate Crystal Reports User’s Guide

Place this formula in the Report Footer section, just to the right of the @PrintCanada formula.

NOTE: Just as before, it is critical that you place this formula in the Report Footer section.

Your report should look similar to the following:

NOTE: This example report has been designed to illustrate concepts only, not the actual look of your finished report.

How to subtotal true A to B, A to C reports

The term A to B, A to C report has been used to refer to any report in which a primary table is linked to two lookup tables (see

Methods of looking up tables (direct access databases), Page 532). However, in a true A to B, A to C link, a single field in the primary table is used to link to both of the lookup tables.

In a true A to B, A to C relationship, one of the two lookup tables usually has more records than the other. If you group these records based on a field in the primary table, values in the smaller

Advanced Totalling

387

lookup table are repeated for each value in the larger lookup table. The following table shows data for an A to B, A to C relationship. The Customer table is linked to the Credits table and again to the Orders table. Notice that Jones has only one Credit ID, but that credit and its amount are repeated, once for each of Jones’ two orders.

Name

Credit ID

Credit

Order ID

Order

Amount

Amount

 

 

 

 

 

 

 

 

 

 

 

 

 

Jones

1

-10.00

1

10.00

 

 

 

 

 

Jones

1

-10.00

2

12.00

 

 

 

 

 

 

 

 

 

 

Smith

2

-23.00

3

20.00

 

 

 

 

 

Smith

3

-45.00

4

30.00

 

 

 

 

 

Using a standard subtotal on these groups for both the Order Amount field and the Credit Amount field, the single credit for Jones is counted twice, and the subtotal displays an inaccurate value of -20.00. It should only count this value once and display a subtotal of -10.00 because that is the total credit Jones has.

Name

Credit ID

Credit

Order ID

Order

Amount

Amount

 

 

 

 

 

 

 

 

 

 

 

 

 

Jones

1

-10.00

1

10.00

 

 

 

 

 

Jones

1

-10.00

2

12.00

 

 

-20.00

 

22.00

 

 

 

 

 

 

 

 

 

 

Smith

2

-23.00

3

20.00

 

 

 

 

 

Smith

3

-45.00

4

30.00

 

 

-68.00

 

50.00

 

 

 

 

 

NOTE: Notice that the total Credit Amount for Jones is incorrect.

This problem would also occur in the Order Amount field if, for instance, Jones had two different Credit Amounts and only one Order Amount. You can avoid this problem by creating a formula for each field you want subtotaled, and placing the formula in the Group Footer (GF).

388

Seagate Crystal Reports User’s Guide

NOTE: For an example of this report, open the TRUEABAC.RPT file in the \CRW directory.

To get started, create a report using the sample data, ORDRCR.MDB, and place the following fields from left to right in the Details section:

{cust.NAME} {credits.CREDIT ID} {credits.CREDIT AMOUNT} {orders.ORDER ID} {orders.ORDER AMOUNT}

NOTE: The sample data in ORDRCR.MDB has been specially designed to demonstrate a true A to B, A to C link. Make sure that the {credits.CUST} field is linked to both the {orders.CUSTOMER} and {cust.NUMBER} fields in the Visual Linking Expert.

In the Design Tab, highlight the {orders.ORDER AMOUNT} field and insert a subtotal, grouping on the {cust.NAME} field.

!Create a second subtotal for {credits.CREDIT}, again grouping on {cust.NAME}.

"Click the Preview Tab, and notice that the {credits.CREDIT AMOUNT} subtotal for Jones is twice as large as it should be (there is only one credit for Jones, but it appears twice, once for each order).

#Create a new formula, named Credits Subtotal. Enter the following in the Formula Editor:

DistinctCount({credits.CREDIT ID}, {cust.NAME}) * Average({credits.CREDIT}, {cust.NAME})

This formula says:

Count the number of actual credits given to the customer in {cust.NAME}. Multiply this value by the average of all credit amounts displayed in the report for the customer in {cust.NAME}.

Advanced Totalling

389

Jones has only one credit. The average of all of the credit amounts displayed for Jones is -10.00 (-10.00 + -10.00 = -20.00, -20.00 / 2 = -10.00).

$Click Accept in the Formula Editor and place the formula in the Group Footer (GF) section next to the subtotal on the {credits.CREDIT AMOUNT} field.

%Notice that the new formula-based subtotal produces the correct result. Delete the original, incorrect subtotal for the {credits.CREDIT AMOUNT} field.

Related Topics

Formulas 101, Page 321

Advanced Formulas, Page 345

Reporting 101, Page 95

390

Seagate Crystal Reports User’s Guide

16 Parameter Fields

What you will find in this chapter...

Parameter field objects overview, Page 392

Multiple parameter fields, Page 393

Parameter field considerations, Page 393

HANDS-ON (Parameter Field Objects), Page 394

Parameter Fields

391

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]