KoolReport's Forum

Official Support Area, Q&As, Discussions, Suggestions and Bug reports.
Forum's Guidelines

Create dataStore for BarChart #1299

Open Michele Bassanini opened this topic on on Feb 13, 2020 - 10 comments

Michele Bassanini commented on Feb 13, 2020

When I try to use BarChart I have this error "Data column(s) for axis #0 cannot be of type string×".

My dataStore is configured as:

  $this->src('default')
      ->query("SELECT TIPO_SC, VALORE FROM MVS_DG_STATISTICHE WHERE  ANNORIFERIMENTO=:annoriferimento")
      ->params([':annoriferimento'=>$this->params['annoriferimento']])
      ->pipe(new Group([
                'by'=>['TIPO_SC','VALORE'],
                'count' => 'QUANTITA'
            ]))
      ->pipe($this->dataStore('dg_scXvalore')

In the example of BarChart the data source must be like this:

array(
        array("category"=>"Books","sale"=>32000,"cost"=>20000,"profit"=>12000),
        array("category"=>"Accessories","sale"=>43000,"cost"=>36000,"profit"=>7000),
        array("category"=>"Phones","sale"=>54000,"cost"=>39000,"profit"=>15000),
        array("category"=>"Movies","sale"=>23000,"cost"=>18000,"profit"=>5000),
        array("category"=>"Others","sale"=>12000,"cost"=>6000,"profit"=>6000),
    );

how I can setup the dataStore to extract this structure of data?

I want TIPO_SC on X axis and for each labels of TIPO_SC I wanted all the type of VALORE with relative count number, is it possible?

KoolReport commented on Feb 14, 2020

To draw a barchart you need a 2 columns: the first is category in string, the second is the value in number. Right now in your data, both are string, barchart has no numeric data to draw. So you get this message. So in your query, you should group by a category and calculate a measurement. For example: group by city and sum all the sale of each city:

select city, count(sale_amount) from orders group by city

Hope my answer helps.

Michele Bassanini commented on Feb 14, 2020

Sorry I wanted to draw a Column Chart. If I group the datastore results like this

 0 => 
        array (size=4)
          'TIPO_SC' => null
          'VALORE' => string 'EXTRAMOENIA' (length=11)
          'COUNT(*)' => string '5' (length=1)
          'QUANTITA' => int 1
      1 => 
        array (size=4)
          'TIPO_SC' => null
          'VALORE' => string 'INTRAMOENIA' (length=11)
          'COUNT(*)' => string '18' (length=2)
          'QUANTITA' => int 1
      2 => 
        array (size=4)
          'TIPO_SC' => string 'Altre società cooperative' (length=26)
          'VALORE' => string 'INTRAMOENIA' (length=11)
          'COUNT(*)' => string '5' (length=1)
          'QUANTITA' => int 1
      3 => 
        array (size=4)
          'TIPO_SC' => string 'Altre società cooperative' (length=26)
          'VALORE' => string 'NON_DISPONIBILE' (length=15)
          'COUNT(*)' => string '2' (length=1)
          'QUANTITA' => int 1
      4 => 
        array (size=4)
          'TIPO_SC' => string 'Altri enti ed istituti con personalità giuridica' (length=49)
          'VALORE' => string 'EXTRAMOENIA' (length=11)
          'COUNT(*)' => string '3' (length=1)
          'QUANTITA' => int 1

and the graph is not rendered

KoolReport commented on Feb 15, 2020

If your datastore is like that, you can do:

ColumnChart::create(array(
    "dataSource"=>$this->dataStore("dg_scXvalore"),
    "columns"=>array("TIPO_SC","COUNT(*)")
));

Please let me know if it works.

Michele Bassanini commented on Feb 17, 2020

Sorry I really don't understand the usage...

My Report

  $this->src('default')
            ->query("SELECT TIPO_SC, VALORE, count(*) as COUNTER FROM MVS_DG_STATISTICHE WHERE  ANNORIFERIMENTO=:annoriferimento group by tipo_sc, valore")
            ->params([':annoriferimento'=>$this->params['annoriferimento']])
//            ->pipe(new Group([
//                'by'=>['TIPO_SC','VALORE'],
//                'count' => 'QUANTITA'
//            ]))
            ->pipe($this->dataStore('dg_scXvalore'));

My Report.view

ColumnChart::create([
                "dataStore"=>$this->dataStore('dg_scXvalore'),
                'columns' =>[
                    'TIPO_SC',
                    'COUNTER',
                ]
            ]);

the page is totally blank....

KoolReport commented on Feb 17, 2020

Can you remove the "VALORE" for now, please remove in your query in both select part and group part

Michele Bassanini commented on Feb 17, 2020
$this->src('default')
            ->query("SELECT TIPO_SC, count(*) as COUNTER FROM MVS_DG_STATISTICHE WHERE  ANNORIFERIMENTO=:annoriferimento group by tipo_sc")
            ->params([':annoriferimento'=>$this->params['annoriferimento']])
            ->pipe(new Group([
                'by'=>['TIPO_SC'],
                'count' => 'QUANTITA'
            ]))
            ->pipe($this->dataStore('dg_scXvalore'));
 ColumnChart::create([
                "dataStore"=>$this->dataStore('dg_scXvalore'),
                'columns' =>[
                    'TIPO_SC',
                    'COUNTER',
                ]
            ]);

Return error "Data column(s) for axis #0 cannot be of type string"

Michele Bassanini commented on Feb 17, 2020
$this->src('default')
            ->query("SELECT TIPO_SC FROM MVS_DG_STATISTICHE WHERE  ANNORIFERIMENTO=:annoriferimento")
            ->params([':annoriferimento'=>$this->params['annoriferimento']])
            ->pipe(new Group([
                'by'=>['TIPO_SC'],
                'count' => 'QUANTITA'
            ]))
            ->pipe($this->dataStore('dg_scXvalore'));
ColumnChart::create([
                "dataStore"=>$this->dataStore('dg_scXvalore'),
                'columns' =>[
                    'TIPO_SC',
                    'QUANTITA',
                ]
            ]);

This works, but show me the number of TIPO_SC (1 bar for each tipo_sc). I want that for each VALORE it shows me the count of tipo_sc

Michele Bassanini commented on Feb 17, 2020

From the example of Column Chart I need a source like this:

 $exampleData=  array(
                array("TIPO_SC"=>"Type1","INTRA"=>32,"EXTRA"=>44),
                array("TIPO_SC"=>"Type2","INTRA"=>55,"EXTRA"=>11),
                array("TIPO_SC"=>"Type3","INTRA"=>88,"EXTRA"=>22),
            );

where TIPO_SC is a column of the table, "INTRA" ed "EXTRA" are two value of VALORE column and the number are the count of INTRA in Type1, EXTRA in Type1, INTRA in Type2, ecc...

Is it possible?

KoolReport commented on Feb 17, 2020

May I know your data structure in database, and also give me some sample data. Without knowing it, I could not help you on the query. This is only how to make SQL query.

Michele Bassanini commented on Feb 19, 2020

The minimum structure for this report is [NOMESTRUTTURA; ID; VALORE; TIPO_SC]. I want to plot more bar for TIPO_SC divided by each VALORE

This are some sample data as CSV

NOMESTRUTTURA;ID;VALORE;TIPO_SC
SERVIZIO FISCALE;774909;NON_DISPONIBILE;Società in accomandita semplice
SERVIZIO FISCALE;776900;NON_DISPONIBILE;Società a responsabilità limitata
SERVIZIO FISCALE;777088;NON_DISPONIBILE;Società in accomandita semplice
SERVIZIO FISCALE;778897;LIBERA;Società con sede all'estero
SERVIZIO ORGANIZZAZIONE E INNOVAZIONE;606577;NON_DISPONIBILE;Enti pubblici non economici
SERVIZIO ORGANIZZAZIONE E INNOVAZIONE;662526;NON_DISPONIBILE;Enti pubblici non economici
SERVIZIO GESTIONE TRATTAMENTO ECONOMICO E PREVIDENZIALE;603479;NON_DISPONIBILE;Società per azioni
SERVIZIO GESTIONE TRATTAMENTO ECONOMICO E PREVIDENZIALE;603504;NON_DISPONIBILE;Società in nome collettivo
SERVIZIO LOGISTICA;598708;LIBERA;Società a responsabilità limitata
SERVIZIO LOGISTICA;598721;LIBERA;Fondazioni
SERVIZIO LOGISTICA;598735;LIBERA;Società per azioni
SERVIZIO LOGISTICA;620076;LIBERA;Società a responsabilità limitata
SERVIZIO LOGISTICA;620099;LIBERA;Enti pubblici non economici
SERVIZIO LOGISTICA;682498;LIBERA;Persona fisica
SERVIZIO LOGISTICA;707362;LIBERA;Società a responsabilità limitata
SERVIZIO LOGISTICA;710810;LIBERA;Società a responsabilità limitata
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;764542;INTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;764543;INTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;764548;INTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600360;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600365;INTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600382;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600405;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600412;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600429;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600442;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600451;INTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600452;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600531;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600536;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600559;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;600565;INTRAMOENIA;Enti ospedalieri
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619770;INTRAMOENIA;Società in accomandita semplice
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619772;INTRAMOENIA;Società in nome collettivo
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619778;INTRAMOENIA;Società in nome collettivo
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619788;EXTRAMOENIA;Società a responsabilità limitata
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619805;EXTRAMOENIA;Società in accomandita semplice
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619818;EXTRAMOENIA;Società per azioni
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619821;EXTRAMOENIA;Società per azioni
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;619867;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;620092;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;620195;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;620241;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;620446;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;621160;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;622968;EXTRAMOENIA;Persona fisica
DIPARTIMENTO DI SANITA' PUBBLICA, MEDICINA SPERIMENTALE E FORENSE;623047;EXTRAMOENIA;Persona fisica

Build Your Excellent Data Report

Let KoolReport help you to make great reports. It's free & open-source released under MIT license.

Download KoolReport View demo
None yet

None