Найдите общую сумму, в которую входит каждая транзакция (диаграмма Google)

1

У меня есть диаграмма, в которой мне нужно подсчитать сумму, которую я зарабатываю с течением времени. На этом графике у меня есть сумма (красная линия). Моя цель - вычислить общую сумму каждой входящей транзакции. Мой текущий код не работает должным образом, потому что, когда время 18:26:23, это 1000 сумма, когда 18:26:24 , это все еще 1000 . .. Должно быть 2000 . Со временем он должен решить эту проблему. Я предоставил свои коды ниже и снимок экрана с моей текущей системой и моей целью. Заранее спасибо.

Изображение 135 Изображение 136

Просмотры :

<div class="col-md-12">
            <!-- LINE CHART -->
            <div class="card card">
              <div class="card-header">
                <h3 class="card-title">Stats Per Day</h3>

                <div class="card-tools">
                 <button type="button" class="btn btn-tool" data-card-widget="collapse" style="width:30%;">
                    <i class="fas fa-minus"></i>
                  </button>
                </div>
              </div>
              <div class="card-body">
                <div class="chart">
                  <div id="wholechart" style="min-height: 250px; height: 250px; max-height: 250px; max-width: 100%;"></div>
                </div>
              </div>
              <!-- /.card-body -->
            </div>
            
                   
   </div>

Аякс :

 function sampleeesasw(){
  
   $.ajax({
                type: 'post',
                url: '<?=site_url('report/datas')?>',
                dataType:'json',
                success: function(result) { 
                
                 google.charts.load('current', {'packages':['corechart']});
                    google.charts.setOnLoadCallback(function(){drawChart(result);});
                
                
                
                       function drawChart(result) {
                    
                          var data = new google.visualization.DataTable();
                          data.addColumn('string', 'req');
                           data.addColumn('number', 'total');
                            data.addColumn('number', 'amount');
                         
                          
                          var dataArray =[];
                            $.each(result,function(i,obj){
                            dataArray.push([obj.req,parseInt(obj.total),parseInt(obj.amount)]);
                            
                            });
                            
                            data.addRows(dataArray );

                    
                           var options = {
        seriesType: "line",
 
    };
                    
                    
                        
                    
                          var chart = new google.visualization.ComboChart(document.getElementById('wholechart')).
                          
                    //       Line,Bar,Area,Clomun,pie
                    
                         draw(data, {curveType: "function",
    vAxes: {0: {logScale: false},
            1: {logScale: false, maxValue: 2}},
    series:{
       0:{targetAxisIndex:0},
       1:{targetAxisIndex:1},
       2:{targetAxisIndex:1}}}
          );
                         
                        }
                
                 }
                
                });


}

    
     setInterval(function(){ 
sampleeesasw()
},1000); 

Контроллер :

public function datas(){
        $data= $this->reports->wholedatachart();
        
        foreach($data as $row){
            $data['req']=$row['req'];
            $data['amount']=$row['amount'];
            $data['total']=$row['total'];
        }
        echo json_encode($data);
        
    }

Модель:

  function wholedatachart(){
        
        
        $query=$this->db->query("SELECT timeProcess as 'req', transID as 'total', amount as 'amount' FROM tbl_transaction");
        return $query->result_array();
        
        
    }
  • 0
    Можете ли вы также опубликовать свою структуру данных
  • 0
    prnt.sc/13twypr Вы это имели в виду? Мне жаль. Я новичок. Спасибо.
  • 0
    поэтому вы хотите, чтобы он увеличивался и показывал общую сумму для каждых новых данных (например, 18:26:23 покажет 1000, а в 18:26:24 покажет 2000) или всего сегодня?,
  • 0
    например. 18:26:23 покажет 1000, а в 18:26:24 покажет 2000) <<< этот
  • 0
    Привет, транзакции уже хранятся в базе данных или они одновременно вставляются в другую часть кода, а через интервал вы их загружаете?
  • 0
    Здравствуйте, он уже хранится в БД.
  • 0
    Итак, вы просто загружаете все записи и добавляете их в диаграмму? Зачем тогда нужен интервал?
  • 0
    Моя проблема, я получаю их с интервалом, например, для 1 мин. = Все транзакции + еще 1 мин. = Общие транзакции и так далее ... Я сделал ошибку, это было для меня плохо.
Теги:
codeigniter charts
CodeFix

2 ответа

1
Лучший ответ

Вы можете выполнить расчетную часть внутри своегоdrawChart функция. Внутри этой функции вы можете просто получить общее значение суммы, затем сохранить его в какой-либо переменной и передать в свойdataArray.push(..) .

Демо-код :

//suppose data look like this..
var result = [{
  "req": "1",
  "amount": 2000,
  "total": 1000
},{
  "req": "2",
  "amount": 1000,
  "total": 1000
},{
  "req": "3",
  "amount": 1000,
  "total": 1000
}]

function sampleeesasw() {

  /*$.ajax({
    type: 'post',
    url: '',
    dataType: 'json',
    success: function(result) {*/

  google.charts.load('current', {
    'packages': ['corechart']
  });
  google.charts.setOnLoadCallback(function() {
    drawChart(result);
  });
  function drawChart(result) {
  var data = new google.visualization.DataTable();
  data.addColumn('string', 'req');
  data.addColumn('number', 'total');
  data.addColumn('number', 'amount');


  var dataArray = [];
  var total=0 //intialze..
  $.each(result, function(i, obj) {
  total +=parseInt(obj.amount)//add on each iteration
    dataArray.push([obj.req, parseInt(obj.total), parseInt(total)]); //add value here ..
  });

  data.addRows(dataArray);


  var options = {
    seriesType: "line",

  };
  var chart = new google.visualization.ComboChart(document.getElementById('wholechart')).draw(data, {
    curveType: "function",
    vAxes: {
      0: {
        logScale: false
      },
      1: {
        logScale: false,
        maxValue: 2
      }
    },
    series: {
      0: {
        targetAxisIndex: 0
      },
      1: {
        targetAxisIndex: 1
      },
      2: {
        targetAxisIndex: 1
      }
    }
  });

}
  /* }
  });*/

}





setInterval(function() {
  sampleeesasw()
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

<div class="col-md-12">
  <!-- LINE CHART -->
  <div class="card card">
    <div class="card-header">
      <h3 class="card-title">Stats Per Day</h3>

      <div class="card-tools">
        <button type="button" class="btn btn-tool" data-card-widget="collapse" style="width:30%;">
                    <i class="fas fa-minus"></i>
                  </button>
      </div>
    </div>
    <div class="card-body">
      <div class="chart">
        <div id="wholechart" style="min-height: 250px; height: 250px; max-height: 250px; max-width: 100%;"></div>
      </div>
    </div>
    <!-- /.card-body -->
  </div>


</div>

Поделиться
Источник
  • 1
    Привет, Свати. обязательно попробую это завтра утром. (Потому что меня сейчас нет дома) Надеюсь, вы дождетесь моего ответа. Спасибо, и я действительно оценил это.
  • 0
    Привет, Свати. Я тоже сделал ваше предложение. Единственное, что происходит, это то, что он учитывает каждую транзакцию, а не саму общую сумму. Пожалуйста, посмотрите этот снимок экрана: prnt.sc/1402byz
  • 1
    : P какое значение вам нужно total obj.total или obj.amount ?
  • 0
    Извините, если я не прояснил ситуацию, я стремлюсь к obj.amount.
  • 1
    Итак, вам нужно obj.amount значения obj.amount и показывать вместо какой метки? Извините за то, что запутали :)
  • 1
    также на вашем скриншоте вы не изменили dataArray.push([obj.req, parseInt(obj.total), parseInt(total)]); внимательно посмотрите на мой код. Я передаю total качестве последнего параметра
  • 1
    Вау, Свати. Большое тебе спасибо. Я действительно ценю твои усилия, чтобы помочь мне. Большое вам спасибо еще раз.
  • 0
    Рад, что смог вам помочь :)
0

Я думаю, вы можете попробовать это, вам нужно увеличить количество данных, вы можете использовать временную переменную и увеличить всю сумму.

Я отредактировал ответ извините мой плохой.

смени свой контроллер на

public function datas(){
        $data= $this->reports->wholedatachart();
        $tempAmount = 0;
        foreach($data as $row){

            $tempAmount = $tempAmount + $row['amount'];

            $output[]=array(
            'req'        => $timeline['time'],
            'amount'    => $tempAmount,
            'amount'    => $row['amount'],
            );
        
 

        }
        echo json_encode($output);
}

если вы хотите добавить сумму, вы можете сделать то же самое

Поделиться
Источник
  • 0
    Здравствуйте, я попробовал, и ничего не изменилось. Это все тот же prnt.sc/13u1o52 << Пожалуйста, посмотрите это. Спасибо
  • 0
    Вот что я сделал >>> prnt.sc/13u5on8
  • 0
    Привет, Даффа. Я сделал то, что вы предложили, и вот что произошло. График исчез и ничего не меняется. prnt.sc/13zzwkq
  • 0
    Извините, если я не могу вам помочь, рад, что вы нашли свой ответ, спасибо за отзыв

Другие вопросы

CodeFix
Цитата дня

"Завидую тестировщикам: все хотят с ними дружить."

Эндрю Таненбаум