Italian Raggruppare i dati e visualizzarli in un grafic

Nikeddy

Active Member
Licensed User
Longtime User
Io invece mi sono perso.

Tornando al grafico (che non conosco), aveva una proprietà alla quale passare i dati (gli importi sommati) come List, quindi dovrai recuperare gli importi tramite query e nella jobdone metterli in una lista.
Il punto è che devi anche avere l'asse delle X, che saranno date o mesi; dovrai preparare una lista anche per questi, penso, e passarli ad una proprietà diversa di quella view (?) che stai usando per visualizzare il grafico.


la lista c'e' :
B4X:
Case containcassopark
                ListView3.Clear
                Dim macchine As List
                Dim formatnumero As Double
                macchine= parser.NextArray
                For i = 0 To macchine.Size - 1
                    Dim m As Map
                    m = macchine.Get(i)
                    Dim tl As TwoLines
                    tl.First = m.Get("data")
                    formatnumero  = m.Get("totale")
                    tl.Second = formatnumero
                    ListView3.AddTwoLines2(tl.First, tl.Second, tl)
                    grafico
                Next

come passo al grafico i dati?

mbc1.ChartData = Array As Float ???
 

LucaMs

Expert
Licensed User
Longtime User
Non so cosa sia TwoLines ma io parlo di List, che è un oggetto, non di View (controlli), come la ListView.

Dovresti crearla nel Jobdone (e magari dichiararla nella Process_Globals, oppure passarla direttamente ad una routine che crei il grafico)
 

Nikeddy

Active Member
Licensed User
Longtime User
mysql, db che accedo con phpmyadmin e sta su un dominio di una vm presa online.
 

Nikeddy

Active Member
Licensed User
Longtime User
Dim macchine As List <-- e' questa.
poi faccio
macchine= parser.NextArray

ora quei valori li metto in una lista, posso passarla al grafico?
 

Nikeddy

Active Member
Licensed User
Longtime User
si,

io quindi faccio la query
Response from server: [{"data":"08\/01\/2018 05:38","totale":"1530"},{"data":"10\/02\/2018 09:12","totale":"988"},{"data":"01\/03\/2018 11:09","totale":"2431"}]
a questo
ExecuteRemoteQuery("SELECT data, SUM(Importo) As totale FROM incassi WHERE n_macchina = " & macchina & " GROUP BY SUBSTRING(Data,4,2)",containcasso)

cosi in containcasso ho tutti i valori degli importi e le date, ora come le metto nella list?
 

XorAndOr

Active Member
Licensed User
Longtime User
B4X:
Private Gennaio,Febbraio,Marzo As Int' in sub global

Dim decodifica As JSONParser
        decodifica.Initialize(LeggeRec.GetString)
        Dim dati As List
        dati = decodifica.NextArray
        For i = 0 To dati.Size - 1
            Dim m As Map
            m = dati.Get(i)           
            
            data = m.Get("data")' qui hai tutta la stringa con data e orario 08/01/2018 05:38
            
            totale = m.Get("totale")'qui hai tutti i valori dei mesi
            
            Gennaio = m.Get(0)' qui prendi solo quello che interessa cioe' gennaio
            Febbraio = m.Get(1)'febbraio
            Marzo = m.Get(2)'marzo ecc...
                        
            caricagrafico '------> le variabili le passi al grafico ---> sub grafico
        Next
    End If


mpc1.ChartData = Array As Float(Gennaio, Febbraio, Marzo, 40.0, 30.0, 40.0) 'qui aggiungi le variabili
 

Star-Dust

Expert
Licensed User
Longtime User
Anche un array

B4X:
Dim mese(12) as float
 
Last edited:

Nikeddy

Active Member
Licensed User
Longtime User
Anche un array

B4X:
Dim mese(12) as int
come lo collego l'array?

B4X:
Private Gennaio,Febbraio,Marzo As Int' in sub global

Dim decodifica As JSONParser
        decodifica.Initialize(LeggeRec.GetString)
        Dim dati As List
        dati = decodifica.NextArray
        For i = 0 To dati.Size - 1
            Dim m As Map
            m = dati.Get(i)          
           
            data = m.Get("data")' qui hai tutta la stringa con data e orario 08/01/2018 05:38
           
            totale = m.Get("totale")'qui hai tutti i valori dei mesi
           
            Gennaio = m.Get(0)' qui prendi solo quello che interessa cioe' gennaio
            Febbraio = m.Get(1)'febbraio
            Marzo = m.Get(2)'marzo ecc...
                       
            caricagrafico '------> le variabili le passi al grafico ---> sub grafico
        Next
    End If


mpc1.ChartData = Array As Float(Gennaio, Febbraio, Marzo, 40.0, 30.0, 40.0) 'qui aggiungi le variabili

domanda: quel 40 30 ecc, che valore e'? i mesi cosi facendo sono fissi cosi? e a scavallare l'anno?
 

Nikeddy

Active Member
Licensed User
Longtime User
sono in confusione, mi da errore :
decodifica.Initialize(LeggeRec.GetString) <---leggerec.getstring
 

Star-Dust

Expert
Licensed User
Longtime User
B4X:
For mi=0 to 11
Mese(mi) = m. Get(mi)
Next
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Sono fuori sede non posso vedere
 

Nikeddy

Active Member
Licensed User
Longtime User
B4X:
For mi=0 to 12
Mese(mi) = m. Get(mi)
Next
non limito cosi l'estrazione? nel db sono presenti tutti i dati sia del 2018 che del 2017.

posso fare in modo che i dati estratti siano esempio gli ultimi 6 ?

io cosi estraggo tutti:
io quindi faccio la query
Response from server: [{"data":"08\/01\/2018 05:38","totale":"1530"},{"data":"10\/02\/2018 09:12","totale":"988"},{"data":"01\/03\/2018 11:09","totale":"2431"}]
a questo
ExecuteRemoteQuery("SELECT data, SUM(Importo) As totale FROM incassi WHERE n_macchina = " & macchina & " GROUP BY SUBSTRING(Data,4,2)",containcasso)


solo che ora vorrei fare in modo di passarli al grafico, limitandoli a 6 per esempio.
 

udg

Expert
Licensed User
Longtime User
Sono fuori sede non posso vedere
For mi=0 to 12

Sei fuori di un mese, più che altro..eheh
 

XorAndOr

Active Member
Licensed User
Longtime User
sono in confusione, mi da errore :
decodifica.Initialize(LeggeRec.GetString) <---leggerec.getstring

il mio codice è solo un esempio.Non devi copiare tutto nel tuo progetto!!
lo devi adattare al tuo
B4X:
Case containcassopark
                ListView3.Clear
                Dim macchine As List
                Dim formatnumero As Double
                macchine= parser.NextArray
                For i = 0 To macchine.Size - 1
                    Dim m As Map
                    m = macchine.Get(i)
                    Dim tl As TwoLines
                    tl.First = m.Get("data")
                    formatnumero  = m.Get("totale")
                    tl.Second = formatnumero
                    ListView3.AddTwoLines2(tl.First, tl.Second, tl)
                    grafico
                Next
 

Nikeddy

Active Member
Licensed User
Longtime User
mbc1.LegendText = Array As String("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
mbc1.ChartData = Array As Float ("formatnumero") 'values - it will be converted to %

qui che ci passo?
 

Nikeddy

Active Member
Licensed User
Longtime User
ok ok allora...
B4X:
Case containcasso
                ListView3.Clear
                Dim macchine As List
                Dim formatnumero As Double
                macchine= parser.NextArray
                For i = 0 To macchine.Size - 1
                    Dim m As Map
                    m = macchine.Get(i)
                    Dim tl As TwoLines
                    tl.First = m.Get("data")
                    formatnumero  = m.Get("totale")
                    gennaio = m.Get(0)
                    febbraio = m.Get(1)
                    marzo = m.Get(2)
                    grafico
                    tl.Second = formatnumero
                    ListView3.AddTwoLines2(tl.First, tl.Second, tl)             
Next

Grafico:

mbc1.LegendText = Array As String("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
mbc1.ChartData = Array As Float (gennaio,febbraio,marzo) 'values - it will be converted to %


e mi da errore
B4X:
main_jobdone (B4A line: 355)
gennaio = m.Get(0)
java.lang.NumberFormatException: For input string: "null"
    at java.lang.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1306)
    at java.lang.Double.parseDouble(Double.java:547)
    at anywheresoftware.b4a.BA.ObjectToNumber(BA.java:646)
    at anywheresoftware.b4a.samples.mysql.main._jobdone(main.java:1918)
    at java.lang.reflect.Method.invoke(Native Method)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:186)
    at anywheresoftware.b4a.keywords.Common$11.run(Common.java:1135)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6692)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
java.lang.NumberFormatException: For input string: "null"
 

Star-Dust

Expert
Licensed User
Longtime User
M.get(0) è null quindi vuoto non può essere trasformata in numero
 

Star-Dust

Expert
Licensed User
Longtime User
Poi io farei così
B4X:
Dim MesiValori (12) as Float
For i = 0 To macchine.Size - 1
     Dim m As Map
     m = macchine.Get(i)
     Dim tl As TwoLines
     tl.First = m.Get("data")
     formatnumero  = m.Get("totale")
                
     For mi=0 to 11
         MesiValori(mi) = m.Get(mi)
     Next
     grafico
     tl.Second = formatnumero
     ListView3.AddTwoLines2(tl.First, tl.Second, tl)        
Next
Poi
B4X:
mbc1.ChartData = MesiValori

Comunque Se i dati sono nulli darà sempre errore
 
Top