[{"id":"55f9e987-c551-47d1-b123-086a006c4bf8","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"1c7beb23-3a69-4e0b-8f33-0d84b7b4fea9","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"e60e502b-8736-4add-b0f2-25436a3c227f","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"64931f4e-3a0c-4521-aee8-270e123a9362","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"4ede3d4d-e41f-4e27-9d2b-31a45c915057","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"2c0e7c5c-add9-44ab-b880-50a952536728","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"e8823113-f850-4792-9c25-5355878f37b3","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"6eb371f4-599f-44b6-a8d2-6b11a34ccf5f","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"72c23204-2732-4ffc-ab33-7663961d6938","tags":[{"name":"new","color":"#ed7422","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"4d7b6a40-ab32-4c71-a381-58f3ffd2653e"}]},{"id":"957ff299-5941-4d92-aa55-82219ce555ab","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"e064aa68-3f3b-418c-866b-956cd916be0a","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"1f7be93c-18c8-44cc-9cbc-a4c434daf525","tags":[{"name":"new","color":"#ed7422","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"4d7b6a40-ab32-4c71-a381-58f3ffd2653e"}]},{"id":"9e2ac5aa-a904-455e-9d74-ae8c28f78ae4","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"89b11988-fbe3-449e-bb8a-afa7e577997f","tags":[{"name":"new","color":"#ed7422","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"4d7b6a40-ab32-4c71-a381-58f3ffd2653e"}]},{"id":"20655b5b-75a3-4725-9947-b43dff09c24b","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"151643ea-3b89-4e14-adc5-b6fdb6b1251f","tags":[{"name":"new","color":"#ed7422","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"4d7b6a40-ab32-4c71-a381-58f3ffd2653e"}]},{"id":"bc8040c7-c79e-461b-bc31-c3438e4de2b2","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"a1ca439e-cf57-4498-94da-d0492248d2f3","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"fac51c61-0a96-4bf5-a1e9-d42acd6626f2","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"91b9496f-023f-481f-8200-de646109b8ec","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"adc36901-9975-4eb1-8b23-e0fd08528207","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"dbfeb237-b27a-4728-bafd-e19cd13ea9f1","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"f92a4ee8-59be-42fc-8b56-e4741ce1b2b2","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"80f9e23c-a3da-473d-8b5f-fa9ba2ee8976","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"7fdc344d-3e3e-4392-be95-faa57ec6ad9c","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]},{"id":"1eb67c31-31a8-4d3c-85c1-fc98f0f4ce6d","tags":[{"name":"upd","color":"#7e678a","productId":"d699a6af-e150-4da3-ab30-25fd97934601","links":null,"id":"fe610228-9cf6-417f-813a-dcbfd25406c3"}]}]
ActiveReportsJS now supports the creation of Pageless Reports. This new layout type provides an alternative to traditional page-by-page report formats by presenting report content across separate tabs. The Pageless layout also enables the use of scrollable containers for a streamlined user interaction. This feature enhances the flexibility of report design with ActiveReportsJS, offering a user-friendly approach to structuring and navigating your reports. For a step-by-step tutorial on creating your first pageless report, please refer to the Get Started with the Pageless Report walkthrough.
ActiveReportsJS now supports the use of custom functions within your report expressions. This feature enhances flexibility in your report design, offering an efficient way to manage complex calculations, reuse code, and facilitate advanced conditional formatting. Here are some ways you can benefit from this feature:
Complex Calculations: While ActiveReportsJS expressions efficiently handle simple to moderately complex calculations, you may encounter business requirements that necessitate more intricate computations. Custom code can simplify these scenarios, providing an elegant solution for complex mathematical manipulations that go beyond the capabilities of standard expressions.
Code Reusability: If you find yourself using similar code snippets across multiple expressions within your report, custom code can provide a more efficient approach. By defining the function once, you can then call it from various locations in your report. This practice not only enhances code maintainability, but also contributes to a cleaner report design.
Advanced Conditional Formatting: Although basic conditional formatting can be managed with expressions, custom code takes it a step further, accommodating more intricate scenarios that demand dynamic styling based on specific conditions.
For instance, in our Runtime Filtering demo, we leverage a custom function to format currency values in relation to their magnitude. This function is defined as follows:
function formatCurrencyValue(value) {
let currencySymbol = '$';
if (value >= 1000000000) {
return currencySymbol + (value / 1000000000).toFixed(1) + 'B';
} else if (value >= 1000000) {
return currencySymbol + (value / 1000000).toFixed(1) + 'M';
} else if (value >= 1000) {
return currencySymbol + (value / 1000).toFixed(1) + 'K';
} else {
return currencySymbol + value.toFixed(1);
}
}
In the report, textboxes that display numeric values call this function through expressions, like:
{Code.formatCurrencyValue(Sum(SalesAmount))}
This elegant approach allows for dynamic formatting of currency values, based on their size, improving the readability and interpretation of your data.
To learn more about incorporating custom code into your ActiveReportsJS projects, refer to our in-depth guide. Here, you will discover detailed information and practical examples to help you make the most of this powerful feature.
We have now integrated a new feature that allows for the creation of a custom parameters view using advanced editors. This enhancement accommodates various parameters such as Date Range
, Slider
, ListBox
, and more, allowing for more versatile control over your data.
Additionally, we updated the Parameters Documentation to include a comprehensive guide. This guide provides detailed instructions on how to effectively design and utilize parameters in your reports, and also outlines the steps to build a custom view.
You can check the sample of custom parameters view on the demo web-site.
We added four new plot types to our data visualization toolbox: Range Column, Range Bar, Range Area and Gauge plots.
Range Column and Bar and plots are ideal for displaying the difference between the minimum and maximum values for each category, represented by vertical or horizontal bars. This chart type is useful for visualizing data such as temperature ranges, price fluctuations, or other scenarios where the focus is on the range between two values.
Range Area plots are designed to display the range or difference between two sets of values across a continuous variable, such as time. This chart type consists of two lines representing the upper and lower bounds, with the area between the lines filled in to emphasize the range. Range Area plots are often used to display data such as sales forecasts with confidence intervals, temperature ranges over time, or stock price fluctuations.
Gauge plots, also known as speedometer or dial plots, are suitable for visualizing a single data point within a specified range, often in relation to a target or goal. These plots are particularly useful when you want to communicate progress or performance in a visually appealing manner.
The recently added Text Encoding
feature provides the capability to implement advanced configurations for your plot's labels and tooltips. For further information, please refer to the Customizing Tooltips and Labels
subsection under the specific plot type. As an instance, you can look at Column and Bar plots.
You now can customize the color, width, and style of the lines connecting bars or columns in your plots.
A Color, Shape, or Size legends of a chart can now be interactive, providing a report reader the ability to click on a legend item to jump to another report, open a dynamic URL or apply parameters.
We've improved data processing in ActiveReportsJS to primarily use the asynchronous fetch API for obtaining report data. This enhancement not only improves user experience, but it also allows developers to employ service workers to intercept data requests. As a result, developers can manage these requests directly in the application's code, giving them full control over data handling. Please note, while the synchronous XHR API is still employed in some scenarios, these instances are now quite rare.
You can now leverage the GroupIndex function to retrieve the index of a grouping instance. This functionality is particularly beneficial when customizing the style of grouping items at runtime. In particular, it can be employed to set alternating background colors for a more visually organized and appealing display. For instance, in the Simple Table demo the background color of the textboxes in the detail rows is determined by the expression {IIF(GroupIndex() Mod 2 = 0, "White", "#f8f8f8")}
. This expression uses the GroupIndex
function, which retrieves the index of the Details group
, to alternate the background color between white and a light grey (#f8f8f8
). The Details group of the table is set to the value of a unique field in the dataset, which in this case is StartTime
. As StartTime is unique for each taxi drive, it effectively groups each drive as a distinct entity. As a result, when previewing the report, the detail rows display an alternating background color for enhanced readability, with each taxi drive visually separated by color.
You can now set the Format
for the Date
and DateTime
parameters to customize the appearance of the parameter's value in the date input box of the parameters panel.