2016-08-04 4 views
0

나는 3 개의 행 차트를 가지고 있으며 사용자가 처음으로 차트에 올라갈 때마다 차트의 백분율을 계산하고 업데이트합니다.
%의 부서 = DEPARTMENT 당 POSITION 카운트/POSITION 카운트 : 모든 위치

deptChart에 대한
% 위치 = 위치마다 고유의 StoreNumber 카운트/독특한 StoreNumber 카운트 : 그것은 비율

posChart을 계산하는 방법이다 모든 부서에 대한

상태 차트 : 모든 국가에 대한 주/독특한 StoreNumber 카운트 당
% 미국 = 고유 StoreNumber 카운트

내가 원하는 것은 사용자가 "COUNTS BY STATE"와 같이 rowChart의 사각형 막대를 클릭 할 때 이 아니어야합니다. 해당 차트의 백분율을 업데이트/다시 계산해야합니다 (자체 백분율에 영향을주지 않아야 함). , "COUNTS BY DEPARTMENT"및 "COUNTS BY POSITION"과 같은 다른 두 차트에 대한 백분율을 다시 계산해야합니다. 같은 시나리오가 다른 차트에도 적용됩니다. 이것은 사용자가 "부서 COUNTS"차트를

그래프가 자체 백분율을 다시 계산하지 못하도록합니다

  1. 을 클릭하면 내가

    원하는 것입니다 -> "위치에 의해 COUNTS"에 대한 비율을 다시 계산하고 "국가에 의해 COUNTS"차트

  2. "COUNTS 위치에 의해"차트 -> "국가에 의해 COUNTS"차트 "배포자 BY COUNTS"에 대한 비율을 다시 계산하고

PLE ase 도움 !! 답장을
link:http://jsfiddle.net/mfi_login/z860sz69/

감사합니다. 제공 한 솔루션에 문제가 있습니다. 전체 필터에 대해 전체을 찾고 있지만 사용자가 현재 차트의 직사각형 막대를 클릭 할 때 총계가 변경되는 것을 원하지 않습니다.
예 : 동일한 StoreNumber (3)를 가진 두 개의 POSITIONS (감독자, 계정 관리자)가있는 경우 StoreNumber를 1이 아닌 2로 계산하십시오.

계정 관리자 % 계산의 예를 사용하면 COUNTS BY POSITION 차트)

total unique StoreNumbers=3 
Total Account Manager POSITIONs=2 
% = 2/3=66% 

현재 다른 차트를 건드리지 않고 다른 두 차트를 다시 그리는 방법이 있습니까?

답변

0

정말로 원하는 것은 전체 합계가 아닌 차트의 그룹 합계를 사용하는 것입니다. 전체 합계를 사용하면 모든 필터가 관찰되지만 현재 그룹에 대한 합계를 사용하면 현재 차트의 필터는 관찰되지 않습니다.

이렇게하면 효과가 있습니다. 계산을 막는 것이 아니라 각 차트가 다른 차트의 필터에만 영향을 받는지 확인하는 것입니다.

그래서, 대신 bin_counter의,의는 sum_groupsum_group_xep 정의 할 수 있습니다 :

function sum_group(group, acc) { 
    acc = acc || function(kv) { return kv.value; }; 
    return d3.sum(group.all().filter(function(kv) { 
    return acc(kv) > 0; 
    }), acc); 
} 

function sum_group_xep(group) { 
    return sum_group(group, function(kv) { 
    return kv.value.exceptionCount; 
    }); 
} 

을 그리고 우리는, 각 차트에 대해 다음을 사용합니다 예를 들어 너무 : 다른과 함께

posChart 
     .valueAccessor(function (d) { 
      //gets the total unique store numbers for selected filters     
      var value=sum_group_xep(posGrp) 
      var percent=value>0?(d.value.exceptionCount/value)*100:0     
      //this returns the x-axis percentages 
      return percent    
     }) 

    deptChart 
     .valueAccessor(function (d) { 
       total=sum_group(deptGrp) 
       var percent=d.value?(d.value/total)*100:0 
       return percent 
     }) 

    stateChart 
     .valueAccessor(function (d) { 
      var value=sum_group_xep(stateGrp); 
      return value>0?(d.value.exceptionCount/value)*100:0 
     }) 

... 6 개 장소에서 사용됩니다. 너무 많은 코드 중복없이 이것을 구성하는 더 좋은 방법이 있을지 모르지만 나는 그것에 대해 정말로 생각하지 않았습니다! 포크 당신의 바이올린의

: http://jsfiddle.net/gordonwoodhull/yggohcpv/8/

편집 : Reductio이 더 나은 바로 가기가있을 수 있습니다,하지만 난 현재 차트의 그룹에있는 값의 합계로 나누어보다는 관찰 groupAll을 사용하는 원리를 생각한다 모든 필터가 바로 시작됩니다.

+0

여기에 귀하의 게시물에 회신 할 수없는 답변을 참조하십시오 –

+0

@FarahJaved, 누군가가이 답변에 대한 회신 인 귀하의 답변을 삭제 한 것으로 보입니다. 원래 질문을 편집하여이 대답이 왜 효과가 없는지 설명해야합니다. – Gordon

+0

시간이되면 바로 수정하겠습니다. 알림 주셔서 감사합니다. –