2017-03-28 5 views
1

私はスポットファイアに関する質問をしています。 図形を列の値で図表で作成しようとしています。SPOTFIREマップ表の列でカスタム式を使用してどのようにシェイプするのですか

私はカスタム式することにより、これらのシェイプを作成したいと思います。カスタム式は以下の通りですが、読みやすくするために簡略化しました。

私が言っているすべては、次のとおりです。

場合((現在ヶ月油率 - 12MonthAgo Oilrate)/ 12MonthAgo Oilrate)> 0、 "UP"、 "ダウン")

でも、私はこの計算を実行すると、それは私に一つの価値しか与えません(ポジティブとネガティブの両方がありますので、2つ与えなければなりません)。

私は何が間違っているのか分かりませんか?どんな助けもありがとうございます。

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

元の方程式:

<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を返します

あなたが欲しいものです SUM() を評価する際

LONG VERSION

  1. スポットファイアはNULLを無視しました。たとえば、Sum(4,3,NULL) = 7とこれは私たちが望む動作です。 しかし...
  2. >のような加算、減算、除算、およびその他の比較演算子の場合、SpotfireはNULLを無視しません。したがって、4 - NULL = NULLNULL/18 = NULLなど。つまり、2つのSUM()メソッドのいずれかがNULLを返した場合、式全体はNULLになります。
  3. NULL>ないまたそれは、<と確かに値が存在しないことであり、したがって、比較または何かと同一視することができません。たとえば、If(NULL > 1,"YES","NO")はYESまたはNOを返しません。NULL、値の欠如を返します。また、If(NULL=NULL,"YES","NO")また、デフォルトの値に設定し、または現在でNULLの代わりに0を使用するIF()文でTHIS

    使用IS NULLIS NOT NULL AROUND取得する方法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データ/表現

  1. DatePart("yy",[Date]) as [Year]
  2. DatePart("mm",[Date]) as [Month]
  3. Max([OILRATECD]) OVER (Intersect([Year],[Month])) as [YearMonthRate]またはそれはあなたが本当に欲しいものかどうSUM()を使用し、クリーンで読みやすいです。
  4. ねえRank()
+0

ですべてのことについて感謝を違いを見るためにチェック!テストするためにnullを0に変更しましたが、まだ動作しませんでした。私はそれを調べて、どこかで間違いを犯したかどうかを見ます。 (あなたのサイドノートにPS、私は知っている、私は私がそれが私の問題を混同すると感じたので、私は2ヶ月前に遅れていることを説明する必要はありません説明したい)私は変更することができますプロパティコントロールを持つ時間枠。しかし、おそらく彼らはそうするでしょう。とりあえずありがとう。 – brandog

+0

@brandogエラーを投げているいくつかのサンプルデータを提供できますか?その後、MCVEに再作成して問題を突き止め、問題を解決することができます。 – scsimon

+0

非常に遅れて返信して申し訳ありません。私はサンプルデータを提供できませんが、とにかく動作しないことに気付きました。私が毎月の間隔を切り替えるという事実により、データは常に変化します。時にはそれらはすべて正、次回は負、その後の両方であります。 Spotfireでは、シェイプを設定することはできません。たとえそれが機能しても、新しい月間隔を選択するたびにシェイプがランダム化されます。しかし、ありがとう。 – brandog

関連する問題