Skip to main content

初めて投稿します。

Tableau Publicで横浜市火災発生件数を作ってみているのですが

「 1月」の様に頭の空白に続いて全角数字があるデータを

計算フィールドで日付形式に直すところで苦労しています。

INT(TRIM(

REPLACE(

REGEXP_REPLACE([月],'0-9','0-9'),

"月",""

)

))

の様にしても​全角のままなので、最後は力業で

INT(TRIM(

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE

(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE([月],

"1","1"),"2","2"),"3","3"),"4","4"),"5","5"),

"6","6"),"7","7"),"8","8"),"9","9"),"0","0"),

"月","")

))

としてしまいましたが、もっとシンプルな方法はないでしょうか。​

2 个回答
  1. 2022年3月13日 15:08

    全角・半角の変換は基本的にプログラム的に処理する(1文字ずつ判定と変換を繰り返して完成させる)もので、Tableau Desktop内の関数で処理するのではなく、データの事前処理の段階で半角にしておくことが望ましいです。今回の例ではそもそも「月」のフィールドに元号が混じっているので尚更事前にデータを綺麗にしておくことを考えたほうがよいと思います。

    ​REPLACEを入れ子にする力技以外の方法ですが、今回のデータの内容に限れば、シンプルかどうかは別にして、一応

    IF CONTAINS([月], '月') THEN

    INT(

    IFNULL(REGEXP_EXTRACT([月], '\s([0-9]*)月'), '') +

    IFNULL(CHAR(ASCII(REGEXP_EXTRACT([月], '\s([0-9]*)月')) - 65248), '')

    )

    END

    ​の式で元々作成されている「mm」のフィールドと同じ結果を出すことができます。但し、データソースに変更があったとき(先頭のスペースが無かったり、別の文字になっているデータが追加されたりしたときなど)は対応できません。

    全角・半角の変換は基本的にプログラム的に処理する(1文字ずつ判定と変換を繰り返して完成させる)もので、Tableau Desktop内の関数で処理するのではなく、データの事前処理の段階で半角にしておくことが望ましいです。今回の例ではそもそも「月」のフィールドに元号が混じっているので尚更事前にデータを綺麗にしておくことを考えたほうがよいと思います。​​REPLACEを入れ子にする力技以外の方法ですが

0/9000