본문 바로가기
Data Analysis/Spotfire

[Spotfire Q&A] Over 함수 응용편

by 불탄오징어 2021. 4. 5.
반응형

 

 

 

 

아래와 같이 샘플 데이터와 함께 질문을 주셨습니다. 샘플 데이터를 복사해서 Spotfire에 붙였습니다.

 

 

 

 

 

Calculated Value 의 Over() 함수 활용


Spotfire에 넣어서 보면 다음과 같습니다. 이미지에서 보는 바와 같이 변경이 된 부분은 CATEGORY에서 APPLE4만 해당이됩니다. 4월3일에서 4일로변경하면서 REMAIN_DATE가 5에서 4로 감소했습니다. 결국 변경 시점을 확인하고 변경 부분을 찾아야하는데 over 함수를 활용하여 전일 데이터를 가져와서 비교하면 될 것 같습니다.

 

 

먼저 Calculated Column을 추가합니다. Column name은 '이전 REMAIN_DATE'로 지정합니다.

 

Integer(Avg([REMAIN_DATE]) over (Intersect(Previous([DATE]),[CATEGORY])))

 

다음 생성한 '이전 REMAIN_DATE'를 활용하여 전일 데이터와 다른 지점을 찾아보겠습니다.

 

CASE  WHEN ([이전 Remain_date] IS NOT NULL) AND ([REMAIN_DATE]!=[이전 Remain_date]) THEN 1 ELSE 0 end

 

이것은 'chk'로 칼럼을 생성합니다. 그러면 결과는 아래와 같습니다.

 

원하는데로 4월 3일에서 4일로 변경점을 찾았습니다. chk값을 활용하면 변경점에 대한 아웃풋을 만들 수 있을 것 같습니다. 원하시던 결과면 좋겠네요. 

 

 

sample_20210403.dxp
0.04MB

 

 

 

Data  Function 활용


답글을 보니 원하시던 답이 아니었네요 ^^; 좀더 가변적으로 해보려고 하니 Calculated Column으로는 한계가 있고 ironPython으로 하기에는 Pandas와 같은 유용한 패키지를 쓸 수가 없어서 Data Function을 활용하면 될 것 같습니다. Data Function으로 R, SAS등과 연동해서 쓸 수 있습니다. 버전이 일정 이상이면 별도 R 연동 없이 내장된 TERR로도 가능할 것 같네요.

 

상단 메뉴 - Tool - Register Data Functions를 클릭합니다.

  • Type을  Rscript-TIBCO Enterprise Runtime for R로 변경합니다. 
  • Packages에 data.table; dplyr 을 입력합니다.
  • Allow caching을 체크해제 합니다.
  • Script에 아래 스크립트를 입력합니다.

 

df <- input

output <- df %>% arrange(CATEGORY, DATE)%>% group_by(CATEGORY)%>% mutate(lag.value=lag(REMAIN_DATE, n=n))%>%ungroup()

output <- data.table(output)

output[, chk := ifelse(REMAIN_DATE == lag.value, TRUE, FALSE)]

 

  • Input Paramters에 Input 값을 설정합니다.

 

참고로 각 Input값의 설정은 다음과 같습니다.

 

 

  • Output Parameters를 설정합니다.

 

위와같이 설정이 됐으면 Name에 함수명을 적당히 쓰고 Run을 클릭합니다. 그 후 Input 값과 Output 값을 설정하여 실행합니다.

 

그후 결과 테이블을 확인하면 아래와 같습니다.

 

 

위의 테이블에서 chk값이 False인것만 합산해주면 원하는 형태의 결과를 얻을 수 있습니다. n 값은 가변 설정이 가능하도록 외부 변수 참조가 가능한데 Text Area에 input field를 설정하여 연결해주면 더 편하게 작업이 가능할 것 같습니다.

 

 

댓글