# Get Started With Banded Reports

Learn how you can create a banded report using ActiveReportsJS.

## Content

### Introduction

A banded report is a way to present your data with a list-like view where each data record displays in a free-form layout fashion. In ActiveReportsJS you can build such a report using [List](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/List) or [Banded List](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList) data regions. We recommend using the latter because it provides a flexible layout organized with multiple types of sections called `bands`. Examples of banded reports are product catalogs, people directories, and others.

In this tutorial, we build the Employee Directory from the ground up, providing experience with the typical report designing process. By the end, you will be able to do the following:

* Create a new report
* Bind the report to the OData API
* Use the OData [$select](https://www.odata.org/getting-started/basic-tutorial/#select) query option to reduce the volume of retrieved data
* Create a [Banded List data region](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList)
* Configure [data grouping](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#banded-list-grouping) within the Banded List and use [header](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#header), [group header](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#group-header), and [details](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#details) sections to display various bits of information
* Use the [Container](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Supplemental-Report-Items/Container) report item to decorate bands appearance
* Use the [TextBox](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Visualizers/TextBox) report item to display textual information
* Use the [Image](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Visualizers/Image) report item with [Conditional Data Binding](/activereportsjs/docs/v6.1/ReportAuthorGuide/Expressions/Functions/program-flow#iif)
* Display the [Report Map](/activereportsjs/docs/v6.1/ReportAuthorGuide/Interactivity#report-map) for easy navigation through the report

Upon completion of all tutorial steps, the final report will look like this: [live demo](/activereportsjs/demos/Reports/GetStartedWithBandedReports/purejs).

### Prerequisites

The following content assumes that you have the Standalone Report Designer running. Visit the [tutorial](/activereportsjs/docs/v6.1/ReportAuthorGuide/QuickStart/Get-Started-With-Designer-App) for detailed information. A stable internet connection is also required to access the [Demo Data Hub](https://demodata.mescius.io).

### Creating a New Report

In the standalone report designer, click the [File menu](/activereportsjs/docs/v6.1/ReportAuthorGuide/QuickStart/Get-Started-With-Designer-App#file-menu) and select the [Continuous Page Layout](/activereportsjs/docs/v6.1/ReportAuthorGuide/report-configuration/Report-Layouts#continuous-page-layout) template for a newly created report. Click anywhere on the gray area around the report layout to load the report properties in the [properties panel](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Designer-Interface#properties-panel). In the `Margins` section, set the `Style` property to `Narrow` to change the [report page](/activereportsjs/docs/v6.1/ReportAuthorGuide/report-configuration/layout-properties#page-settings) margins size.

DOC-DETAILS-TAG-OPEN
DOC-SUMMARY-TAG-OPEN
Expand to watch creating a new report in action
DOC-SUMMARY-TAG-CLOSE
![CreatingNewReport.4ae444](https://cdn.mescius.io/document-site-files/images/fcb03d52-fb54-40c3-8356-825c2a095d5b/CreatingNewReport.4ae444.eb6370.gif)
DOC-DETAILS-TAG-CLOSE

### Data Binding

[Data binding](/activereportsjs/docs/v6.1/ReportAuthorGuide/Databinding) establishes a connection between a report and the data it displays. In this tutorial, we use the [MESCIUS Demo OData API](https://demodata.mescius.io/swagger/index.html?urls.primaryName=OData%20Contoso) that contains the sales data for a fictitious company called Contoso that is a manufacturing, sales, and support organization with more than 100,000 products.

### Adding Data Source

You can think of the [Contoso OData API](https://demodata.mescius.io/swagger/index.html?urls.primaryName=OData%20Contoso) as the "database" that you can connect to using its root URL `https://demodata.mescius.io/contoso/odata/v1`, and that has multiple "tables" which presented with endpoints such as [/DimCustomers](https://demodata.mescius.io/contoso/odata/v1/DimCustomers), [/DimStores](https://demodata.mescius.io/contoso/odata/v1/DimStores), and [/DimProducts](https://demodata.mescius.io/contoso/odata/v1/DimProducts). You can create a Report DataSource that establishes the connection to such a "database" using the following steps.

* Open the [Data panel](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Designer-Interface#data-panel) of the property inspector and click the `Add` button.
* In the Data Source editor dialog, type `Contoso` in the NAME field and `https://demodata.mescius.io/contoso/odata/v1` in the ENDPOINT field.
* Click the `Save Changes` button

![image](https://cdn.mescius.io/document-site-files/images/2c0943df-d937-4f5c-966c-3390ae8bbb34/image.83ebfc.png)

### Adding Data Set

Data Sets represent one or more endpoints of the Data Source. For the Employee Directory Report, we need to access the data from the [/DimEmployees](https://demodata.mescius.io/contoso/odata/v1/DimEmployees) endpoint of the Contoso Data Source that we added in the previous section.

Use the following steps to add the `Employees` data set:

* Click the `+` icon near `Contoso` in the Data panel.
* In the Data Set Editor dialog, type `Employees` in the NAME field, `/DimEmployees` in the Uri/Path field, and `$.value.*` in the `Json Path` field.
* By default, each `Employee` record includes 28 fields, but we don't need them all. Therefore we limit the retrieved fields by applying the OData [$select query option](https://www.odata.org/getting-started/basic-tutorial/#select) via a query parameter.
    * Click the `+` icon on the right side of the `Parameters` section.
    * Type `$select` in the `Parameter` field of the newly added `Parameter` item.
    * Type `FirstName, LastName, MiddleName, Title, EmailAddress, Phone, DepartmentName, AvatarUrl` in the `Value` field of the same `Parameter` item.
* Click the `Validate` button.
* Ensure that the `DataBase Fields` section displays `[8 items]` text.
* Click the `Save Changes` button.

DOC-DETAILS-TAG-OPEN
DOC-SUMMARY-TAG-OPEN
Expand to watch adding the Employees data set in action
DOC-SUMMARY-TAG-CLOSE
![](https://cdn.mescius.io/document-site-files/images/e637becb-8cbc-4561-bac1-84462097b057/reportauthor-guide/GetStartedWithBandedReports/AddingDataSet.gif)
DOC-DETAILS-TAG-CLOSE

### Adding Banded List

To display the employee directory, we will use [Banded List](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList):

* Expand the [toolbox](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Designer-Interface#toolbox) using the `Hamburger` menu located on the left side of the toolbar.
* Drag and drop the `Banded List` item from the toolbox to the report page area's top-left corner.
* Switch to the [Properties panel](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Designer-Interface#properties-panel) in the Property inspector.
* Select the `Employees` item in the `Data Set Name` drop-down and set the `Width` property to `7.5in` so that the banded list occupies the available printable area defined by the report [page size and margins](/activereportsjs/docs/v6.1/ReportAuthorGuide/report-configuration/layout-properties#page-settings).

DOC-DETAILS-TAG-OPEN
DOC-SUMMARY-TAG-OPEN
Expand to watch adding the Banded List in action
DOC-SUMMARY-TAG-CLOSE
![](https://cdn.mescius.io/document-site-files/images/e637becb-8cbc-4561-bac1-84462097b057/reportauthor-guide/GetStartedWithBandedReports/AddingBandedList.gif)
DOC-DETAILS-TAG-CLOSE

### Configuring Header Section

By default, the newly added Banded List has the [Header section](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#header) that displays either once at the beginning or at the start of each page, the [Details section](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#details) that appears once per each data record, and the [Footer section](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#footer) that shows up either once after all sections complete rendering or on each page.

We use the Header section to display the report title:

* Click anywhere inside the banded list to display the [band handlers](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#banded-list-designer).
* Click the first section's handler and set its height to `0.75in` in the [Properties panel](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Designer-Interface#properties-panel).
* Turn off the `Repeat On New Page` switch.
* Expand the toolbox using the `Hamburger` menu located on the toolbar's left side.
* Drag and drop the [TextBox](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Visualizers/TextBox) item from the toolbox to the header section's top-left corner.
* Set the following properties for the newly added textbox in the properties panel.

| Property | Value |
| -------- | ----- |
| Value | Employee Directory |
| Font Size | 26pt |
| Vertical Align | Middle |
| Left | 0in |
| Top | 0in |
| Width | 7.5in |
| Height | 0.75in |

DOC-DETAILS-TAG-OPEN
DOC-SUMMARY-TAG-OPEN
Expand to watch configuring the Header section and setting the value of the textbox in action
DOC-SUMMARY-TAG-CLOSE
![](https://cdn.mescius.io/document-site-files/images/e637becb-8cbc-4561-bac1-84462097b057/reportauthor-guide/GetStartedWithBandedReports/ConfiguringHeader.gif)
DOC-DETAILS-TAG-CLOSE

### Adding Data Grouping

Employees in the `Contoso` database belong to different departments, such as `Production`, `Marketing`, etc. Thus, we can group the employee directory by the department name.

* Switch to the [Data panel](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Designer-Interface#data-panel) in the Property inspector.
* Expand the "Employees" data set using the chevron-down icon.
* Click anywhere inside the banded list to display the [Group editor](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#banded-list-designer).
* Drag and drop the `DepartmentName` field to the Group Editor's `<New Group>` highlighted area.
* Select the newly appeared `BandedList1_DepartmentName1` item in the group editor.
* Switch to the Properties panel of the Property Inspector.
* Set the newly added group name to `DepartmentName`.
* Set the `Page Break` property of the group to `Between` so that each group instance starts on the new page.

DOC-DETAILS-TAG-OPEN
DOC-SUMMARY-TAG-OPEN
Expand to watch adding data grouping in action
DOC-SUMMARY-TAG-CLOSE
![](https://cdn.mescius.io/document-site-files/images/e637becb-8cbc-4561-bac1-84462097b057/reportauthor-guide/GetStartedWithBandedReports/GroupingData.gif)
DOC-DETAILS-TAG-CLOSE

### Configuring Group Header section

The [group header](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#group-header) displays once per grouping value, thus once per different Department Name. We configure the group header accordingly:

* Click anywhere inside the banded list so that it displays the band handlers.
* Click the second section's handler and set its height to `0.6in` in the Properties panel.
* Expand the toolbox using the `Hamburger` menu located on the toolbar's left side.
* Drag and drop the [TextBox](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Visualizers/TextBox) item from the toolbox to the group header section's top-left corner.
* Set the following properties for the newly added textbox in the properties panel.

| Property | Value |
| -------- | ----- |
| Value | {DepartmentName} |
| Text Color | #0096aa |
| Font Size | 20pt |
| Font Weight | Bold |
| Vertical Align | Middle |
| Left | 0in |
| Top | 0in |
| Width | 7.5in |
| Height | 0.6in |

Note that the group header will display at the top of each page because its `Repeat On New Page` property is `True` by default.

### Configuring Details section

The [details section](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Regions/BandedList#details) displays once per data record. We use the [Container](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Supplemental-Report-Items/Container) report item to set the background and border for each details section occurence.

* Click anywhere inside the banded list so that it displays the band handlers.
* Click the third section's handler and set its height to `2in` in the Properties panel.
* Expand the toolbox using the `Hamburger` menu located on the toolbar's left side.
* Drag and drop the Container item from the toolbox to the details section's top-left corner.
* Set the following properties for the newly added Container in the properties panel.

| Property | Value |
| -------- | ----- |
| Background Color | #f9f9f9 |
| Border Style | Solid |
| Border Color | #e8e8e8 |
| Border Rounding Radius | 4pt |
| Left | 0in |
| Top | 0in |
| Width | 7.5in |
| Height | 1.75in |

Next, drag and drop four textboxes from the toolbox into the newly added Container and set their properties as per the following map.

| Property | Full Name textbox | Title textbox | Email textbox | Phone textbox |
| -------- | ----------------- | ------------- | ------------- | ------------- |
| Value | {FirstName} {MiddleName} {LastName} | {Title} | {EmailAddress} | {Phone} |
| Font Size | 14pt | *Leave as default* | *Leave as default* | *Leave as default* |
| Vertical Align | Middle | Middle | Middle | Middle |
| Text Color | *Leave as default* | #5e5e5e | #5e5e5e | #5e5e5e |
| Left | 0.3in | 0.3in | 0.3in | 0.3in |
| Top | 0.3in | 0.85 | 1.15 | 1.45 |
| Width | 4in | 4in | 4in | 4in |
| Height | 0.5in | 0.3in | 0.3in | 0.3in |

You can now [preview](/activereportsjs/docs/v6.1/ReportAuthorGuide/QuickStart/Get-Started-With-Designer-App#preview-button) the report output and notice that it prints the grouped employee list grouped by the department name.

### Using dynamic images

Each employee record includes the `AvatarUrl` field that is either `Null` or contains the employee photo's relative URL. We will use the [Image report item](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Items/Data-Visualizers/Image) to either show a picture or the placeholder if the photo is missing.

* Go back to the report design.
* Expand the toolbox using the `Hamburger` menu.
* Drag and drop the Image item from the toolbox to the details section closer to its right edge.
* In the Properties panel, expand the `Image` editor using the icon on its right side.
* Set the `Value` property to `{IIF(AvatarUrl Is Null, "https://demodata.mescius.io/images/contoso/EmployeePhotos/no-photo.jpg", "https://demodata.mescius.io" + AvatarUrl)}`. This [Expression](/activereportsjs/docs/v6.1/ReportAuthorGuide/Expressions) is using the [IIF](/activereportsjs/docs/v6.1/ReportAuthorGuide/Expressions/Functions/program-flow#iif) function to dynamically identify the picture to display. If the `AvatarUrl` is `Null` meaning that an employee has no photo, the `IIF` function returns the URL of the placeholder. Otherwise, it returns the full URL of the photo.
* Set the rest of the Image properties as per the following table

| Property | Value |
| -------- | ----- |
| MIME Type | image/jpeg |
| Image Sizing | Fit Proportional |
| Horizontal Alignment | Center |
| Vertical Alignment | Middle |
| Left | 5.65in |
| Top | 0.15in |
| Width | 1.45in |
| Height | 1.45in |

You can preview the report output and notice that each employee record now displays the photo or "no image" placeholder.

### Adding Report Map

To improve the report reading experience, we add the [Report Map](/activereportsjs/docs/v6.1/ReportAuthorGuide/Interactivity#report-map) that displays the departments' list and allows the report reader to jump from one to another quickly.

* Go back to the report design.
* Click anywhere inside the banded list so that it displays the group editor.
* Select the `DepartmentName` item in the group editor.
* In the Properties panel, set the `Label` property to `{DepartmentName}`

Preview the report and open and pin the [Report Map](/activereportsjs/docs/v6.1/ReportAuthorGuide/Report-Viewer-Interface#report-map) panel. It shows all the employee directory departments, and you can switch from one to another to read the employee list of a selected department.
DOC-DETAILS-TAG-OPEN
DOC-SUMMARY-TAG-OPEN
Expand to watch using the report map in action
DOC-SUMMARY-TAG-CLOSE
![](https://cdn.mescius.io/document-site-files/images/e637becb-8cbc-4561-bac1-84462097b057/reportauthor-guide/GetStartedWithBandedReports/ReportMap.gif)
DOC-DETAILS-TAG-CLOSE
The final version of report is available at the [demo web-site](/activereportsjs/demos/Reports/GetStartedWithBandedReports/purejs).