Free Trial

ウィークリーチャレンジ

トップになるためのスキルをお持ちですか? ウィークリーチャレンジを購読しましょう。ベストを尽くして問題を解決し、解決策を共有して、他のユーザーがどのように同じ問題に取り組んだのか確認しましょう。私たちも解答例を共有しています。

チャレンジ #262: 日付フォーマットをマスターする

AYXAcademy
Alteryx
Alteryx

 

こんにちは、Maveryx

 

先週のチャレンジの回答はこちらで見つけることができます。

 

今週のチャレンジは、コミュニティメンバーAntoBennetsha Jabamalai (@AntobennetshaJ)によって提供されました。データ準備スキルを磨きましょう!Antoさんに感謝します!

 

ほとんどの方は、日常の業務の中で様々な形式の日付データを扱う作業に遭遇していると思いますが、正直にいうと、プロセスを合理化する前に日付形式を定期的にチェックする人はいないと思います。

 

このチャレンジでは、調査データセットの一連の日付をクリーニングするタスクに直面します。この日付は文字列型のフィールドに収集されています。これは、調査の回答者がさまざまな形式で日付を入力している、という意味です。その結果、日付に異なる区切り文字や追加の不要な情報が含まれることになりました。調査データを実際に分析するためには、すべての日付を一貫したフォーマット(YYYY-MM-DD)に標準化し、古いものから新しいものまで整理することが重要です。

 

もう少し手助けが必要ですか? アカデミーにあるインタラクティブレッスン「データを列や行に分割する」では、スラッシュやハイフン、ドットなどの複数の区切り文字やその他の余分の文字を含むデータセット内の値の処理に関しての洞察が得られます。

 

健闘を祈ります!

 

Yoshiro_Fujimori
オーロラ

回答します。

スポイラ
Dynamic Replace Toolを使うのが出題者の意図と理解しましたが、
入力データの日付フォーマットの区切り文字が実際の日付データと合っていないものがあるので
すべて"-"に変換してから処理しました。

Workflow
Challenge_262_ja_Workflow.png

日付識別子への変換テーブル (conversion to Specifier)
fromto
dd%d
mm%m
yyyy%Y

Dynamic Replace Tool入力用の式 (Expression for Dynamic Replace)
expBoolExpressionNew Field
DateTimeParse([Date1],[Date2])-1Date1
Qiu
20 - Arcturus
20 - Arcturus

出来ました。

スポイラ
challenge_ja_262.PNG
gawa
15 - Aurora
15 - Aurora

ツールゴルフです。並び順さえ気にしなければ、それほど複雑じゃないフォーミュラーツール一発でいけます

スポイラ
①yyyy, mm, ddの文字の位置をFindStringで見つける
②①の位置にオフセット-11をすると、探したい数字の文字の位置になる
③Substringで②の場所の文字を見つけて、連結
SubString([Date Field],FindString([Date Field], "yyyy")-11,4)
+"-"
+SubString([Date Field],FindString([Date Field], "mm")-11,2)
+"-"
+SubString([Date Field],FindString([Date Field], "dd")-11,2)​

image.png
AkimasaKajitani
17 - Castor
17 - Castor

できました!これは、、、いろいろなやり方がありそうですね!

フォーミュラが手っ取り早いですが、こういうのってクロスタブとか使って作りたくなっちゃいます(結局、3パターン作ってみました)。

 

スポイラ

スクリーンショット 2024-03-28 210234.png

GetPartパターン
IF GetPart([2], "./-", 0)="yyyy" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="yyyy" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
+"-"+
IF GetPart([2], "./-", 0)="mm" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="mm" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF
+"-"+
IF GetPart([2], "./-", 0)="dd" THEN GetPart([1], "./-", 0)
ELSEIF GetPart([2], "./-", 1)="dd" THEN GetPart([1], "./-", 1)
ELSE GetPart([1], "./-", 2) ENDIF



ひたすらReplaceして、DateTimeParseにぶちこむパターン

DateTimeParse(ReplaceChar([1], "./", "-"),ReplaceChar(Replace(Replace(Replace([2], "dd", "%d"),"mm","%m"),"yyyy","%Y"),"./","-"))

 

Tokimatsu
クエーサー

似通ってますが3パターン作ってみました。

スポイラ
わかりやすくフォーミュラを分割したパターンと、表を使って書式文字の置換を行ったものを追加しました。スクリーンショット 2024-03-29 155339.png



DaisukeTsuchiya
パルサー
スポイラ
スクリーンショット 2024-04-01 101519.png