Make summary data easier to read by using a crosstab query

To make summary data easier to read and understand, consider using a crosstab query. A crosstab query calculates a sum, average, or other aggregate function, and then groups the results by two sets of values— one set on the side of the datasheet and the other set across the top. On the ribbon, click Create, and then in the Queries group, click Query Wizard. In the New Query dialog box, double-click Crosstab Query Wizard.

If one set of headings has date values, the wizard will help you group the records by standard intervals – such as months or quarters.

Note:  Crosstab queries aren’t available in an Access app, and are only partially supported in a web database: they can’t be used by any web objects. To use a crosstab query in a web database, open the database with Access. For more information about Access apps, see the article Create an Access app. For more information about web databases, see the article Edit or publish a web database on SharePoint 2010.

In this article

Overview

Create a crosstab query

Use ranges or intervals for headings

Prompt for a parameter to limit row headings

Replace null values with zeroes

Crosstab query tips

Overview

A crosstab query is a type of select query used to arrange summary data – sums, averages, counts, and similar functions – into two category schemes, one of which is often time periods. For example, you might use a crosstab to show total sales by region per month. The way the results are arranged in a crosstab query can make it easier to read than a simple select query that displays the same data, as shown in the following illustration.

A select query and a crosstab query displaying the same data

1. This select query groups summary data vertically by employee and category.

2. This crosstab query displays the same data, grouped both horizontally and vertically.

When you create a crosstab query, you specify which fields contain row headings, which field contains column headings, and which field contains values to summarize. You can use only one field each when you specify column headings and values to summarize. You can use as many as three fields when you specify row headings.

You can also use an expression to produce row headings, column headings, or values to summarize.

Diagram of a crosstab query

1. One, two, or three columns on this side contain row headings. The names of the fields that you use as row headings appear in the top row of these columns.

2. The row headings appear here. The number of rows in the crosstab datasheet can grow quickly when you use more than one row heading field, because each combination of row headings is displayed.

3. The columns on this side contain column headings and summary values. Note that the name of the column heading field does not appear on the datasheet.

4. Summary values appear here.

Benefits of using the Crosstab Query Wizard

  • You can automatically group dates into intervals     If your column headings contain date/time data, the wizard helps you group the dates into standard intervals, such as months or quarters.

    Note:  If want to use intervals that you don’t see in the wizard (for example, fiscal year or biennium), then the wizard won’t save you any work. To use custom intervals, create the crosstab query manually in Design view, and use an expression to create the custom intervals.

  • You can use it as a starting point     Use the wizard to create the basic crosstab query you want, and then fine-tune the query's design by using Design view.

Crosstab features available in Design view

  • Make the query ask for input (add a parameter prompt)    When you add a parameter prompt, the query displays a dialog box and uses the input to determine which data to include. For example, say you have a crosstab that displays quarterly sales by product category – but you only want to see one region’s data at a time. You could use a parameter to make the query ask which region to use.

  • Use expressions as fields in your query    Sometimes you need to do minor calculations or other functions with the data for a field. For example, if there are any null values in your data, your crosstab results may not be correct or complete. To fix that, you could apply the Nz function to the field – it replaces nulls with zeros.

  • Specify a list of fixed values to use as column headings    You may find that you want to replace the column headings with your own values. For example, if you have intervals for column headings, they might not sort the way you want them to. No problem – just replace them with values that will sort correctly.

When you build a crosstab query in Design view, you use the Total and Crosstab rows in the design grid to specify which field's values will become column headings, which fields' values will become row headings, and which field's values to sum, average, count, or otherwise calculate.

Parts of a crosstab query shown in Design view

1. The settings in these rows determine whether the field is a row heading, column heading, or summary value.

2. This setting displays the field's values as row headings.

3. This setting displays the field's values as column headings.

4. These settings produce the summary values.

Top of Page

Create a crosstab query

Starting with the Crosstab Query Wizard

The Crosstab Query Wizard makes you choose a single table or query as the record source for your crosstab query. If a single table does not have all the data that you want to include in your crosstab query, start by creating a select query that returns the data that you want. For more information about creating a select query, see Introduction to queries.

  1. On the Create tab, in the Query group, click Query Wizard.

  2. In the New Query dialog box, click Crosstab Query Wizard, and then click OK.

    The Crosstab Query Wizard starts.

  3. On the first page of the wizard, choose the table or query that you want to use to create a crosstab query.

  4. On the next page, choose the field that contains the values that you want to use as row headings.

    You can select up to three fields to use as row headings sources, but the fewer row headings you use, the easier your crosstab datasheet will be to read.

    Note: If you choose more than one field to supply row headings, the order in which you choose the fields determines the default order in which your results are sorted.

  5. On the next page, choose the field that contains the values that you want to use as column headings.

    In general, you should choose a field that contains few values, to help keep your results easy to read. For example, using a field that has only a few possible values (such as gender) might be preferable to using a field that can contain many different values (such as age).

    If the field that you choose to use for column headings has the Date/Time data type, the wizard adds a step that lets you specify how to group the dates into intervals, such as months or quarters.

  6. If you choose a Date/Time field for column headings, the next page of the wizard asks you to specify the interval to use to group the dates. You can specify Year, Quarter, Month, Date, or Date/Time. If you do not choose a Date/Time field for column headings, the wizard skips this page.

  7. On the next page, choose a field and a function to use to calculate summary values. The data type of the field that you select determines which functions are available.

  8. On the same page, select or clear the Yes, include row sums check box to include or exclude row sums.

    If you include row sums, the crosstab query has an additional row heading that uses the same field and function as the field value. Including a row sum inserts an additional column that summarizes the remaining columns. For example, if your crosstab query calculates average age by location and gender (with gender column headings), the additional column calculates the average age by location, across all genders.

    You can change the function that is used to produce row sums by editing the crosstab query in Design view.

  9. On the next page of the wizard, type a name for your query and then specify whether you want to view the results or modify the query design.

Create a crosstab query manually in Design view

  1. On the Create tab, in the Queries group, click Query Design.

  2. In the Show Table dialog box, double-click each table or query that you want to use as a record source.

    If you use more than one record source, make sure that the tables or queries are joined on fields that they have in common. For more information about joining tables and queries, refer to the See Also section.

  3. Close the Show Table dialog box.

  4. On the Design tab, in the Query Type group, click Crosstab.

  5. In the query design window, double-click each field that you want to use as a source of row headings. You can select as many as three fields for row headings.

  6. In the query design grid, in the Crosstab row for each row heading field, select Row Heading.

    You can enter an expression in the Criteria row to limit the results for that field. You can also use the Sort row to specify a sort order for a field.

  7. In the query design window, double-click the field that you want to use as the source of column headings. You can select only one field for column headings.

  8. In the query design grid, in the Crosstab row for the column heading field, select Column Heading.

    You can enter an expression in the Criteria row to limit the results for the column heading field. However, using a criteria expression with the column heading field does not limit the number of columns returned by the crosstab query. Instead, it limits which columns contain data. For example, suppose you have a column heading field that has three possible values: red, green, and blue. If you apply the criterion ='blue' to the column heading field, the crosstab still displays a column for red and a column for green, but only the column for blue contains data.

    If you want to limit the values that display as column headings, you can specify a list of fixed values by using the query's Column Headings property. For more information, see Specify fixed values for column headings.

  9. In the query design window, double-click the field that you want to use to calculate summary values. You can select only one field to use for summary values.

  10. In the query design grid, in the Total row for the summary values field, select an aggregate function to use to calculate the values.

  11. In the Crosstab row for the summary values field, select Value.

    You cannot specify criteria for or sort on a summary values field.

  12. On the Design tab, in the Results group, click Run.

Specify fixed values for column headings

If you want to specify fixed values to use for column headings, you can set the query's Column Headings property.

  1. Open the crosstab query in Design view.

  2. If the property sheet is not visible, press F4 to display it.

  3. In the property sheet, just above the General tab, make sure that the Selection type is Query Properties. If it is not, click an empty spot in the space above the query design grid.

  4. In the property sheet, on the General tab, in the Column Headings property, enter a comma-separated list of values that you want to use as column headings.

    Note: Some characters (such as most punctuation marks) are not allowed in column headings. If you use these characters in your list of values, Access substitutes an underscore (_) for each such character.

Top of Page

Use ranges or intervals for headings

Sometimes you want to group a field’s data values into ranges, and then use those ranges for row or column headings (instead of just using the values). For example, suppose you use an "Age" field for column headings. Rather than using a column for each age, you may prefer to use columns that represent age ranges – for example, 40-49.

You can use the IIf function in an expression to create ranges to use for row or column headings.

Tip: If you want to create intervals with a Date/Time field, consider using the Crosstab Query Wizard. The wizard allows you to group dates into Year, Quarter, Month, Date, or Date/Time intervals. If none of these intervals is what you want, you should create your crosstab query in Design view, and then use the technique described in this section to create the intervals that you want.

How IIf works

The IIf function works by evaluating an expression and then returning one value if the expression is true, or an alternate value if the expression is false. You can nest IIf statements to create a logical sequence of comparisons. This lets you use IIf to separate numeric field values into ranges.

IIf syntax

IIf( expr, truepart, falsepart )

The IIf function syntax has these arguments:

Argument

Description

expr

Required. Expression that you want to evaluate.

truepart

Required. Value or expression returned if expr is True.

falsepart

Required. Value or expression returned if expr is False.

Create ranges by using an expression

  1. Open the crosstab query in Design view.

  2. In the query design grid, in the Field row, right-click an empty column, and then click Zoom on the shortcut menu.

  3. In the Zoom box, type a field alias, followed by a colon (:).

  4. Type IIf().

  5. Inside the parentheses that follow IIf, type a comparison expression that defines the first range of field values.

    For example, suppose you are creating ranges for an Age field, and you want each range to be twenty years. The comparison expression for the first range is [Age]<21.

  6. Type a comma after the comparison expression, and then type a name for the range, enclosed in quotation marks. The name you supply is the crosstab heading for values that fall within the range.

    For example, after [Age]<21, type a comma and then type "0-20 years".

  7. Type a comma after the range name (outside the quotation marks), and then do one of the following:

    • To create another range, type IIf() and then repeat steps 5, 6 and 7.

    • For the last range, type just a name for the range.

      For example, a complete nested IIf expression that separates an Age field into twenty-year ranges might look like this (line breaks were added for readability):

      IIf([Age]<21,"0-20 years",
      IIf([Age]<41,"21-40 years",
      IIf([Age]<61,"41-60 years",
      IIf([Age]<81,"61-80 years", "80+ years"))))

      Note: When Access evaluates the expression, it stops evaluating as soon as one of the IIf statements evaluates to true. You do not need to specify the lower end of each range, because any value that falls below the lower end of a given range would already have evaluated as true.

  8. In the query design grid, in the Total row, select Group By.

  9. In the Crosstab row, specify whether to use the ranges as row headings or column headings. Remember that you can specify from one to three row headings, and one column heading.

Top of Page

Prompt for a parameter to limit row headings

You may want your crosstab query to prompt for input when it is run. For example, suppose that you are using several row headings, one of which is Country/Region. Rather than always displaying data for every country or region, you may want your query to prompt for a name and then display data according to the user's input.

You can add a parameter prompt to any row heading field.

Note: You can also add a parameter prompt to a column heading field, but this will not limit the columns that appear. For more information about limiting the columns that appear, see the section Specify fixed values for column headings.

  1. Open the crosstab query in Design view.

  2. In the Criteria row for the row heading field for which you want to prompt the user for input, type question text enclosed in square brackets. The question text will appear as a prompt when the query is run.

    For example, if you type [Which country or region?] in the Criteria row, when the query runs, a dialog box appears that contains the question "Which country or region?," an input box, and an OK button.

    Tip: If you want your parameter to be flexible, concatenate your expression with wildcards, by using the Like operator. For example, instead of using [Which country or region?] as your criterion, you can use Like [Which country or region?]&"*" to make the parameter match a greater range of input. Using Like does not change the appearance of the parameter prompt.

  3. On the Design tab, in the Show/Hide group, click Parameters.

  4. In the Query Parameters dialog box, in the Parameters column, enter the same parameter prompt that you used in the Criteria row. Include the square brackets, but do not include any concatenated wildcards or the Like operator.

  5. In the Data Type column, select the data type for the parameter. The data type should match the data type of the row heading field.

Top of Page

Replace null values with zeroes

If the field that you use to calculate summary values in your crosstab query contains null values, those values are ignored by any aggregate function that you use. For some aggregate functions, your results can be affected. For example, to calculate an average, you add all of the values and divide the result by the number of values. But if the field contains any null values, those null values are not counted as part of the number of values.

In some cases, you may prefer to replace any null values with zeroes so that the values will be counted during aggregate calculations. You can use the Nz function to replace null values with zeroes.

Nz syntax

Nz( variant [, valueifnull ] )

The Nz function syntax has these arguments:

Argument

Description

variant

Required. A variable of data type Variant.

valueifnull

Optional (unless used in a query). A Variant that supplies a value to be returned if the variant argument is Null. This argument enables you to return a value other than zero or a zero-length string.

Note: If you use the Nz function in an expression in a query without using the valueifnull argument, the results will be a zero-length string in the fields that contain null values.

  1. With the query open in Design view, in the query design grid, right-click the Value field.

  2. On the shortcut menu, click Zoom.

  3. In the Zoom box, surround the field name or expression with parentheses, and then type Nz in front of the parentheses.

  4. Type , 0 just inside the right parenthesis.

    For example, if you used Nz with a field called "Hours Lost" to turn null values into zeroes, your finished expression would look like this:

Nz([Hours Lost], 0)

Top of Page

Crosstab query tips

  • Keep it simple    Crosstab queries can become difficult to read as the number of row combinations grows. Don't use more row headings than you need.

  • Consider building your crosstab in steps    Don't limit yourself to using only tables. You can often start by building a totals query and then using that query as the record source for a crosstab query.

  • Choose your column heading field carefully    Crosstab datasheets tend to be easier to read when the number of column headings stays relatively small. Once you have identified the fields that you want to use as headings, consider using the field that has the fewest distinct values to produce column headings. For example, if your query calculates a value by age and gender, consider using gender for column headings instead of age because gender typically has fewer possible values than age.

Top of Page

Share Facebook Facebook Twitter Twitter Email Email

Was this information helpful?

Great! Any other feedback?

How can we improve it?

Thank you for your feedback!

×