I wanted to create some compact bar charts showing monthly data for use in a dashboard page.
The single series is based on a local database query in the region source:
select
add_months(trunc(sysdate, 'yy'), n - 1) x
, 500 * n - power(2, n) y
from
(select level n from dual connect by level <= 12) t
where
1 = 1
order by
x asc
The Time Axis Type chart attribute is set to Enabled.
To keep the time axis labels clear while fitting the chart region into 2 layout columns, the X axis is configured to display the initial letter of each month in the current calendar year. To do so, the axis Format property is set to Date - Short and the Pattern to the Unicode CLDR narrow month symbol MMMMM. (Using the longest symbol to render the shortest representation seems completely barking. I presume a committee is involved.)
However, there is a problem. When the chart is displayed (see example), labels where the initial letter of the month is the same as the preceding month are missing (e.g. July).
To investigate this further, I created another chart region, this time with data for April missing from the series, so that the months March and May would be adjacent on the X axis:
select
add_months(trunc(sysdate, 'yy'), n - 1) x
, 500 * n - power(2, n) y
from
(select level n from dual connect by level <= 12) t
where
n != 4
order by
x asc
This seems to confirm the problem as now the label for May is missing as well as that for July.
There is a further oddity. Despite there being no data for April, and the Fill Gaps in Chart Data property being Off, there is a space for it on the chart. This is also unlabelled on the X axis. This kind of makes sense because this is a single series chart and the online help says that this property does not apply to single series charts. It probably would be better if the "Multi-Series Chart Data" section in the property sheet was not shown at all for single series charts.
In this case the data densification seems to result from enabling the time axis type, as it is absent otherwise. It's a bit strange that APEX/JET determines that a gap exists, fills it, but doesn't label it.