先週のチャレンジの解答は こちら
今週のチャレンジは @Qiuさんによって作成されました。提出ありがとうございます!
書店のオーナーは、一部の本が利用できない理由を分析したいと考えています。
データセットには、タイトル、日付、および利用できない理由ごとに利用できる本の毎日の伝票レコードが反映されます。列 「Availability(可用性)」には、特定の日付に利用可能な書籍の数が表示されることに注意してください。
そして書店のオーナーが、本が利用できなかった日数とその理由を見つけるのを手伝ってください。
ヒント
• 本が利用できない日にフラグを立てることから始めましょう
• 利用できない書籍をフィルタリングできるように、書籍ごとに利用可能な連続日数でグループ化してください
• 利用できない最初と最後の日を選び、利用できない連続した日数と理由を数えましょう
• 利用できる最初と最後の日付を見つけて下さい
できました。
Reasonが想定していた順序と逆だったので、一回迷いました。
日付のソートをするために、DateTime型に変換したのですが、String型に戻す際に
DateTimeFormat関数だと %d や %m が "02" など、先頭にゼロがついてしまいます。
このため、面倒ですが DateTimeMonth関数などで個別に変換しました。
(%dでも先頭のゼロをつけない方法があればご教示ください)
ソート順は合わせられませんでしたが、解答のソートのルールがわからないため、そのままにしております。
採用おめでとうございます!
わたしも最後のソート順が分からなかったのですが、内容は一致したと思います。
できました!
めちゃくちゃ気になっているのが、複数行フォーミュラで以下関数がずっとFalseになり続けることです・・・。
DateTimeAdd([Row-1:DateTime_Out],-1,"Day")=[DateTime_Out]
原因を調べてみると、、、日付型だとずっとFalseで、日時型だとTrue/Falseで正しく計算できてたので要するに異なる型で比較していたのが原因かと思いますが、これが機能しない理由が解せません・・・(結局、DateTimeAddすると日時型で帰ってくるらしく、日付型と日時型の比較したときに時間部分が日付型になくて常に異なる、と判定されるようですね・・・)🤤。
同じ問題が起きて悩んでいました。型が違っていたのですね。勉強になりました。
わたしも最初全く同じ処理をやっていてうまくいかず悩み、諦めてその2つの日付の差分が0かどうか、で判定しました・・・
DateTimeDiff([DateTime_Out],DateTimeAdd([Row-1:DateTime_Out],1,'days'),'days')=0
DateTimeAddは日時型になるのですね。普段の実装でも気を付けないと間違ったロジックを書いてしまいそうです。