2017-03-28 1 views
1

나는 spotfire 질문을 가지고 있습니다. 도형 값별지도 차트에 작성하려고합니다.SPOTFIRE 커스텀 익스프레션을 사용하여 맵 차트의 컬럼을 어떻게 구성합니까?

나는 사용자 정의 표현 이러한 모양를 작성하고 싶습니다. 사용자 정의 표현식은 아래에 있습니다. 읽기 쉽도록 간단하게했습니다.

내가 말하고 모든

은 다음과 같습니다

경우 ((현재 개월 오일 속도 - 12MonthAgo Oilrate)/12MonthAgo Oilrate) "아래", "UP"> 0,,)

그래도 난이 계산을 실행 그것은 오직 하나의 가치만을 제공합니다 (긍정적 인 것과 네거티브가 모두 있으므로 두 가지를 주어야합니다).

내가 잘못했는지 잘 모르겠습니까? 어떤 도움을 주셔서 감사합니다.

<If(((((Sum(If(CurrentMonth),[OILRATECD],null)) 
    - 
Sum(If(12MonthsAgo),[OILRATECD],null))))) 
    /
Sum(If(12MonthsAgo),[OILRATECD],null)))>0,"UP","DOWN")> 

ORIGINAL 식 :

<If(((((Sum(If((Month([DATE])=Month(DateAdd("mm",-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-2,DateTimeNow()))),[OILRATECD],null)) 
    - 
Sum(If((Month([DATE])=Month(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))),[OILRATECD],null))))) 
    /
Sum(If((Month([DATE])=Month(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))),[OILRATECD],null)))>0,"UP","DOWN")> 

답변

1

먼저, 불필요한 괄호를 많이 가지고 있지만 아무것도 다치게해서는 안된다. 조건이 충족되지 않기 때문에

If(
    (
     (--this open parentheses is unneeded 
      (--this open parentheses is unneeded 
       (
        Sum(If((Month([DATE])=Month(DateAdd("mm",-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-2,DateTimeNow()))),[OILRATECD],null)) 
        - 
        Sum(If((Month([DATE])=Month(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))),[OILRATECD],null)) 
       ) 
      ) --this closed parentheses is unneeded 
     ) --this closed parentheses is unneeded 
     /
     Sum(If((Month([DATE])=Month(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-${MonthInterval}-2,DateTimeNow()))),[OILRATECD],null)) 
    ) 
    >0,"UP","DOWN") 

당신이 UPDOWN 반환 받고되지 않은 이유입니다. 을 확인하기 위해 예상되는 출력을 가진 샘플 데이터 세트가 필요합니다.

그러나 SUM(IF(...,[OILRATECD],NULL)) 표현에서 NULL과 관련하여 예기치 않은 결과가 발생할 수 있습니다.

TL; DR

당신의 IF() 문에 condtion 이제까지 SUM()에 반환 true의 NULL로 평가되지 및 SUM(NULL,NULL,NULL) = NULLNULL>하지 않으며이 < 0 인 경우 따라서 외부 IF() 문은 "UP"또는 "DOWN"대신 NULL을 반환합니다.

,363,210

당신이을 원하는이다 SUM()을 평가할 때

  1. Spotfire의이 NULL을 무시 LONG VERSION. 예를 들어, Sum(4,3,NULL) = 7 그리고 이것이 우리가 원하는 행동입니다. 그러나
  2. >과 같은 덧셈, 뺄셈, 나누기 및 기타 비교 연산자에 대해서는 Spotfire가 NULL을 무시하지 않습니다. 그래서 4 - NULL = NULLNULL/18 = NULL 등등. 즉, 두 개의 SUM() 메소드 중 하나가 NULL을 반환하면 전체 표현식이 NULL이되므로 ...비교 또는 아무것도 동일시 될 수 없다 따라서
  3. NULL>는 아니며 그 <을하고 확실히 = 0 NULL는 값의 부재이며,. 예를 들어 If(NULL > 1,"YES","NO")은 YES 또는 NO를 반환하지 않습니다. 값이없는 NULL을 반환합니다. 또한, If(NULL=NULL,"YES","NO")은 어떻게 디폴트 값으로 설정하는 IF() 문 주변에서 본

    사용 IS NULLIS NOT NULL을 GET 또는 현재에 NULL의 자리에 0을 사용하는 NULL

를 반환합니다 표현.

Sum(If((Month([DATE])=Month(DateAdd("mm",-2,DateTimeNow()))) and (Year([DATE])=Year(DateAdd("mm",-2,DateTimeNow()))),[OILRATECD],0))

BIG SIDE 참고

당신은 당신의 방정식의 의사 코드는 말했다 :

If((Current months oil rate - 12MonthAgo Oilrate)/12MonthAgo Oilrate)>0,"UP","Down") 

이것은 당신이 평가하고 무엇 될 것 같지 않습니다. 대신, 읽기 : 그래서 만약 당신이 현재 달의 오일 속도로보고되지 않지만, 대신에 현재보고있는

x = (-var) + (-2) thus var < -2 (i.e. -3....-6...-55) 
if((sum([2 months ago oil rate]) - sum([x months ago oil rate])) > 0, "UP","DOWN") 

- 2. 또한, 그 한 달 동안 SUM()에서 찾고 있습니다 ... 이것은 당신이 당신에 의해 실제로 당신은 KEE 할 몇 가지 계산 된 열이 훨씬 쉬워 대부분 처리 할 수 ​​

OVER 기능 Max() 또는 Min()

을 찾고있을 수 있습니다 원하는 것을 할 수있다 P 데이터/표현 깨끗하고

    DatePart("yy",[Date]) as [Year]
  1. DatePart("mm",[Date]) as [Month]
  2. Max([OILRATECD]) OVER (Intersect([Year],[Month])) as [YearMonthRate]
  3. 또는 당신이 정말 원하는 거라면 SUM()을 사용하여 읽기.
  4. 검사는 모두를위한 Rank()
+0

이봐 감사와 차이를 볼 수 있습니다! 테스트를 위해 nulls를 0으로 변경했으나 여전히 작동하지 않았습니다. 나는 그것을 들여다보고 내가 어딘가에서 실수를했는지를 볼 것입니다. (PS 쪽지를 써 놓았습니다. 예, 저는 제 문제를 혼란스럽게 할 것이라고 느꼈기 때문에 2 달 전에 뒤쳐지는 일을해야한다고 설명하고 싶지 않았습니다.) calc 칼럼이 작동하는지 모르겠다. 우리는 바꿀 수 있기를 바란다. 속성 컨트롤이있는 시간 프레임 하지만 어쩌면 그럴 것입니다. 어쨌든 감사합니다. – brandog

+0

@brandog 오류가 발생하는 샘플 데이터를 제공 할 수 있습니까? 그런 다음 MCVE에 다시 작성하여 문제를 파악하고 문제를 해결할 수 있습니다. – scsimon

+0

매우 늦은 답변에 대해 사과드립니다. 샘플 데이터를 제공 할 수는 없지만 어쨌든 작동하지 않는다는 것을 깨달았습니다. 사실 나는 매월 간격을 바꾸기 때문에 데이터가 항상 바뀌고 때로는 모두 양수가되고, 다음에 모두 음수가되고, 그 다음에 모두 바뀝니다. Spotfire를 사용하면 모양을 설정할 수 없으므로 새 월 간격을 선택할 때마다 모양이 무작위로 지정됩니다. 그래도 고마워. – brandog

관련 문제