6 Replies Latest reply on Sep 5, 2019 5:26 PM by shuhei saito

    文字色の中央値判定について

    Takashi Miyoshi

      お世話になります。

       

      以下のように値1、2の差額をステップドカラーで中央値0にし、正負の色分けをしています。

       

      数値項目はパラメータで単位を切り替えられるようにしているのですが、
      ・円単位とした場合、0の値がすべてプラス扱いとなる。
      ・千円単位などにした場合、マイナス扱いや、グレー表示になるデータがある。
      という動きになっています。

       

       

      すべて円単位と同じ動きとしたいのですが、原因・対処方法をご存知ないでしょうか。

       

      よろしくお願いします。

        • 1. Re: 文字色の中央値判定について
          shuhei saito

          Tableauに限らずコンピュータで小数を扱うときにぶつかる現象です。

          https://kb.tableau.com/articles/issue/adjustment-of-number-format-appears-to-round-numbers-incorrectly?lang=ja-jp

           

          千円単位や百万円単位に丸めるのが「数値を比較する前なのか後なのか」によって対策が少し変わりますが、概ね計算途中は全て整数で計算することで解決できると思います。

           

          添付いただいたサンプルであれば、単位で割る前の数字で差を計算し、最後に単位で割ると正しいデータになります。

           

          ROUND()関数で整数に丸めながら計算を進めるという方法もありますが、集計の順番によって数字が1ずれたりすることがあるのでロジックに注意してください。

          2 of 2 people found this helpful
          • 2. Re: 文字色の中央値判定について
            Takashi Miyoshi

            なるほど、ありがとうございます。

            自分の環境でも再現できました。

            • 3. Re: 文字色の中央値判定について
              Shigeki Konishi

              shuhei saitoさん

               

              ふと疑問に思ったので、質問させてください。

              上図は、単位パラメーター=円の時です。

              除算をしていないので、数値はそのままになっています。

              上図は、単位パラメーター=千円の時です。

              1行目の値は、期待通りの値となっています。

              ですが、2行目・3行目に関しては、期待値となっていません。

              2行目に期待する値は、3926876.897、3926753.441を期待していました。

              3行目に期待する値は、3955484.644、4955484.644を期待していました。

              ここで行っている除算は、単純に値1、値2を1000で割っているだけなので誤差が生じる余地はないとの認識でした。

              1行目と他の行の違いは何でしょうか?

              • 4. Re: 文字色の中央値判定について
                shuhei saito

                Shigeki Konishi さん

                 

                IEEE754の浮動小数点のバイナリの問題は小数にした瞬間に発生するという認識です。(私もそのあたりの専門家ではないので厳密に正確ではないかもしれません)

                 

                1行目の「0.74」の部分もバイナリ変換すると無限小数になるので、きれいに割り切れているわけではないです。

                「---.74000000000000000013」とかになっているのではないでしょうか。それが桁数の都合で丸めたときに0.74までしか見えない(16桁目までゼロなので消える)のではないかと思います。

                1 of 1 people found this helpful
                • 5. Re: 文字色の中央値判定について
                  Shigeki Konishi

                  shuhei saitoさん

                   

                  なるほど。

                  ちょっとモヤモヤしますが、ここで議論する内容ではないので、割愛しますが、IEEE754に関するページをざっと見た限り、Tableauを開発している言語とアルゴリズムの精度の問題のような気がします。

                  とりあえずの回避策が提示されているので、問題ないのかなぁ…って感じです。

                  • 6. Re: 文字色の中央値判定について
                    shuhei saito

                    私も具体的に検証していないのですが、仰るとおり

                     

                    Shigeki Konishi による書き込み:

                     

                    Tableauを開発している言語とアルゴリズムの精度の問題のような気がします。

                     

                     

                    という部分の問題なのかもしれません。精度に関しては他に疑問もあって、例えば型が float だと言いつつ精度は double では?とも思ったりしています。(32bit時代の名残?それとも言語の問題?)

                    ただ、このあたりのTableauの仕様は公開されていないみたいなので、なんとも言えないところです。残念ながら、先に挙げたナレッジベースでもTableauが搭載するアルゴリズムについては言及されていません。

                     

                    ひとまずは「対応策はある」というところで落ち着いているので、それで分析を進めていけばいいのかなと思っています。(天文学やナノ・ピコレベルの数値を扱う場合を除いて)

                    1 of 1 people found this helpful