Free Trial

ウィークリーチャレンジ

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

チャレンジ #171: 書籍の在庫分析

SaoriG
Alteryx Alumni (Retired)

先週のチャレンジの解答は こちら

今週のチャレンジは @Qiuさんによって作成されました。提出ありがとうございます!

 

書店のオーナーは、一部の本が利用できない理由を分析したいと考えています。

image_323.png

 

データセットには、タイトル、日付、および利用できない理由ごとに利用できる本の毎日の伝票レコードが反映されます。列 「Availability(可用性)」には、特定の日付に利用可能な書籍の数が表示されることに注意してください。

 

そして書店のオーナーが、本が利用できなかった日数とその理由を見つけるのを手伝ってください。

 

ヒント
•  本が利用できない日にフラグを立てることから始めましょう
•  利用できない書籍をフィルタリングできるように、書籍ごとに利用可能な連続日数でグループ化してください
•  利用できない最初と最後の日を選び、利用できない連続した日数と理由を数えましょう
•  利用できる最初と最後の日付を見つけて下さい

gawa
15 - Aurora
15 - Aurora

@Qiu 採用おめでとうございます!

スポイラ
並びが合わなかったですが、提出しちゃいます。時系列順にしてみたのですが・・・
gawa_0-1655243748897.png

 

ntakeda
ボリード

できました。

スポイラ

Reasonが想定していた順序と逆だったので、一回迷いました。

ntakeda_0-1655263063880.png

 

DaisukeTsuchiya
パルサー

@Qiu さん、採用おめでとうございます!

 

スポイラ
並びは答えを見て無理やり合わせたのですが、Concatenateの中身までは合いませんでした。

キャプチャ.JPG

Yoshiro_Fujimori
オーロラ

日付のソートをするために、DateTime型に変換したのですが、String型に戻す際に

DateTimeFormat関数だと %d や %m が "02" など、先頭にゼロがついてしまいます。

このため、面倒ですが DateTimeMonth関数などで個別に変換しました。

(%dでも先頭のゼロをつけない方法があればご教示ください)

 

ソート順は合わせられませんでしたが、解答のソートのルールがわからないため、そのままにしております。

スポイラ
Yoshiro_Fujimori_0-1655264440820.png

 

sanae
ボリード

採用おめでとうございます!
わたしも最後のソート順が分からなかったのですが、内容は一致したと思います。

スポイラ
Challenge_ja_171_start_sanae.png
AkimasaKajitani
17 - Castor
17 - Castor

できました!

 

スポイラ
英語版のときはソート順わからなかったのですが、やり直したら意外と簡単でした・・・(今になって見てみると、なぜ見落としたのか、、、)。

AkimasaKajitani_0-1655387822957.png

 

めちゃくちゃ気になっているのが、複数行フォーミュラで以下関数がずっとFalseになり続けることです・・・。

 

DateTimeAdd([Row-1:DateTime_Out],-1,"Day")=[DateTime_Out]

 

原因を調べてみると、、、日付型だとずっとFalseで、日時型だとTrue/Falseで正しく計算できてたので要するに異なる型で比較していたのが原因かと思いますが、これが機能しない理由が解せません・・・(結局、DateTimeAddすると日時型で帰ってくるらしく、日付型と日時型の比較したときに時間部分が日付型になくて常に異なる、と判定されるようですね・・・)🤤

 

DaisukeTsuchiya
パルサー

@AkimasaKajitani 

同じ問題が起きて悩んでいました。型が違っていたのですね。勉強になりました。

DaisukeTsuchiya
パルサー

@Yoshiro_Fujimori 

 

同じくうまくいかず、同様の処理をしました。できそうで、できないんですよね…。

sanae
ボリード

@AkimasaKajitani さま

わたしも最初全く同じ処理をやっていてうまくいかず悩み、諦めてその2つの日付の差分が0かどうか、で判定しました・・・
DateTimeDiff([DateTime_Out],DateTimeAdd([Row-1:DateTime_Out],1,'days'),'days')=0

DateTimeAddは日時型になるのですね。普段の実装でも気を付けないと間違ったロジックを書いてしまいそうです。