Columns

The Value input area

Enter here what you want go in each row (or chunk title) of the report. You can mix text and fields as desired. Simply click where you want to insert the next thing. For example, the Notes column in the Sign-in Sheet report is blank, and its Activity/Time column contains two fields and a Space.

The text can also include HTML. This is the how Badge Labels report makes the names in the labels be a large font, for example.

Arithmetic Expressions

A value can include an arithmetic expression. For example, suppose you had hours_worked and pay_rate signup fields. If you created a column whose Value was !s.hours_worked! * !s.pay_rate! = Total Pay and whose Alignment/Trim was $num.nn, the column would contain each person's pay (e.g. 4 hours worked at $7.30/hr would lead to $29.20 = Total Pay in that row of the Pay column).

An arithmetic expression is initiated by: numeric field followed by arithmetic operator (e.g. *). Note that time values are not considered numeric values.

If the thing after such a pair is not numeric, "Not legal expression" will be reported. If a value consists of non-numeric-field operator numeric-field, the same thing will happen unless the operator can be a unary operator (e.g. + or -). Note that most unary operators are simply absorbed... so +3 renders as 3 for example.

Field Insertion

To insert a field, choose from one of the dropdown menus. If you later decide to delete a field from a value, it is your responsibility delete the !'s and all the characters between them.

The Person's dropdown menu ends with all the registration-form field names your group has created. The Signup's dropdown menu ends with all the signup-form field names your group has created.

Additionally these menus provide access to the fields that are in all PRESTO databases. Most of these are self-explanatory, but the few that are not are discussed in the following sections.

The Person's->Signups and # of Signups choices

The 1st inserts an unnumbered list containing all the signups relevant to the current row. The 2nd inserts the number of signups relevant to the current row. (Note: it makes little sense to put these fields in a row-per-signup report because each row is about just 1 signup in the first place).

The signups in each person's row are determined as follows. If an is-about item of the report identifies signups, only those signups are in the list. Otherwise all of her signups with the default signup status are in the list.

The Order property of Person's->Signups is special. It controls the order of the signups in the list, rather than the order of rows in the overall report. Ascending means sort the list earliest to latest date. Descending means the reverse. Unsorted means sort by ascending activity name.

(Note: since its Order property does not affect the order of rows in the overall report, it makes no sense to make Person's->Signups a Title Term).

Name-related Choices from Person's Menu

Name and Name with ()'s are fairly similar items in the Person's menu. Loosely speaking, use the 1st for public reports and the latter for reports only seen by administrators. In other words, use the latter choice when you want to insure that each person in the report is shown with a unique name.

Name and Address inserts a 3-line address: "pretty" name; street; and city/state/zip.

The Rep/Sharers item is used when you want to identify everyone sharing the signup. When explicit sharing applies, this item inserts the names of all the sharers. When sharing is by people having the same Representing field value, this item inserts that value. If neither applies, this item inserts the person's public-reports name.

Time-Related choices from Schedule Item's menu

When Info works as follows. A planning item inserts just a date. An on-site item inserts both a date and start time, and an end time and intro if any. However in a calendar, dates are suppressed since a row's date is implied by its location in the calendar.

For planning schedule items, choices based on Start Time (i.e Just Its Start Time, Duration, and Period) insert a Blank. An on-site item's duration is in hours, including fractions thereof. In particular, on-site schedule items without an end time insert .25 for Duration (i.e. 15 minutes).

Service-Related choices from Schedule Item's menu

Service is always blank for a regular signup. For a signup to a sliceable activity, the rules are:

Sort Order

If you had a Person Name column, you would normally set its Order to Ascending so that people in the beginning of the alphabet would appear first. If you had a report containing test scores, you would probably want the best scores first (100, 98, 94, 94, etc). This is called Descending order. When the order of values in a column does not matter, set the column's Order to Unsorted.

When there are multiple sorted columns in a report, the leftmost column changes value slowest, the next one over the next slowest, and so on.

Sort Mechanics

There is a processing difference between the two sort examples above. The Person Name sort was a left-to-right alphabetic sort and the Score sort was a numeric sort. (In other words, 100 sorts before 98 because it is numerically larger, even though 1 is alphabetically before 9).

PRESTO does a numeric sort if a column includes a single numeric expression or variable — even if the column definition includes plain text. For example, whether a column value is defined to be !s.numval! or any !s.numval! text, it would sort the same.

Alphabetic sorts are case-insensitive — "A" sorts the same as "a". Even so, such sorts are still "tempermental": because characters are looked at one at a time and non-letters matter. For example, "1 Sesame    St" would sort before "1 Sesame Rd" because there are multiple spaces before "St" and the Space character sorts before the R character.

Special-Case Sorts and the Sort On dropdown menu

Each of thhe following fields is special cased when it is the only field in a column:

Sometimes as a matter of taste, you want a column to contain multiple fields, but be sorted on just one of them. For example, if a column's value is activity-name start-time and you want to sort it on just start-time, you would set the Sort On dropdown menu to 2nd field. Also, if the chosen field is numeric, it will be a numeric sort. See the Sign-in Sheet report for an example of this.

Sort On=HIDDEN

Sometimes the normal Sort On options cannot handle a special case sorting situation. For example, suppose you want column 1 of a report to be a person's name and column 2 the answer to a Yes/No question. Further suppose that despite this, you want all the Yes answers to precede all the No answers.

To handle this case, precede the other two columns with a column whose value is the Yes/No field, whose sort-on setting is Hidden, and whose sort order is Descending.

Hidden unsorted columns have a use too. They can be used to:


Column Header

Any header text you provide will be output in the 1st row of each page of a Tabular report. If you leave the Header field of all columns blank, there will be no header row at all.

Column Footer

Unless all columns specify None, a footer row will be output at the bottom of each chunk of a Tabular report. The footer options you have are:

Note: If a non-numeric column's footer option is Sum or Average, the numeric value of each of its rows is derived as follows. If a value starts with a number, that number is used, else 0 is used. For example, if a column contained a Menu field whose values were "1 ticket" or "2 tickets", the value of each row would be 1 or 2. But if its values were "Tickets: 1" or "Tickets: 2", the value of each row would be 0.

Alignment/Trim

This dropdown menu controls the alignment of the column. Also if its only field is numeric and one of the numeric options is specified, the value is both right aligned and rendered with the indicated trim (e.g. a decimal point and 1 fractional digit).

Column Width

If a column's Width is left blank, the browser chooses the width of the column when the table is rendered. If you enter a value, this sets the percentage of table-width that the column should be. For example, if you have 2 columns that should each be half of the table's width, set each's Width to 50.

Notes:

  1. Column Width only applies to the Tabular layout.
  2. If you mix blank widths with explicit widths or if the explicit widths do not add up to 100, the results are browser dependent.
  3. If Report Width is a percentage, the actual width of a column depends on the current output device.

Long and Repeat Values

If you allow wrapping, the browser renders long values for the column on multiple lines. If you give the column a non-blank width, the wrapping happens at that size. Otherwise the browser chooses where to do the wrapping. If you don't allow wrapping, the column's value is always rendered on 1 line. Truncation applies only in the Tabular layout and occurs when the column has a non-blank width and its value is longer than that width.

Merging applies the the Tabular layout and means the following. If the leftmost column of a row has the same value as the previous row, those cells are joined together. In other words, you end up with tall cells on the left side of a report whenever rows start with the same stuff. (See here for an example of this).

Chunks and Title Terms

If you have no title terms, your report has one chunk and its title is the name you gave the report. Otherwise each chunk is titled report name for term1 term2-if-any, and so on.

Value of Title Terms

A title term has the same Value properties as a column. See above.

The title-term value shown in a chunk title it the value that all rows in that chunk share. See the section about organizing a report for a full discussion of this.

Title Term's Range in Chunk

The One Value option is for chunks about text fields. In particular, create a title term whose Range is this and whose value is Person's->Name when you want a report containing one chunk per person.

The other options enable you to make the scope of a chunk be a range of values. For example, suppose you have a Summary report containing all the signups done since 2010. Also suppose your only title term is Schedule Item's->Its Date, and its Range is Same Year. Then chunk1 contains all the signups for 2010 schedule items and is titled Summary for 2010, and chunk2 contains all the signups for 2011 schedule items and is titled Summary for 2011, and so on.

You can also do reports for non-date ranges. For example, if you have an Age column and select Same Multiple of 10 for it, the report would contain one chunk for people age 0-9, another for people age 10-19, and so on.

Same after Dropping Fraction is for small dense ranges: