Search code examples
teechart

Stacked Chart not stacking into a single bar by date


I have a dataset which returns data like below

Date, Area, Sales

2017-06-01 00:00:00.000 Canteen 435.29

2017-06-01 00:00:00.000 Gym 26

2017-06-01 00:00:00.000 Nails 75

2017-06-01 00:00:00.000 Uncategorized 482.5

I am trying to create a stacked bar chart using this data

The number of series will be different

I have the logic below to create the series, but I am not sure how to add each value, e.g. I need the X Axis to be by date and have 2 bars. Each bar is then stacked with 3 series, as per the above data.

while not tblSalesBreakdownByDate.Eof do
begin
  nIndex := objList.IndexOf(tblSalesBreakdownByDateCategory.AsString);
  if nIndex = -1  then
  begin
    objSeries := TBarSeries.Create(Self);
    objSeries.MultiBar := TMultiBar.mbStacked;
    objSeries.Title := tblSalesBreakdownByDateCategory.AsString;

    chrtBreakdownByDate.AddSeries(objSeries);
    objList.AddObject(objSeries.Title, objSeries)
  end
  else
    objSeries := objList.Objects[nIndex];

  objSeries.Add(tblSalesBreakdownByDateTotalSales.AsFloat, tblSalesBreakdownByDateTransactionDate.AsString);

  tblSalesBreakdownByDate.Next;
end;

When this is rendered, instead of 1 bar which is stacked, I get 3 bars

enter image description here

How do I get this in 1 bar stacked for the date?

Is there something special I need to with the Axis?

Cheers

Paul


Solution

  • This gives me one single stacked column:

    uses Series;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
      with Chart1.AddSeries(TBarSeries) as TBarSeries do
      begin
        MultiBar:=mbStacked;
        Marks.Hide;
        Title:='Canteen';
        Add(435, '2017-06-01');
      end;
      with Chart1.AddSeries(TBarSeries) as TBarSeries do
      begin
        MultiBar:=mbStacked;
        Marks.Hide;
        Title:='Gym';
        Add(25, '2017-06-01');
      end;
      with Chart1.AddSeries(TBarSeries) as TBarSeries do
      begin
        MultiBar:=mbStacked;
        Marks.Hide;
        Title:='Nails';
        Add(95, '2017-06-01');
      end;
      with Chart1.AddSeries(TBarSeries) as TBarSeries do
      begin
        MultiBar:=mbStacked;
        Marks.Hide;
        Title:='Uncategorized';
        Add(455, '2017-06-01');
      end;
    end;