← All posts
Adding Charts to Your Reports
June 13, 2026
· Updated June 13, 2026
Majorsilence Reporting supports embedded charts that render inline on the report page alongside tables and text. Charts are bound to report datasets, so the same dataset can drive both a summary chart and a detail table on the same page.
Chart Types
Eight chart types are available:
| Type | Best for |
|---|---|
| Column | Comparing discrete categories (vertical bars) |
| Bar | Horizontal version of column |
| Line | Trends over time or continuous data |
| Area | Line with filled area below |
| Pie | Proportional breakdown of a whole |
| Doughnut | Pie with a hollow centre |
| Scatter | Individual data points on X/Y axes |
| Bubble | Scatter with a third value for point size |
Adding a Chart in the Designer
- Open your report in the designer.
- Right-click the report body and choose Insert → Chart.
- Select a chart type and click Next.
- Select the dataset the chart will read from.
- Map fields to the three roles:
- Category (X axis): the grouping dimension, e.g.
{MonthName}or=Fields!Region.Value - Value (Y axis): typically an aggregate, e.g.
=Sum(Fields!Revenue.Value) - Series (optional): splits bars/lines by colour, e.g.
=Fields!Product.Value
- Category (X axis): the grouping dimension, e.g.
- Click Finish, then resize and position the chart on the design surface.
Configuring Titles and Axes
Right-click the chart and choose Chart Properties to adjust:
- Titles: static strings or expressions like
="Sales — " & Year({@ExecutionTime}) - Legend: position (top, bottom, left, right) or hidden
- Axis label format uses standard .NET format strings:
C2 → $1,234.56 (currency, 2 decimal places)
N0 → 1,235 (integer with thousand separator)
P1 → 42.3% (percentage)
Rendering a Chart Report from Code
Once you have an .rdl file with a chart configured, rendering it is identical to any other report:
using Majorsilence.Reporting.Rdl;
RdlEngineConfig.RdlEngineConfigInit();
var baseDir = AppContext.BaseDirectory;
var rdlXml = await File.ReadAllTextAsync(Path.Combine(baseDir, "SalesChart.rdl"));
// Inject absolute DB path before Parse() — required for schema validation
rdlXml = rdlXml.Replace("sales.db", Path.Combine(baseDir, "sales.db"));
var parser = new RDLParser(rdlXml) { Folder = baseDir };
using var report = await parser.Parse();
if (report.ErrorMaxSeverity > 4)
{
foreach (var err in report.ErrorItems)
Console.Error.WriteLine(err);
return;
}
await report.RunGetData(null);
// Charts render automatically in PDF and HTML — no extra config needed
var ofs = new OneFileStreamGen(Path.Combine(baseDir, "sales-report.pdf"), true);
await report.RunRender(ofs, OutputPresentationType.PDF);
The chart definition lives entirely in the RDL file, so there’s nothing extra to configure on the C# side.
Combining a Chart and a Table
A common pattern is a summary chart above a detail table, both bound to the same dataset:
- Insert a chart at the top of the report body for the high-level picture.
- Add a table below it for the row-level detail.
- Point both to the same dataset.
The reporting engine runs the query once and feeds both items from the same data.
Tips
- Set an explicit Width and Height on the chart item. Percentage-based sizes produce inconsistent output in PDF and TIFF exports.
- For pie charts, keep category cardinality low (fewer than 8 slices). Many slices make labels overlap and the chart unreadable.
- Line charts work best when the Category field is a date or sequential number with 10–200 data points.
- To filter chart data without affecting a table on the same page, add a filter directly to the chart via Chart Properties → Filters rather than filtering the dataset.
Further Reading
- Charts wiki page
- Grouping and Aggregates — aggregate expressions used in chart values
- Data Regions — combining charts with tables and lists