스프링링링
611
2021-06-24 14:49:53 작성 2021-06-24 14:52:14 수정됨
2
115

c3.js 그래프 데이터 받아오려고 하는데 NaN값이 떠요


* 자바스크립트 , 넥사크로 입니다!


데이터셋이 다음과 같이 8개의 과목코드, 점수가 나온 날짜, 점수 3가지 칼럼이 있고 datetime은 총 3개가 있어요 (예시 데이터입니다 !)


 subject_cd

 datetime

 score

 0001

 0624

 10

 0002

 0624

 20

 0003

 0624

 15

 0004

 0624

 35

 0005

 0624

 40

 0006

 0624

 10

 0007

 0624

 25

 0008

 0624

 50

 0001 0625 15
  ... 
 0008 0626 50

이걸 배열에 

[
   ['score1',10,20, ... ]
   ['score2', ... ]
   ['score3', ... ]
]

다음과 같이 넣어주고 싶어요

	var score = ['score',];
	for(var i=0; i < 8; i++)
	{
		score.push((this.ds_dataset00.getColumn(i, "SCORE"));
	} 

DATETIME 기준 데이터가 8개씩 있으니깐 
for문으로 8개씩 받아오게끔 짜봤더니 값은 잘 받아와요


trace 찍어본 결과에요!


근데 이게 그래프로 구현하려면 맨 앞에 데이터 이름이 다 달라야 3개 데이터가 나오는거 같아서 (c3.js)



이렇게 데이터가 한개만 나오더라구요 


그래서 위에서 말한 2차원 배열로 짜보려고 

	var score = new Array();
	
	var score1 = ['score1'];
	this.ds_dataset00.filter("");
	this.ds_dataset00.filter("DATETIME == '0624'");
	for(var i=0; i < 8; i++)
	{
		score1.push(this.ds_eachscore.getColumn(i, "SCORE"));
	}
	
	var score2 = ['score2'];
	this.ds_dataset00.filter("");
	this.ds_dataset00.filter("DATETIME == '0625'");
	for(var i=0; i < 8; i++)
	{
		score1.push(this.ds_eachscore.getColumn(i, "SCORE"));
	}

	var score3 = ['score3'];
	this.ds_dataset00.filter("");
	this.ds_dataset00.filter("DATETIME == '0626'");
	for(var i=0; i < 8; i++)
	{
		score1.push(this.ds_eachscore.getColumn(i, "SCORE"));
	}
	
	score.push(score1);
	score.push(score2);
	score.push(score3);

데이터셋에 필터 넣어서 배열 생성을 해봤는데요 


다음과 같이 NaN 값이 뜨더라구요 ㅠㅠ
넥사크로에서 trace 찍어보니까


이렇게 score1만 뜨는걸 보니까 datetime 중에 1가지 밖에 못가져오는거같은데 ...

var order = 1;
case "fn_searchAction_test" :
	if(order < 3) {
	    order++;
	    this.fn_searchAction("test");
	} else if(order == 3) {
	this.fn_drawChart();
	this.fn_drawCharttwo();
        }
	break;

제가 다른 그래프 그리면서 (fn_drawChart) // 지금 그리는 그래프는 fn_drawcharttwo
이렇게 DATETIME 마다 RN으로 1,2,3 번 가져오는 쿼리를 짰었는데
그래서 order 중 1개밖에 못가져오는거일까요 ...?
쿼리에서 order 안쓰고 다 가져오도록 새로 짜는것도 시도를 해봤는데 얽혀있는게 많아서 너무 복잡해지더라고요 ㅠㅠ 

초보자라 개발 경험도 없고.. 어떤 방법으로 해야할지 생각이 나질 않아요 ㅠㅠ


혹시 제가 잘못 알고 있는 부분이 있거나 방향을 잘못 잡은 것 같다면 
한번만 봐주시길 부탁드리겠습니다 🙏 도와주세요 ..

0
  • 답변 2

  • 김지밐
    2
    2021-06-24 16:04:10
    var score1 = ['score1'];
    	this.ds_dataset00.filter("");
    	this.ds_dataset00.filter("DATETIME == '0624'");
    	for(var i=0; i < 8; i++)
    	{
    		score1.push(this.ds_eachscore.getColumn(i, "SCORE"));
    	}
    	
    	var score2 = ['score2'];
    	this.ds_dataset00.filter("");
    	this.ds_dataset00.filter("DATETIME == '0625'");
    	for(var i=0; i < 8; i++)
    	{
    		score1.push(this.ds_eachscore.getColumn(i, "SCORE"));
    	}
    
    	var score3 = ['score3'];
    	this.ds_dataset00.filter("");
    	this.ds_dataset00.filter("DATETIME == '0626'");
    	for(var i=0; i < 8; i++)
    	{
    		score1.push(this.ds_eachscore.getColumn(i, "SCORE"));
    	}
    score1, score2, score3 각각 for loop안에서 전부 score1에 push하고 있는데
    의도하신게 맞으실까요?

  • 스프링링링
    611
    2021-06-24 16:06:53

    김지밐 

    아하 코드가 잘못된거였나요 ?ㅠㅠ

    제 생각에는 같은 데이터셋에 

    DATETIME 0624 - > 8개 / 0625 -> 8개 / 0626 -> 8개 

    이렇게 있으니까 각각 DATETIME 에서의 score 데이터만을 불러오는 거라고 생각해서

    저렇게 필터주고 for문도 8개로 돌린거거든요 ...

    저부분을 고쳐줘야 하는건가요 ?

  • 로그인을 하시면 답변을 등록할 수 있습니다.