AX1740

Fixed Report component for Axiom forms

Using the Fixed Report component, you can query data from the Axiom Software database and display that data in a fixed-row report structure, within an Axiom form. The Fixed Report component can be used to display an income statement or any other report that uses a fixed format, including headers, subheaders, subtotals, and totals.

The Fixed Report component queries the data directly from the database, using the primary table defined in the component properties, and the column and row information defined in the associated data sources. The resulting data is not returned into the spreadsheet source file; it is only returned into the form. This provides a more efficient and performant method of displaying data in an Axiom form, as compared to querying data into the spreadsheet source file and then tagging it for display in a Formatted Grid component.

The Fixed Report component also supports the following reporting features:

  • Drilling: You can optionally enable drilling for the report. Users can drill down any data row in the report, to see the data at a different level of detail.

  • Icons and commands: You can optionally display icons in the report. The icons can be used simply as informational signals, or they can be used to trigger a command or open a designated URL. The icons can be persistent in the report, or they can display on hover only. Conditions can be defined for the icons, so that the icons only display when certain conditions are met.

  • Excel export: You can optionally enable the ability to export the report contents to an Excel spreadsheet.

Fixed Report components display read-only data. They do not support editing values or displaying other interactive elements such as check boxes or drop-down lists. If data edits are necessary, use a Formatted Grid component instead.

Generally speaking, the Fixed Report component does not support user-definable formatting options. The various components of the report are automatically formatted (such as shading and borders on subtotal and total rows). This default formatting cannot be customized.

Defining a fixed report is a multiple-step process that requires the following:

  • Creation of a FixedReportConfig data source in the spreadsheet that defines the row structure of the report, including headers, subheaders, data row sections, subtotals, and totals. This process may include creation of one or more optional FixedReportSectionConfig data sources, to individually define the rows in a section, as opposed to dynamically generating the rows based on the values in a specified table column.

  • Creation of a FixedReportColumns data source in the spreadsheet that defines the columns to display in the report, as well as various display properties for those columns.

  • Placement and configuration of a Fixed Report component on the Axiom form canvas. The primary table for the query and the overall data filter are defined in the component properties.

How the sections in a Fixed Report component correspond to its various data sources

The Fixed Report component is one of several options that can be used to display reporting data in an Axiom form, along with the Data Grid component and the Formatted Grid component. For more information on the differences between these components and when to use each, see Displaying reporting data in an Axiom form.

NOTE: The Fixed Report component has special update behavior that does not follow the same rules as other form components. If you want the data in the report to change based on changes made to other components, you must be aware of this behavior and design accordingly. For more information, see Update behavior.

Data source tags: FixedReportConfig

A Fixed Report component must have a defined FixedReportConfig data source within the file, to define the row structure of the report. The tags for the data source are as follows:

Primary tag

[FixedReportConfig;DataSourceName]

The DataSourceName identifies this data source so that it can be assigned to a Fixed Report component. Data source names must be unique within a file and must start with a letter. Names can only contain letters, numbers, and underscores. Names are validated when the file is saved; an invalid name will prevent the save.

The placement of this primary tag defines the control column and the control row for the data source.

  • All column tags must be placed in this row, to the right of the tag.
  • All row tags must be placed in this column, below the tag.

Row tags

[Header]

Each row flagged with this tag defines top-level header text to be displayed in the report column that contains the row labels.

[SubHeader]

Each row flagged with this tag defines sub-header text to be displayed in the report column that contains the row labels.

TIP: If you want to display a subheader for a data row section, it is not necessary to use a separate [Subheader] row tag. Instead, you can define [HeaderText] on the {DataRowSection] row tag. Header text defined on the [DatarowSection] tag displays directly above the rows in the data section

NOTE: Currently, [Header] and [Subheader] rows use the same formatting. Although you can use subheader rows now, they are mostly intended as a placeholder feature for formatting enhancements in future versions.

[DataRowSection]

Each row flagged with this tag defines a data row section in the report. This section displays one or more data rows.

[SectionSubTotal]

Each row flagged with this tag defines a subtotal row for an adjacent data row section. The calculation is based on the data rows in the section.

By default, if the [SectionSubTotal] row is directly underneath a [DataRowSection] row, then the subtotal will be for that section. If instead you want a section subtotal row above a data row section, then you must enter the ID of the section into the [RowData] field.

[SubTotal]

Each row flagged with this tag defines a subtotal row. This is intended to be used when you want to subtotal two or more data row sections.

[Total]

Each row flagged with this tag defines a total row. This is intended to be used to provide an overall total, based on all relevant data row sections.

Column tags

[HeaderText]

Defines header text to be displayed on the report row.

  • Required for [Header] and [Subheader] rows, to define the text for the header.

  • Optional for [DataRowSection] rows. If defined, the header text displays as a subheader directly above the data rows in the section.

  • Optional for [SectionSubTotal], [SubTotal] and [Total] rows. If defined, the header text displays within the subtotal/total row, to provide a label for that row (such as "Total" or "Total Expenses").

Overflow behavior for header text depends on whether columns are frozen. If columns are not frozen, then header text overflows into the adjacent column. If columns are frozen, then header text wraps. In that case, you must set the width of the [HeaderColumn] row as appropriate to fit the header text, within the FixedReportColumns data source.

[RowData]

Defines the data for the row or for the data row section. Does not apply to [Header] or [Subheader] rows. Valid entries depend on the row type as follows:

DataRowSection

Required to define the rows in the section. Enter either a Table.Column name, or the name of a FixedReportSectionConfig data source.

  • Table.Column. Specify a Table.Column if you want to automatically generate the rows in the section based on values in the column. The section will have a data row for each value in the column (as restricted by the [SectionFilter] field, if defined). For example, if the column is Acct.Acct, and the section filter is Acct.Category='Payroll', then the section will have a data row for each payroll account.

    This is essentially the same as specifying a column as the "sum by" level for an Axiom query, except that the sum by level applies to this section only instead of the entire report. The Table.Column must be valid for use as the sum by, based upon the primary table specified in the component properties. The same columns that would be valid to use as the sum by for an Axiom query are valid here. For more information, see Defining the sum level for an Axiom query.

    When specifying a Table.Column, you can use the following optional syntax: ValueColumn;LabelColumn;SortColumn asc/desc

    • If only the ValueColumn is specified, then the report column displays those values in ascending order. For example: Acct.Acct displays account codes.

    • If a LabelColumn is specified, then the report column displays the values from the label column in ascending order. For example: Acct.Acct;Acct.Description displays the account descriptions instead of the account codes, sorted by the descriptions.

    • If a SortColumn is specified, then the report column is sorted by those values instead of the ValueColumn or the LabelColumn. You can also specify the sort order (ascending is used by default if omitted). For example: Acct.Acct;Acct.Description;Acct.Order desc sorts by the Acct.Order column in descending order.

      If you want to define a SortColumn but not a LabelColumn, then you must delimit the omitted parameter with an "empty" semicolon. For example:
      Acct.Acct; ;Acct.Order.

  • If the rows that you want to display in the section cannot be automatically generated based on a table column, then you can use a FixedReportSectionConfig data source to define the rows instead. In that case, enter the name of the data source here.

SectionSubTotal

Optional to specify the section to subtotal. Enter the ID of the data row section that you want to subtotal. [SectionSubTotal] rows can only be placed directly underneath or directly above the [DataRowSection] that you want to subtotal.

By default, if a [SectionSubTotal] row is directly underneath a [DataRowSection] row, then the subtotal adds all rows in that section. It is not necessary to enter the ID of the section in this case.

However, if you want a section subtotal to display above a data row section, then you must place the [SectionSubTotal] row directly above the [DataRowSection] section, and then enter the ID of the data row section.

If the data row section that is being subtotaled contains exactly two rows, then you can enter the keyword Subtract here in order to subtract the 2nd row from the 1st row (instead of adding the rows). If the subtotal row is underneath the data row section, then you can enter the Subtract keyword by itself. If the subtotal row is above the data row section, then you can append the keyword to the section ID with a semicolon—for example: Section1;Subtract.

SubTotal and Total

Required to specify the sections or subtotals to include in the calculation, and the type of calculation.

Enter an expression that adds and/or subtracts two or more data row sections or subtotals, referenced by their ID as defined in the [ID] column. For example:

Section1 + Section2

Subtotal1 - Subtotal2

Subtotal1 + Subtotal2 - Subtotal3

Each expression can use addition (+) and/or subtraction (-). Parentheses cannot be used in the expression.

[SectionFilter]

Specifies a filter to limit the data brought into a section. Only applies to [DataRowSection] rows.

If the data row section uses a Table.Column to define the rows in the section, then the section filter impacts both the data to be brought into the section and the rows to display in the section. For example, if [RowData] is set to Acct.Acct and the section filter is Acct.Category='Marketing', then the section will only contain rows for accounts assigned to the Marketing category.

If the data row section uses a FixedReportSectionConfig data source to define the rows, then the section will always contain a row for each row defined in the data source. If the section filter means that no data is available for a particular row, then that row is not omitted—instead, it will display with zero values.

NOTE: Section filters should be specific to the rows in each particular section. If you want to apply an overall filter to the entire report, then you should define a filter at the component level instead, using the Data Filter in the component properties.

[ID]

Defines an ID for [DataRowSection] and [SubTotal] rows, so that they can be referenced in the [RowData] field as needed. Does not apply to other row types.

IDs are required in order to use data row sections and subtotals within subtotal and total calculations. IDs can also be used to associate a section subtotal with the data row section below it, in order to display a section subtotal at the top of a section (instead of at the bottom of the section, which is the default behavior).

[InvertVarianceColumns]

Specifies whether to perform sign reversal on calculated columns that are designated as variance columns in the FixedReportColumns data source (using the [IsVarianceColumn] property). Does not apply to [Header] or [SubHeader] rows.

If set to True, then values in variance columns are multiplied by -1 to reverse the number sign from positive to negative (or vice versa)—within that section only. When enabled for a [DataRowSection], the sign reversal also automatically applies to the associated [SectionSubtotal] row (if present).

[Total] and [Subtotal] rows that reference a section with an inverted variance are not automatically inverted. If necessary, you can also configure these rows to invert the variance.

NOTES:  

  • The primary tag must be placed in the first 500 rows of the sheet.
  • Formulas can be used to create the tags, as long as the initial bracket and identifying keyword are whole within the formula. For more information, see Using formulas with Axiom feature tags.

To use the Data Source Wizard to add the tags to a sheet, right-click in a cell and then select Create Axiom Form Data Source > Fixed Report. You can also highlight a range of data first and then use the wizard to add the tags around that data. The cells in the row above and the column to the left of the selected area must be blank in order for Axiom to place the tags in sheet.

The following example shows a sample FixedReportConfig data source tagged in a sheet:

Example FixedReportConfig data source

Note the following about this example:

  • Most of the data row sections in this example are configured to automatically generate the rows based on a specified Table.Column and section filter. For example, the data row section for Payroll has defined row data of Acct.Acct;Acct.Description, and a section filter of Acct.Category='Payroll'. This means that the section will be automatically populated with account-level rows that belong to the category Payroll. Additionally, instead of showing the account code on each row, the report will use the account description as the row label.

  • The data row section for Marketing uses a data source name instead of a Table.Column. This means that the rows in this section are defined in the referenced FixedReportSectionConfig data source.

  • The section subtotal rows in this example immediately follow their corresponding data row sections, so they will automatically subtotal the rows in that section. In this case, it is not necessary to specify anything in the [RowData] field for the section subtotal rows. If instead you wanted the subtotal rows to display above their corresponding sections, then you would need to specify the data row section name as the row data for the section subtotal.

  • On the subtotal and total rows, ID names are referenced to indicate what should be included in the subtotal and total.

The resulting report for the example data source shown above looks as follows. In this example, you can see the various headers, sections, subtotals, and totals that were mapped out in the data source.

Example row structure generated from the FixedReportConfig data source

Data source tags: FixedReportSectionConfig

A Fixed Report component can optionally use one or more defined FixedReportSectionConfig data sources within the file, to define the individual rows within a data row section. You can specify the name of a FixedReportSectionConfig data source in the [RowData] field of a [DataRowSection], in the FixedReportConfig data source.

The tags for the FixedReportSectionConfig data source are as follows:

Primary tag

[FixedReportSectionConfig;DataSourceName]

The DataSourceName identifies this data source so that it can be referenced in the [RowData] field of the FixedReportConfig data source. Data source names must be unique within a file and must start with a letter. Names can only contain letters, numbers, and underscores. Names are validated when the file is saved; an invalid name will prevent the save.

The placement of this primary tag defines the control column and the control row for the data source.

  • All column tags must be placed in this row, to the right of the tag.
  • All row tags must be placed in this column, below the tag.

Row tags

[FixedRow]

Each row flagged with this tag defines a row to display in the data row section.

Column tags

[Label]

Defines the label text for the row.

[FixedRowFilter]

Specifies a filter to determine the data to be shown in that row. For example, if you say Acct.Category='Revenue', then the row shows data for all accounts that belong to the category of Revenue.

This is essentially the same as specifying a "sum by" level for an Axiom query, except that now you are defining the sum by at the individual row level. The Table.Column used in the filter must be valid for use as the sum by, based upon the primary table specified in the component properties. The same columns that would be valid to use as the sum by for an Axiom query are valid here. For more information, see Defining the sum level for an Axiom query.

Fixed row filters should be specific to each individual row. If you want to apply an overall filter to the entire report, then you should define a filter at the component level, using the Data Filter in the component properties.

NOTES:  

  • The primary tag must be placed in the first 500 rows of the sheet.
  • Formulas can be used to create the tags, as long as the initial bracket and identifying keyword are whole within the formula. For more information, see Using formulas with Axiom feature tags.

To use the Data Source Wizard to add the tags to a sheet, right-click in a cell and then select Create Axiom Form Data Source > Fixed Report Row Section. You can also highlight a range of data first and then use the wizard to add the tags around that data. The cells in the row above and the column to the left of the selected area must be blank in order for Axiom to place the tags in sheet.

The following example shows a sample FixedReportSectionConfig data source tagged in a sheet:

Example FixedReportSectionConfig data source

This section will contain two rows with the labels specified in the data source. The first row contains data for account 5700 and the second row contains data for account 5800. The intent of this data source is to allow you to precisely define both the label text and data for each row. It is most useful when you want to display row data that does not directly correspond with a particular grouping—for example, if you want to display row data at different grouping levels within the same section.

The following example shows the rows generated from the FixedReportSectionConfig data source (within the context of the FixedReportConfig data source shown in the previous section):

Example rows generated from FixedReportSectionConfig data source

Data source tags: FixedReportColumns

A Fixed Report component must have a defined FixedReportColumns data source within the file, to indicate the columns of data to display in the report. The tags for the data source are as follows:

Primary tag

[FixedReportColumns;DataSourceName]

The DataSourceName identifies this data source so that it can be assigned to a Fixed Report component. Data source names must be unique within a file and must start with a letter. Names can only contain letters, numbers, and underscores. Names are validated when the file is saved; an invalid name will prevent the save.

The placement of this primary tag defines the control column and the control row for the data source.

  • All column tags must be placed in this row, to the right of the tag.
  • All row tags must be placed in this column, below the tag.

Row tags

[HeaderColumn]

The row flagged with this tag is used to define column properties for the column that contains the row headers and dimension values (the initial column of the report). The data source must only contain one row with this tag, and it must be the first row in the data source.

[Column]

Each row flagged with this tag specifies a database column to include in the report.

[CalculatedColumn]

Each row flagged with this tag defines a report column that uses a calculation (instead of displaying data directly from a database column). The calculation applies to each row of the report. This can be used to display totals, differences, percentages, and other calculations.

[ColumnGroup]

Use this tag to define the start of a column group. This adds another level to the column header area, so that you can define additional header text that spans over all columns in the group. All columns after this tag belong to the group, until an [EndGroup] tag is reached. Groups can be nested. For more information, see Creating column groups for the report header.

When using this tag, some of the fields in the data source apply, such as the header text, header icon, and header alignment. However, any field that impacts column contents does not apply and should be left blank.

[EndGroup]

Use this tag to end a column group. If multiple column groups exist, the group closest to this tag is ended. This tag must have a corresponding [ColumnGroup] tag, or else an error occurs. This tag is optional if you want the column group to extend to the end of the column list. For more information, see Creating column groups for the report header.

When using this tag, all of the other fields in the data source should be left blank, as they do not apply and will be ignored. The only purpose of this tag is to end a column group.

Column tags

[ColumnName]

Valid entries for this column depend on the row tag:

  • For the [HeaderColumn] row, this field should be left blank. Instead of specifying a database column here, the values shown in this report column depend on the row data defined in the separate FixedReportConfig data source.

  • For [Column] rows, specify the fully qualified Table.Column name to include in the report. The report column will display values from the designated table column.

    The designated table column must be valid to include in the query, based upon the primary table specified in the component properties. The same columns that would be valid to include in the field definition of an Axiom query are valid for inclusion here. You can use regular table columns, calculated fields, and column alias names. For more information on valid columns for inclusion, see Creating the field definition for an Axiom query.

    If the column has a defined [Aggregation] or [ColumnFilter], then you can define a unique name for the column in order to reference it in calculations or icon conditions. Append this unique name to the Table.Column using a semicolon. For example: GL2019.TOT;TOT19Filter. This unique name should not contain spaces or special characters—generally speaking, it should follow the same rules as table column names.

    NOTE: If only the column name is specified, the primary table is always assumed as the table, even if the column is validated. For example, if you specify the column as Dept and the primary table is GL2019, then the column used is GL2019.Dept, not Dept.Dept. This is different than the behavior of Axiom queries, which use the lookup table (Dept.Dept) in this situation. It is recommended to always use fully qualified column names to avoid any confusion.

  • For [CalculatedColumn] rows, enter a unique name. It is recommended to define a name that describes the purpose of the calculation. If you plan to use this name in calculations, then the name must not contain spaces or special characters—generally speaking, it should follow the same rules as table column names.

  • For [ColumnGroup] and [EndGroup] rows, this field should be left blank as it does not apply.

If you want to display only icons in the report column, then use a [Column] row but leave this field blank so that it is not associated with a database column. Then, use either the [Icon] field or the [HoverActions] field to specify the icons to display.

[IsVisible]

Determines whether the column is visible in the report (True/False). You can use this property to dynamically hide and show certain columns. False is assumed if left blank.

Columns are visible in the report in the order they are defined in the data source, with frozen columns displayed first, followed by all other unfrozen columns.

If you want to dynamically exclude a column from the data source entirely, then you must use formulas to hide or show the row tag.

[IsFrozen]

Specifies whether the report column is frozen at the left-hand side of the screen for scrolling purposes (True/False). If True, then the column displays in the frozen area, before any unfrozen columns, regardless of its placement in the data source. Within the frozen area, frozen columns display in the order they are defined in the data source.

[DisplayFormat]

Optional. Defines a display format for the report column contents. This is primarily intended to be used when you want to combine the values of multiple database columns together. For example, if you have a column for Dept.Dept but you want to display the description in the same column as the department code, you can define a display format as follows:

{Dept.Dept} - {Dept.Description}

Use fully qualified Table.Column syntax and place column references in curly brackets. The display format can include additional text and characters, such as the hyphen in the previous example. Any column listed in the display format must be valid in the context of the primary table.

[Total]

Optional. Specifies whether columns are included in subtotal and total rows (True/False).

In most cases, you can leave this column blank to include all "data" columns by default. Numeric value columns and calculated columns are automatically included, while numeric dimension columns and other ineligible columns are omitted. If you do not want a data column to be included in subtotals and totals, then you can enter False into the [Total] column to omit it.

The following columns are included in subtotals and totals by default:

  • Any column using the following aggregation types: RowSum, LookupSum, and RowCount. This applies whether the column uses the aggregation type by default, or if you have assigned the aggregation in the [Aggregation] column. The total row uses the same aggregation as the column data.

    For example, a Numeric column with a column classification of Value uses RowSum aggregation by default and therefore will be included. An Integer column with a column classification of Dimension uses Max aggregation by default and therefore will be omitted. However, if you use the [Aggregation] column to set the Integer column to use RowCount aggregation instead, now it will be included by default.

  • All calculated columns defined in the report. The calculation is applied to the total row values.

Columns using RowAvg, LookupAvg, Min, Max, or DistinctCount aggregation (whether by default or explicitly specified) are not eligible for inclusion in the total row.

Generally speaking, it is not necessary to flag any columns with True because all eligible columns are included by default. If an ineligible column is flagged as True, then an error occurs when attempting to render the grid.

Older fixed reports created before 2019.1 may use the deprecated [SubTotal] tag to define the contents of the total row. These grids should be converted to use the [Total] row instead. If a [SubTotal] tag is used, any eligible column that is not flagged with False is included in the total row, using the new total behavior.

[Width]

Optional. The width of the column in the report, in pixels. If left blank, the default column width is as follows, depending on the column type:

  • Numeric, Date, Boolean: 120
  • Integer (all variations), Identity (all variations), or DateTime: 150
  • String: 200

Calculated columns defined in the report default to 120. Columns that contain only icons default to 200.

[Header]

Text to display in the report header for the report column. If left blank, the [ColumnName] value is used.

For [ColumnGroup] rows, this defines the header text to display over the column group. If left blank, a blank header row is displayed over the column group.

[HeaderIcon]

Optional. The name of an icon to display in the report column header. You can use the same icon names as for the [Icon] column (including appending the optional color).

If no header text is defined, then the icon displays by itself and honors the [HeaderAlignment] property directly. If header text is defined, then the icon displays to the left of the header text if the header alignment is left or center, and to the right of the header text if the header alignment is right.

An [IconConfig] data source cannot be used here; only a single icon name can be used.

[HeaderAlignment]

Optional. The alignment of the header text. Enter any of the following: Default, Left, Right, or Center. If left blank, Default is assumed.

By default, the header text uses the same alignment as the report column contents (as determined by the [Alignment] property). This setting can be used to apply a different alignment to the header text.

For [ColumnGroup] rows, the default alignment is Center.

[Icon]

Optional. Enter one of the following:

  • The name of a single icon to display in each row of the report column.
  • The name of an IconConfig data source that defines the icons to display in the report column, as well as additional icon features.

The valid icon names are the same names allowed for symbols in Formatted Grid components (as well as Label and Button components). You can use any of these features to look up the desired icon name.

TIP: You can right-click the cell and select Insert Formatted Grid Tag > Symbol, then use the Tag Editor to select a symbol name (such as fa-file-o for a file symbol). You can then copy and paste the symbol name out of the Tag Editor and into the [Icon] column.

When listing a single icon name, you can optionally specify a color for the icon, using the syntax IconName;ColorName. For example: fa-heart;red. You can specify the color using a color name (red), a hexadecimal color code (#FF0000), or an Axiom style color code (A32). When using an IconConfig data source name, the color is specified within the data source.

If you want to use additional icon features—such as displaying multiple icons, conditionally displaying icons, or assigning an action to icons—then you must use an IconConfig data source. For more information on creating and using the IconConfig data source, see Using the IconConfig data source with Fixed Report components.

If you want the report column to only contain icons, then the row should be a [Column] row and the [ColumnName] property should be left blank. In this case, the icons honor the [Alignment] property directly to determine the alignment of the icons. If the alignment is set to default, the icons are left-aligned.

If the row has a defined database column name or a calculation, then the icons display along with the column values. In this case the placement of the icons is as follows, depending on the column alignment:

  • For left and center alignments, the icons display on the left side of the other column contents.
  • For right alignment, the icons display to the right side of the other column contents.

[HoverActions]

Optional. The name of an [IconConfig] data source, in order to display icons when the user hovers their cursor over the column contents and perform actions by clicking the hover icons. For more information on creating and using the data source, see Using the IconConfig data source with Fixed Report components.

Hover icons are designed to display on the opposite side of the other column contents. If the column alignment is right, the hover icons display on the left, and vice versa. If the column alignment is center, the hover icons display to the right of the other column contents. (This "opposite" alignment still applies if the icons are the only content in the column.)

[NumericFormat]

Optional. A valid Excel numeric format string to define the number format used by the report column. Only applies to columns with numeric data.

To define a display format, enter a valid Excel formatting string. These strings can be obtained as follows:

  • Format a cell in a spreadsheet to use the desired display format.
  • In the Format Cells dialog, on the Number tab, select the Custom category and copy the string in the Type box.

For example, this is the formatting string for a Currency format that shows the negative numbers in parentheses: $#,##0.000_);($#,##0.000)

Colors (such as red font for negative numbers) are not supported. Additionally, text replacement strings are only supported for zero values. Other advanced or unusual formats may not display as expected, so be sure to verify the column display.

If you do not define a custom display format, then the default formatting for the database column's specified numeric type will be used. For more information on how the numeric type is specified and what formatting is applied by default, see Using numeric type for column formatting.

[CalculatedColumn] rows use the Number numeric type by default. If you do not want this format, you must enter a format string for the column.

[Alignment]

Optional. The alignment of the report column values. Enter any of the following: Default, Left, Right, or Center. If left blank, Default is assumed.

The default alignment is as follows:

  • Values in frozen columns are left-aligned.
  • Values in non-frozen columns are left-aligned for strings and right-aligned for numbers.
[Aggregation]

Optional. Specifies the aggregation type used to aggregate data queried from the database column. In most cases this should be left blank to use the default aggregation for the database column—for example, to sum data columns. Aggregation only applies to [Column] rows.

If you want to override the default aggregation type for a database column, specify a valid aggregation type. The available aggregation types are the same as when using alternate aggregations with an Axiom query field definition. For more information, see Specifying an alternate aggregation method for a field definition.

[ColumnFilter]

Optional. Specifies a filter to limit the data queried from the database column. Enter any valid filter criteria statement. The behavior and requirements are the same as when defining a column filter for an Axiom query field definition. For more information, see Filtering the data coming into a spreadsheet column (column filters). Column filters only apply to [Column] rows.

NOTE: If you want to apply a filter to the entire report, not just a single column, use the Data Filter option in the component properties instead.

[Calculation]

Defines the calculation to use for the calculated column. Only applies to [CalculatedColumn] rows.

Enter the desired calculation as a text string, without an equals sign. The calculation must consist of valid column names and one or more of the following operators: addition (+), subtraction (-), multiplication (*), division (/), remainder (%), or unary negation (-). For example:

GL2019.M1+GL2019.M2

This calculation displays the sum of the two columns for each row.

Use parentheses to determine calculation order, such as: (GL2019.Q1-BGT2019.Q1)/BGT2019.Q1.

The following column names are valid for use in the calculation:

  • Database columns: You can use regular table column names (GL2019.M1), calculated field names (GL2019.TOT), and column alias names (CYA_TOT). Table columns and calculated fields must use full Table.Column syntax. You can use any database column that would be valid for inclusion in the data source, though the column does not have to be in the data source in order to be used in the calculation.

  • Calculated column names defined in the data source: You can use the names of previously defined calculated columns in subsequent calculated columns. For example, imagine that you have a calculated column named Difference that uses the calculation GL2019.Q1-BGT2019.Q1, and you want the next calculated column to show the percent difference. As long as the [CalculatedColumn] row defining Difference is above the row defining Percent Difference, then you can write the percent difference calculation as follows: Difference/BGT2019.Q1.

  • Columns with unique names defined in the data source: If you have defined a unique name for a database column in the [ColumName] field—such as GL2019.TOT;TOT19Filter—then you can use this unique name in the calculation.

    This option is intended for cases where you have defined an alternate aggregation or a column filter for the column, and you want to use these results in the calculation instead of the raw column values. In this example, the unique name TOT19Filter could be used in the calculation. Assuming this column has a defined column filter, the filtered results will then be used in the calculation.

Numbers can also be used in the calculation—for example, CPREQ2019.TOT/12.

[SelectedRowValue]

System-controlled field. This field is populated with the corresponding value for the report column defined in this row of the data source, based on the currently selected row within the report. This field only applies if Enable Row Selection is enabled in the component properties. This field is automatically updated by Axiom Software when a user selects a row in the report.

When a user selects a row in the report, the value in that row for each column is written to the [SelectedRowValue] field. For example, if the user selects the row containing Dept 40000, then the value 40000 is written to the data source for the row that defines the Dept.Dept column. You can set up the form to use these selected values in some way, such as to show detailed information about the current row. For more information, see Interactive behavior.

Additionally, a filter statement for the currently selected row is written to the Selected Row Filter field for the component on the Form Control Sheet. You can optionally reference this filter statement directly instead of building your own. The filter statement is based on the row data definition for the current row plus any section filter, as defined in the FixedReportConfig data source (and the FixedReportSectionConfig data source, if applicable).

NOTE: It is not possible to define a default selected row value for the report. When the report is initially rendered, any values in the [SelectedRowValue] column are ignored.

[ActionRowValue]

System-controlled field. This field is populated with the corresponding value for the report column defined in this row of the data source, based on the report row where the user triggered an action by clicking on an icon. This field only applies if icon actions are being used in the [Icon] or [HoverAction] fields. This field is automatically updated by Axiom Software when a user clicks an interactive icon in the report.

When a user clicks an interactive icon in the report, the value in that row for each column is written to the [ActionRowValue] field. For example, if the user clicks on an icon in the row containing Dept 40000, then the value 40000 is written to the data source for the row that defines the Dept.Dept column. These values can be referenced by the icon action, such as to display more information about the current department in a Dialog Panel.

Additionally, a filter statement for the action row is written to the Action Row Filter field for the component on the Form Control Sheet. You can optionally reference this filter statement directly instead of building your own. The filter statement is based on the row data definition for the current row plus any section filter, as defined in the FixedReportConfig data source (and the FixedReportSectionConfig data source, if applicable).

[IsVarianceColumn]

Optional. Specifies whether the column is a variance column (True/False). The only purpose of flagging a column as a variance column is to use the [InvertVarianceColumns] property in the FixedReportConfig data source. This feature allows you to reverse the number sign for the calculation in certain sections of the report. If [IsVarianceColumn] is True, and if [InvertVarianceColumns] is True, then the calculation is multiplied by -1 within the rows of that section.

NOTES:  

  • The primary tag must be placed in the first 500 rows of the sheet.
  • Formulas can be used to create the tags, as long as the initial bracket and identifying keyword are whole within the formula. For more information, see Using formulas with Axiom feature tags.

To use the Data Source Wizard to add the tags to a sheet, right-click in a cell and then select Create Axiom Form Data Source > Fixed Report Columns. You can also highlight a range of data first and then use the wizard to add the tags around that data. The cells in the row above and the column to the left of the selected area must be blank in order for Axiom to place the tags in sheet.

The following example shows a sample FixedReportColumns data source tagged in a sheet:

Example FixedReportColumns data source

The resulting report for the example data source shown above looks as follows:

Example columns generated from the FixedReportColumns data source

Component properties

You can define the following properties for a Fixed Report component.

Component properties can be configured using the Form Assistant task pane or the Form Designer unless otherwise noted. All properties can also be defined on the Form Control Sheet directly if desired. For example, if you want a property to be dynamic depending on the result of a formula, you can define that formula in the control sheet. To access the control sheet settings for the component, double-click any property name to go to that property in the Form Control Sheet.

Component behavior properties

The following properties control the display and behavior of this particular component type.

Item Description

Title Text

The title text for the component. This text displays in the title bar for the component within the Axiom form, if the title bar is enabled.

Show Title Bar

Specifies whether the title bar is visible. By default this option is enabled, which means that the component will display in a bordered box with a title bar across the top. The defined title text displays within the bar. The formatting of the title bar and its border are determined by the skin specified for the form.

If disabled, then the title bar and its border will not display on the component.

If the title bar is enabled and the component also has a separately defined border (either via a style or by using the formatting overrides in the advanced component settings), then both borders will display on the component. In some cases this effect may be desired; in other cases one of the borders should be disabled.

Primary Table

The primary table for the data query that is used to populate the report. Enter any valid table name from the Table Library. The primary table determines which table columns are valid to include in the report. System tables (such as Axiom.Columns) cannot be used as the primary table.

For example, if you specify GL2019 as the primary table, then the query can retrieve data from that table, plus any reference tables that the primary table looks up to. If you want to include data from multiple data tables, you can include any table that shares keys with the primary table, as well as any shared lookup reference tables.

Data Filter

Optional. A filter to limit the data returned by the query and displayed in the report. Enter a filter criteria statement that is valid in the context of the primary table. If no filter is defined, all data that matches the query is displayed in the report.

Suppress Zeros in Data Rows

Optional. If enabled, then data rows that contain all zeroes are suppressed from showing in the fixed report.

Non-key columns that meet both of the following criteria are evaluated to determine whether a row should be hidden:

  • The column data type is Integer (all types) or Numeric.
  • The column is from the primary table or an additional data table.

If the primary table is a data table, Integer and Numeric columns on lookup reference tables are ignored—meaning these columns may have values, but the row is still suppressed if all applicable data table columns have zero values. There is one exception: reference table columns are considered if the column classification is Values and the numeric type is Currency.

Calculated columns defined in the fixed report are not evaluated for this purpose and do not prevent a row from being hidden.

If all rows in a particular section are zero-data rows, the associated section header and subtotal row (if present) are not automatically hidden. You can enable the separate option Hide Empty Sections to hide these items.

Columns Data Source

The FixedReportColumns data source for the report. You must have defined the data source within the file using the appropriate tags in order to select it.

NOTE: In the Form Control Sheet, the selected data source is written as SheetName!DataSourceName. The sheet name is the sheet where the selected data source is located.

If a data source is already specified and you want to locate it within the file, click the Show location button to the right of the drop-down list. This will move your cursor to the associated data source tag in the file.

Fixed Report Data Source

The FixedReportConfig data source for the report. You must have defined the data source within the file using the appropriate tags in order to select it.

NOTE: In the Form Control Sheet, the selected data source is written as SheetName!DataSourceName. The sheet name is the sheet where the selected data source is located.

If a data source is already specified and you want to locate it within the file, click the Show location button to the right of the drop-down list. This will move your cursor to the associated data source tag in the file.

Component Dependencies

Optional. Specifies one or more components that the Fixed Report component is dependent on.

If you want the report to dynamically update based on changes made to other components, list one or more component names in this field. Separate multiple component names with commas.

If a component name is listed here, then the report is refreshed when a form update submits a change to the listed component. If no component names are listed here, or if the listed components are unchanged, then the report is not refreshed when a form update occurs (unless the update includes a save-to-database).

Components listed as component dependencies must be interactive components, such as Combo Box components, Check Box components, and so on. The purpose of this option is that you want to enable refreshing the report based on a change a user made to an interactive component. Non-interactive components, such as Label components, cannot submit values back to the source file and cannot trigger form updates. Therefore, non-interactive components cannot cause the report to refresh.

NOTES:  

  • Standard Button components can be used as component dependencies. If a button uses the default Command behavior, then whenever the listed button triggers a form update, the report will be refreshed. However, if the button uses a specialized button behavior, or if the button uses a command that alters the normal form update behavior, then the button may not cause the report to refresh.

  • The report cannot be dependent on a component used in a Dialog Panel component. However, if an OK or Apply button in the Dialog Panel component triggers a save-to-database, then the report is automatically updated (with no component dependencies required).

For more information, see Update behavior.

Hide Empty Sections

Optional. Specifies whether data row sections with no rows are hidden in the fixed report.

By default, this option is disabled, which means that all data row sections defined in the FixedReportConfig data source are shown in the report, regardless of whether any data rows were returned for the section.

If this option is enabled, then data row sections with no data rows are hidden, including any associated section header text and section subtotal row. Additionally, if all of the data row sections referenced by a [Subtotal] or [Total] row are hidden, then that subtotal or total row is automatically hidden as well.

Whether a data row section is considered to be empty depends on how the row data is defined:

  • If a data row section uses a Table.Column to dynamically generate the rows, then the section is empty if no matching rows are returned from the database, or if no rows are visible due to Suppress Zeros in Data Rows.

  • If a data row section uses a FixedReportSectionConfig data source to define individual rows, then the section is never empty by default. If no matching data is returned from the database, the defined rows display with zeros. However, if Suppress Zeros in Data Rows is also enabled, then the section is considered empty if all of the defined rows are hidden due to zero suppression.

Enable Row Selection

Specifies whether users can select a row in the report. By default this is disabled, which means rows are not selectable in the report.

If enabled, then rows are selectable in the report. When a user selects a row, the values for that row are written back to the FixedReportColumns data source, in the SelectedRowValue column. A filter representing the current row (based on the sum by columns for the report) is also written back to the Selected Row Filter field in the Form Control Sheet. The form can be configured to change in some way based on the currently selected row. For more information, see Interactive behavior.

Total and subtotal rows cannot be selected.

Auto Submit

Specifies whether the Axiom form automatically updates when a user selects a row in the report. This option only applies if Enable Row Selection is enabled.

By default, auto submit is disabled. You should leave this option disabled if you have not enabled row selection. However, if you have enabled row selection, then in most cases you will want to enable auto submit as well.

If both auto submit and row selection are enabled, then the form automatically updates when the user selects a row in the report (by clicking on it). If auto submit is disabled but row selection is enabled, then the user must use a separate Button component (or a different auto-submit component) in order to update the form for the selected row.

Enable Excel Export

Specifies whether users can export the report contents to an Excel spreadsheet (XLSX).

  • If enabled, an Export to Excel button displays over the top right corner of the report, so that users can export the report contents.
  • If disabled (default), the button does not display.

When a user clicks the Export to Excel button, the contents of the report are exported to an Excel spreadsheet. Configured number formats are not preserved, but default number formatting is applied based on the column data type.

The name of the exported file is the Title Text for the component, if defined. Otherwise, a system generated name is used. It is recommended to define title text for this purpose when using the export feature, even if the title bar is not enabled.

The following features are not supported with the export feature:

  • Icons: Icons are omitted from the export.
  • Column group headers: Column group headers are omitted from the export.

For more information, see Exporting Fixed Report contents to a spreadsheet.

Enable Drilling

Optional. Select this check box to enable drilling for the report. If enabled, users can "drill down" a row in the report to see the data in that row at a different level of detail.

The remaining properties in this section, such as Drill Button Tooltip and Drilling Hierarchies, only apply if drilling is enabled. For more information about setting up and using drilling for a Fixed Report component, see Setting up drilling for Fixed Report components in Axiom forms.

Selected Row Filter

A filter statement representing the currently selected row, based on the row data definition. This system-controlled field is automatically populated when a user selects a row in the report. This field is only located on the Form Control Sheet, and only applies when Enable Row Selection is enabled. You can optionally reference this value when setting up form interactivity based on the selected row.

NOTE: This property is only available on the Form Control Sheet; it does not display in the Form Assistant or in the Form Designer.

Action Row Filter

A filter statement representing the icon action row, based on the row data definition. This system-controlled field is automatically populated when a user clicks on an action icon in the report. This field is only located on the Form Control Sheet. You can optionally reference this value when setting up form interactivity based on the action row.

NOTE: This property is only available on the Form Control Sheet; it does not display in the Form Assistant or in the Form Designer.

General properties

The following general properties are available for all components:

Item Description

Component Name

The name of the component. This is for identification in the file; this name does not display on the Axiom form canvas.

The name of the component identifies the corresponding settings for the component on the Form Control Sheet. The component names are also useful if you have multiple types of the same component within an Axiom form, so that you can tell which component you are currently editing.

Component names must be unique within a file and must start with a letter. Names can only contain letters, numbers, and underscores. Names are validated when the file is saved; an invalid name will prevent the save.

NOTE: Spaces are not allowed in component names and will be automatically removed by Axiom Software. For example, if you enter "My Component" as the component name, it will be automatically adjusted to "MyComponent".

Visible

Specifies whether the component is visible on the Axiom form (On/Off). By default this is set to On.

This setting can be used to dynamically show or hide the component using a formula. Keep in mind that if you have multiple components that you need to dynamically show or hide based on the same condition, then it is preferable to place those components on a dedicated layer and then show or hide the entire layer instead of the individual components.

NOTE: This setting is only available on the Form Control Sheet; it cannot be set in the Form Assistant or in the Form Designer.

Layer

The layer that the component belongs to on the Axiom form canvas. In the Form Assistant and the Form Designer, this displays as the layer name (for example: Layer 1). In the Form Control Sheet, this is recorded as the layer ID (for example: 1).

If the canvas only has one layer, then the component is automatically assigned to that layer and cannot be changed. If the canvas has multiple layers, you can assign the component to any layer using the drop-down list. By default, the component will be assigned to whichever layer is selected in the Layers box when you initially drag the component onto the canvas. For more information on layers, see Using multiple layers on the canvas.

If desired, you can jump to the applicable layer settings on the Form Control Sheet by clicking the binoculars icon next to the drop-down list.

Parent

The parent component that this component is assigned to. If blank, then the component does not have an assigned parent. Currently, only Panel components can be designated as parents.

If a component has an assigned parent, then that component is positioned within the parent instead of within the canvas at large. If the parent is hidden, all "child" components of that parent are also hidden.

The parent assignment is automatically completed when a component is dragged into a panel in the Form Designer, and automatically cleared when a component is dragged out of a panel. In most cases, you should not need to manually assign a parent.

For more information, see Using panels to group and position components.

Style and formatting properties

To define the component formatting, you can assign one or more styles to the component. Styles can impact formatting properties such as fonts, borders, and colors.

If you do not want to apply a style to this component, or if you want to override one or more formatting properties in an assigned style, click the Show Advanced Settings link underneath the Style box to display the individual formatting properties. For more information on defining individual formatting properties for a component, see Formatting overrides for Axiom form components.

For Fixed Report components, the component-level style only impacts the external report container; it does not affect the internal report contents.

Item Description

Style

Optional. The styles used to determine the formatting of the component. You can assign one or more styles.

Click the Select component styles button [...] to open the Choose Style dialog. Using this dialog, you can select one or more styles to apply to the component. The available styles depend on the component type and the skin assigned to the form. For more information, see Using component styles.

Some components have several styles that are specifically designed for that component type, while other components may only have the "generic" styles that are available to all components. When using a generic style, keep in mind that they may not be useful for all components. You can view a description of each style and view the effective formatting applied by the selected styles within the Choose Style dialog.

Component Theme

(Deprecated.) The theme to use for the component instead of the form-level theme. If left blank, the component uses the form-level theme.

This setting should be left blank unless you need to override the form theme. Generally speaking, themes should be set at the form level and only overridden at the component level when necessary.

This setting is available in the advanced component properties (click Show Advanced Settings under the Style box). On the Form Control Sheet, the setting displays using the name Theme Override.

NOTE: This setting only applies if your form uses a legacy skin (any skin except the default Axiom2018). The Axiom2018 skin does not use themes.

Position and size properties

You can view the position and size properties for a component by clicking the Show Advanced Settings link under the Style box. If necessary, you can edit these properties directly (instead of automatically modifying them by adjusting the component's position and size on the canvas). For more information on using these settings, see Controlling component position and size.

Item Description

Reference Location

The reference location determines how the x-position and y-position of a component are evaluated. By default the reference location is UpperLeft.

NOTE: This setting is not exposed in the advanced component settings. It can be changed on the canvas by double-clicking the corner selection handles of a component, or you can edit the setting on the Form Control Sheet directly.

X Position

Y Position

The x-position determines the component's position along the horizontal axis, and the y-position determines the component's position along the vertical axis. Both are evaluated relative to the reference location. Positions can be set in pixels (default) or percentages.

Width

Height

The width and height determine the size of the component. The width and height can be set in pixels (default) or percentages. Size keywords are also available to support special behavior.

Rendering Order

The order in which the component is rendered in the layer. A component with a larger order number will display above a component with a smaller order number.

For components that support tab navigation (tabbing to the next editable component), the rendering order also determines the tabbing order.

NOTE: On the Form Control Sheet, this setting is labeled as Z-Index.

Lock Layout

If enabled, the component size and position are locked and cannot be changed by dragging and dropping on the canvas. This optional setting is intended to protect against accidentally moving or resizing a component while working on the canvas.

Update behavior

When the Axiom form is initially rendered, the Fixed Report component queries data from the Axiom Software database based on its component settings and its data source settings. This data and the overall report state (such as visible columns) will remain the same until one of the following occurs:

  • If the form uses refresh variables, applying changed refresh variables via the Filters panel will refresh the report. This means that the report can be set up to change its data based on the selected value of a refresh variable.

  • If one or more components are listed in the Component Dependencies property for the Fixed Report component, the report is refreshed when a changed value is submitted for one of those components. Otherwise, if no components are listed, or if no changes are submitted for listed components, then form updates triggered by interactive components do not cause the report to refresh.

  • If a save-to-database is executed for the form, the report is automatically refreshed. This refresh occurs regardless of whether the Save on Submit component is listed as a component dependency.

By default, when an update is triggered in the form, the report is preserved as is. The data query is not run again and the data sources are not read again. This behavior is intended to improve performance by not executing the data query and not redrawing the report every time a form update occurs.

For example, imagine that the form contains a Combo Box component that is set to auto-submit. When a user selects a value from the combo box, this value is submitted to the source file and a form update is triggered. Under normal circumstances, if another component is configured to dynamically change based on the currently selected value for the combo box, this change would be reflected in the form once the form update is complete. However, the Fixed Report component does not update in this circumstance. Even if the selected value for the combo box impacts a report property—such as the primary table, or the data filter, or the visible columns—the report will not change during this form update.

If you want the Fixed Report component to update based on the selected value of the Combo Box component, then you must list the name of the Combo Box component in the Component Dependencies property for the Fixed Report component. For example, if the Combo Box component is named ComboRegion because it is used to select a region, you would list ComboRegion as a component dependency.

Now when a change is submitted for the Combo Box component named ComboRegion, the Fixed Report component is refreshed. The data query is run based on the current component properties and data source properties, and the state of the report is reset. This occurs at the end of the form update process, when the form display is updated in the browser.

When a form update is triggered, Axiom Software checks to see if any component names are listed in the Component Dependencies property of the Fixed Report component. You can list multiple component names, separated by commas. If any components are listed, Axiom Software then checks to see if any of those components are included in the current form submission. If none of the listed components are included, the Fixed Report component is not refreshed during the form update. If one or more of the listed components are included, then the Fixed Report component is refreshed.

NOTES:  

  • The components in Component Dependencies do not have be set to auto-submit in order to refresh the Fixed Report component. If an interactive component is changed but it is not configured to auto-submit, then its change will be submitted when the next form update is triggered (either by a Button component, or by a different component that is configured to auto-submit). The Fixed Report component will still recognize the component change, even though the change was submitted by a different component.

  • The report cannot be dependent on a component used in a Dialog Panel component. However, if an OK or Apply button in the Dialog Panel component triggers a save-to-database, then the report is automatically updated (with no component dependencies required).

  • If the Fixed Report component is used in a child embedded form, enabling force refresh in the Menu data source will cause the report to update in response to changes that would affect the report state. For example, if the data filter for the report is based on a shared variable, using force refresh will cause the report to update when the user navigates back to the menu tab for the child form (and the shared variable value has changed). Note that the report will not update if force refresh is enabled in the Embedded Form component properties instead of the Menu data source.

Interactive behavior

If Enable Row Selection is enabled for the Fixed Report component, users can select a data row in the report. The values in the selected row are submitted back to the source file, and written to the SelectedRowValue column of the FixedReportColumns data source. A filter representing the current row is also written back to the Selected Row Filter field in the Form Control Sheet.

If you want the Axiom form to respond to the currently selected row, then you must set up the file so that another component references one or more of the selected values (or the filter), and changes based on those values. For example, you could have a chart that updates to show information about the department for the currently selected row. For general information on setting up interactive components for an Axiom form, see Using interactive components in an Axiom form.

The row selection feature is the primary means of impacting the form based on user interaction in the report. However, you can also set up interactive behavior for icons displayed in the report, to execute a command when a user clicks on an icon. For more information on using actions with icons, see Using the IconConfig data source with Fixed Report components.

Example

A fixed report could display a summary income statement:

If a user selects the Revenue row, then the values in that row are submitted back to the source file and written to the SelectedRowValue column in the FixedReportColumns data source:

The filter for the current row is also written to the Selected Row Filter in the Form Control Sheet:

There are a number of ways that the form could respond to the selected value in the report. For example, you might want to display detailed information about the selected row in a chart. The chart would need to be set up with formulas that look to the appropriate cells of the SelectedRowValue column (or to the Selected Row Filter field), so that the data in the chart changes based on the currently selected value.

Creating column groups for the report header

You can create column groups in the FixedReportColumns data source, for purposes of defining additional header text that spans the column group. This works as follows:

  • The row tag [ColumnGroup] indicates that you want to start a group. All columns that follow this tag belong to the group, until the group is ended.

    The data source properties of [Header] and [HeaderAlignment] can be used with [ColumnGroup] rows, to indicate the header text for the column group, and to indicate the alignment of that text across the grouped columns. If no alignment is specified, the default is centered. No other data source properties apply, and will be ignored if set.

  • The row tag [EndGroup] indicates that you want to end a column group. This tag can be omitted if the group extends to the end of the column list. Data source properties do not apply to [EndGroup] rows. If an [EndGroup] tag cannot be matched to a corresponding [ColumnGroup] tag, an error occurs when rendering the component.

For example, you may want to define grouped header text such as "Q1" for the columns representing the months of the first quarter. You can place those columns in a column group and define header text for the group using the [Header] property. After the last column in the first quarter, you can end the group and then start a new group for Q2.

Groups can be nested for multiple levels of column headers. The [EndGroup] tag ends the closest column group to the tag, leaving any other column groups open. If you want to end multiple groups, you must have multiple end tags.

The following example data source shows two levels of column groups. The first, top-level column group indicates the year for the columns (2018). Then multiple, second-level column groups indicate the relevant quarter (Q1, Q2, etc.).

Example data source with nested groups

The first end tag in row 14 ends the closest column group, which is the Q1 group. The next tag in the data source starts the Q2 column group. The 2018 column group is left open to continue to span over all of the quarter groups. When the end of the Q4 group is reached, there are two end tags to end both the Q4 group and the 2018 group (rows 32 and 33).

When the component is rendered, the headers look as follows:

NOTES:  

  • Header text for a column group is optional. You may want to use column groups with no header text as "spacer" rows, to accommodate headers with varying levels of groupings.

  • Column groups cannot be used within frozen columns. If a column belongs to a column group but is also flagged as a frozen column, the frozen status is ignored. It is not possible to define column groups within the frozen columns area.

Sign reversal for variance columns

You can perform sign reversal on certain calculated columns in a Fixed Report component, on a section by section basis. This is intended for cases where the column contains a variance calculation, and the variance needs to be shown differently for different sections in the report. For example, when comparing budget to actuals in a report, you may want revenue sections to show positive variance (Actuals-Budget) while expense sections show negative variance (Budget-Actuals).

Sign reversal can be enabled using the following columns in the FixedReportColumns data source and the FixedReportConfig data source:

  • For calculated columns where you want to enable sign reversal, enter True into the [IsVarianceColumn] field of the FixedReportColumns data source.

  • Then for each section where you want the sign to be reversed, enter True into the [InvertVarianceColumns] field of the FixedReportConfig data source. You can enable this option on [DataRowSection] rows to reverse the sign on all data rows in the section, including the associated section subtotal row (if present). If you want to reverse the sign on separate [Subtotal] or [Total] rows, you must separately enable the option on those rows.

    In this example, the variance calculation is defined as Budget-Actuals, so the sign reversal should be performed on the Revenue section and on the Net Income total row. If instead the variance calculation was defined as Actuals-Budget, then the sign reversal should be performed on the Expenses sections and their separate subtotal.

The Fixed Report component in this example looks as follows:

PDF design considerations

The following design considerations apply when generating a PDF of an Axiom form with a Fixed Report component:

  • The report is automatically extended to show all rows in the PDF. It does not matter which rows are currently visible in the form.

  • Report columns are resized to fit the component width in the PDF, regardless of their configured column size. If the columns exceed the page width, the remaining columns are omitted from the PDF. You should set the PDF page size and orientation as needed to fit the columns. For example, a wide report with many columns should be set to Landscape.

  • Header groups are all shown in the same shade of gray in the PDF, instead of the varying shades shown in the report.

Design alternatives

The Fixed Report component is designed to handle a very specific purpose, to display reporting data using a fixed-row format. If the fixed-row format is a requirement, but you need more flexibility in the report design, you can use a Formatted Grid component. For example, you might use a Formatted Grid component in the following cases:

  • When you need to use more advanced data query configurations or features. You can use Axiom queries to bring data into the source file, and then use the Formatted Grid component to display that data in the form.

  • When you need users to be able to edit data in the report and save the changed data to the database. Formatted Grid components support many options for editing data.

  • When you need the ability to format the report contents at a more granular level. Formatted Grid components support a variety of formatting options to format grid contents, including fonts, colors, and borders.

If the fixed-row format is not a requirement, and you want users to be able to have more features to explore data, then you can use a Data Grid component. The Data Grid component provides built-in sorting, filtering, and grouping tools.

Video: How to create a fixed report in an Axiom form