Farseer charts are driven by the shape of your sheet. If you can explain your chart as “categories on one axis, series on the other”, you can build it reliably in a dashboard.
One important mindset shift: the sheet is input only. You don’t format values in the sheet. Number formatting comes from the variable, and chart styling (colors, labels, chart type choices) comes from the tile.
1) The basics: one series, one chart
Start with the simplest possible structure: one series across a set of categories.
The top row contains category labels (for example months).
The first column contains the series name.
The numeric cells contain the values.
Here’s the smallest example (one series, three categories):
Name | Jan | Feb | Mar |
Revenue | 120 | 160 | 140 |
This produces a chart with a single series (“Revenue”).
The above dataset rendered as both bar or line charts
2) Adding another series
To compare two lines/bars (or to stack values), you add another row. In Farseer, each row is a series by default, which means you can style each row independently in the chart.
Name | Jan | Feb | Mar |
Revenue | 120 | 160 | 140 |
Cost | 80 | 95 | 90 |
With two series you can choose:
A grouped/clustered bar chart (two bars per month)
A stacked bar chart (Revenue will never be stacked with Cost)
A multi-line chart (two lines)
The above dataset rendered as bar, line and stacked bar charts
3) Combo chart (bar + line, per series)
Combo charts let you choose a different chart type per series. The data layout stays the same; what changes is how you configure each series in the tile.
Use the same sheet:
Name | Jan | Feb | Mar |
Revenue | 120 | 160 | 140 |
Cost | 80 | 95 | 90 |
Then in the tile:
Set Revenue to bars
Set Cost to a line (or vice versa)
The above dataset where Revenue is set as bar, and Cost as line
4) AC+FC in one continuous timeline
A common pattern is a timeline where Actuals run up to a cutover month and Forecast continues after it. The key is: don’t overlap. You keep two separate series, but only one of them has values in any given month.
This is the recommended input shape:
Name | Jan | Feb | Mar | Apr |
PL | 110 | 140 | 130 | 160 |
AC | 120 | 160 |
|
|
FC |
|
| 140 | 150 |
Notice what makes this work:
AC has values only for the months that are actual.
FC has values only for the months that are forecast.
The blank cells create the “handover” without double-plotting the same month.
Additional options used to get the exact same chart as below:
Bar spacing: -50%
PL is visually behind because it's the first row
The above dataset shown in a combo chart (AC & FC stacked)
Tip: There will be some blank reserved space for the cells in the series that are empty in this case. To eliminate the space, you can freely "stack" AC and FC on top of each other. This works seamlessly because in this case AC and FC don't overlap.
5) When to Transpose
So far, rows were series. That’s usually best for timelines and scenario comparisons.
But for some charts—especially stacked bars—you may want the components to be the series, and the entities to be the categories. In those cases, it’s often cleaner to structure your data so columns are the series, then transpose the chart mapping.
Example: Countries as categories, channels as series.
Name | Direct | Retail | Wholesale |
HR | 40 | 55 | 25 |
DE | 60 | 20 | 30 |
UK | 35 | 45 | 15 |
With transpose enabled:
Countries become the category axis
Direct/Retail/Wholesale become series
Series controls move from Row options to Column options
Additional options used to get the exact same chart as below:
Orientation: Vertical
Show Integrated Legend: ON
Show Legend: OFF
Value labels Position: Middle
The above dataset shown as a vertical bar chart
6) Grid composed visuals (IBCS-style)
6.1) IBCS Charts with Variance
Once you want two or more charts to behave like one composed view—aligned and comparable—you use Grid.
The mental model is:
The first level defines chart containers (each container becomes a chart).
Everything inside a container is what’s shown inside that chart.
So you structure the sheet like “a chart made of series”, repeated per container.
Name |
| Jan | Feb | Mar |
Variance |
|
|
|
|
| ΔPL | -20 | +30 | +20 |
Base chart |
|
|
|
|
| PL | 120 | 160 | 140 |
| AC | 100 | 190 | 160 |
Grid scaling is automatic and shared:
All charts in the grid use the same axis
The axis max is the maximum value across all charts in the grid
The axis min is the minimum value across all charts in the grid
This is exactly what you want for IBCS-style layouts, because it prevents charts from “lying” via different scales.
Additional options enabled to get the exact same chart as below:
ΔPL series color: By value
ΔPL formatting:
+#,##0.00;-#,##0.00(to show +)Bar spacing: -50%
Grid columns: 1
The above dataset created with grid
6.2) Small multiples
Small multiples are useful when you want to compare the same chart structure across many segments (for example regions, products, or teams) without changing how the chart is read. The trick is to keep the series and category layout identical in each block, and only change the segment you’re showing.
In Grid, you do this by creating one chart container per segment and repeating the same set of series inside each container. Because Grid uses a shared axis with automatic min/max across all charts, the small multiples stay directly comparable.
This is straightforward in Farseer using dimensions. You generate the top-level rows from the dimension you want to analyze (for example, Region or Product). Each generated row acts as a chart container: open one container, add the chart series inside it, and Farseer will automatically repeat that same chart structure for every dimension member because the containers are generated.
Example part of the sheet structure (one container per segment, same series repeated):
Name |
| Jan | Feb | Mar |
Basel |
|
|
|
|
| Revenue | 45 | 50 | 55 |
Berlin |
|
|
|
|
| Revenue | 60 | 58 | 55 |
The above example in the grid chart
If you need each segment to have its own independent scale (sometimes useful, but less comparable), Grid is not the right choice—Grid is intentionally optimized for comparability through shared scaling.
7) A few practical rules that prevent surprises
Keep the sheet purely numeric. If you add symbols or formatted strings into cells, the chart can’t treat them as values.
Decide what “missing” means. An empty cell means “no value”. A zero means “the value is 0”. Those are not the same visually.
Control clutter intentionally. “Show empty rows” is off by default to keep charts readable; switch it on only when you need stable legends.
Last but not least, apply IBCS standards where possible.







