In many reports, it is necessary to process duplicate values. For example, multiple instances of the Text component can be merged into a single one if they contain identical values. To achieve this, use the Processing Duplicates property of the Text component.

 

 

Main Property Modes

The table below describes the primary modes available for duplicate processing.

 

Name

Description

None

No duplicate processing is performed. All elements are displayed in the report unchanged, even if they contain identical data.

Merge

Combines adjacent elements with identical content into a single block.

Hide

Leaves the first occurrence unchanged and hides all subsequent adjacent elements with duplicate content.

Remove Text

Leaves the first occurrence unchanged and removes the text from all subsequent adjacent elements with duplicate content.

 

 

An example of duplicate text value processing is shown below

 

None

Merge

Hide

Remove text

Item

Item

Item

Item

Item

 

 

Item

 

 

 

 

In most cases, these basic modes are sufficient. Additional (advanced) modes are typically required only for more complex report structures or when specific duplicate-processing requirements need to be met.

 

 

Additional (Advanced) Property Modes

The advanced processing modes include the modifiers Global and/or BasedOnXXX in their names. Let’s review these modes one by one.

 

Global Modes

By default, duplicate values are processed separately for each component. Only instances of the same component (identified by name) are compared. For example, if two text boxes with identical text values are placed one below the other but belong to different components, they will not be merged.However, in reports with more complex structures, it may be necessary to bypass this limitation. In such cases, use the modes whose names contain the word Global: Global Merge, Global Hide, and Global Remove Text. These modes work exactly like their standard counterparts described above, but component names are ignored during duplicate detection.

 

Based On Tag Modes

Situations often arise where duplicate values should not all be merged together, but only within a specific context or according to certain criteria. For example, in the table below, sales of items are shown for several days, and identical items should be merged only within the same day. Standard modes merge all consecutive duplicates based solely on the text box content, without taking any other factors into account. In such cases, modes whose names contain the word BasedOnTag should be used. These modes perform duplicate processing based not on the text box content, but exclusively on the value of its Tag property. The Tag property can contain a complex expression that takes multiple criteria into account, allowing duplicate processing to be customized for specific scenarios.

 

Date

Items

Expected

Merge Based on Tag

Merge

1.05.2026

Item 1

Item 1

Item 1

Item 1

Item 2

Item 2

Item 2

Item 2

Item 2

2.05.2026

Item 2

Item 2

Item 2

Item 1

Item 1

Item 1

Item 1

Item 1

3.05.2026

Item 1

Item 1

Item 1

Item 1

 

 

For example, suppose the second column displays an item name using the expression {dataSource.ItemName}, while the first column displays a date using {dataSource.Date}. If the date should be used as the grouping criterion, the following expression should be assigned to the Tag property of the text component: {dataSource.ItemName}{dataSource.Date}. In other words, the expression displayed in the component is combined with expressions representing the grouping criteria from preceding columns. As a result, duplicate values are merged only within the specified criteria.

 

Based On Value And Tag Modes

Now let's discuss the most complex part -the modes whose names include the BasedOnValueAndTag modifiers. First, it is important to understand that all other modes operate only during the report post-processing stage. In other words, the report is generated in its entirety first, and only then does the engine iterate through the report pages, search for duplicate values, and process them. As a result, after duplicate processing is completed, the positions and sizes of components remain unchanged.

 

For example, in the illustration below, the third column contains category descriptions. Some descriptions are long and occupy three lines of text. After a standard cell merge operation, the cell sizes remain unchanged. Each text row still occupies the same amount of space, and the merged cell retains a large overall height.

 

 

 

Therefore, modes have been added that process text components in two stages. The first stage is an additional step performed during the calculation of the text component value (in the OnGetValue event). At this stage, when a duplicate is detected, the content of the text component is immediately cleared, reducing its height to the minimum. This directly affects the size of the text component and, consequently, the height of the row. The second stage, as in the other modes, processes the components after the entire report has been rendered. At both stages, the text component value and the value of its Tag property are used.

 

Information

 

The first occurrence of a duplicate value always retains its content and therefore keeps its full height. Only subsequent duplicate components are reduced in height. This is a limitation of the reporting engine and cannot be changed. If the height of the first row must also be reduced, consider alternative approaches, such as redesigning the report structure and using a master-detail relationship.

 

 

 

The table below provides a complete list of duplicate-processing modes.

 

Name

Description

None

No duplicate processing is performed. All elements are displayed in the report unchanged, even if they contain identical data.

Merge

Merges adjacent elements with identical content into a single block.

Hide

Leaves the first occurrence unchanged and hides all subsequent adjacent elements with duplicate content.

Remove Text

Leaves the first occurrence unchanged and removes the text from all subsequent adjacent elements with duplicate content.

Merge based on Tag

Merges adjacent elements that have the same Tag property value.

Hide based on Tag

Leaves the first occurrence unchanged and hides all subsequent adjacent elements that have the same Tag property value.

Remove Text based on Tag

Leaves the first occurrence unchanged and removes the text from all subsequent adjacent elements that have the same Tag property value.

Global Merge

Merges duplicate elements even when they belong to different components.

Global Hide

Hides duplicate elements even when they belong to different components.

Global Remove Text

Removes text from duplicate elements even when they belong to different components.

Remove based on Value Text

Leaves the first occurrence unchanged and removes the text from all subsequent adjacent elements with duplicate content.

Merge based on Value and Tag

Merges adjacent elements that have both identical content and the same Tag property value.

Hide based on Value and Tag

Leaves the first occurrence unchanged and hides all subsequent adjacent elements that have both identical content and the same Tag property value.

Global Remove based on Value Text

Clears text in duplicate elements based on the Tag value, even when the elements belong to different components.

Global Merge based on Value and Tag

Merges adjacent elements that have the same Tag property value, even when they belong to different components.

Global Hide based on Value and Tag

Leaves the first occurrence unchanged and hides all subsequent adjacent elements that have the same Tag property value, even when they belong to different components.