14 Replies Latest reply on May 31, 2016 6:16 PM by Shinichiro Murakami

    稼働時間の計算について

    MAKI TOMITA

      いつもお世話になっております。

      教えていただきたいことがあり、久しぶりに投稿させていただきます。

       

      添付のようなデータがあります。

      商品ごとにある一連の作業の開始時刻・終了時刻を1レコードで表しています。

      これを使って、以下の通り、稼働時間を自動的に算出したいと考えています。

       

      -------------------------------

      【計算方法】

        (データの上から)フラグAに1が立っているレコードからフラグBに1が立っているレコードまでを

        一区切りとして、その一区切りの開始時刻(F列)と終了時刻(H列)の差をとって「稼働時間」を計算したいです。

         例.商品Eの場合:F2セルとI6セルの差を稼働時間とする

       

       ・フラグAの1とフラグBの1は必ずセットになっています。

        (Aに1が立ったあとBに1が立つまでAには0以外が立つことはありません。
         また、Bに1が立った次のレコードはフラグAに必ず1が立ちます。)

       ・上記は商品ごとに続きますが、同日にそのセットが1回の場合もあれば複数回ある場合もあります。

        商品Jのように、フラグAの1からフラグBの1まで日を跨ぐこともあります。

      -------------------------------

       

      最終的には、横軸に時間をとって、稼働有無で色分けするなどの見せ方ができればと思っています。

       

      説明が下手くそで分かりにくいかと思うのですが、、、

      どなたかご教示いただけますと大変助かります。

       

      どうぞ宜しくお願い致します。

        • 1. Re: 稼働時間の計算について
          Takaaki Koseki

          このような形で表示する行ごとにフラグAとフラグBはひとつずつ1が立つという前提でよいでしょうか。

          20160414-1.png

          そうであれば

          {INCLUDE:MIN(IF [フラグA]=1 THEN [開始時刻] END)}
          

          のようにLOD表現を利用することで、各行ごとの開始時刻と終了時刻を取得することができます。

           

          こちらの「9. ある期間での最終日の値」あたりが参考になります。(サンプルが英語ですが。。。)

          LOD 表現トップ 15 | Tableau Software

           

          あとは

          DATEDIFF('hour',[開始],[終了])
          

          のようにDATEDIFF関数で稼働時間が取得できると思います。

           

          よろしくお願いします。

          • 2. Re: 稼働時間の計算について
            MAKI TOMITA

            Koseki 様

             

            お世話になります、富田です。

            この度はご返信有難うございました。

             

            度々で申し訳ないのですが、今のままですと
             開始:商品単位での一番早い開始時刻
             終了:商品単位での一番遅い終了時刻

            となり、やりたいことに少し足りません。

             

            商品ごとではなく、フラグAの1から次のフラグBの1までを一区切りとして
            計算したいです。区切り方のイメージを添付致しますので、ご参照ください。

            このように、規則性のない場合での最小・最大を取る方法はあるのでしょうか。

             

            度々となりお手数ですが、ご存知でしたらご教示いただけると助かります。

             

            どうぞ宜しくお願い致します。

            • 3. Re: 稼働時間の計算について
              Shinichiro Murakami

              こんな‘感じですかね。

               

               

              [フラグab]

              [フラグb]+[フラグa]

               

              Put on Filter

               

              [Start Time]

              if attr([フラグb])=1 then LOOKUP(min([開始時刻]),-1) end

               

              Put on Filter

               

               

              [End Time ]

              if [フラグb] =1 then [終了時刻] end

               

              [End - Start]

              -(min([End Time ])-[Start Time])

               

              [End - Start (Time duration.hours]

              (min([End Time ])-[Start Time])*24

               

               

              Thanks

              Shin

               

              9.0 attached

              • 4. Re: 稼働時間の計算について
                MAKI TOMITA

                Shinichiro Murakami 様

                 

                お世話になっております、富田です。

                この度はご返信有難うございました。

                 

                区切り方はやりたいように出来るようになりました!

                (attrは知らなかったです)

                あとは、見せ方なのですが、下記のような表現が出来ればと考えています。

                 

                縦軸 : 車両

                横軸 : 1時間毎の時間帯

                とし、右側のフィルタで日付を変えると、該当日の稼働時間帯が色塗りされる、といったようなものです。

                (色の濃淡は一旦無視していただいて結構です)

                別のデータで下記サンプルを作成したのですが、今回のデータで同じようにやる方法が分かりません。

                また、今回のデータの商品Jのように、一区切りの開始時刻から終了時刻までが日付を跨ぐ場合は、

                日付フィルタが開始日を選択している場合 : 開始時刻から24時まで塗られる日付フィルタが終了日を選択している場合 : 0時から終了時刻まで塗られる

                といったようにしたいです。

                 

                上記、対応可能でしょうか?

                 

                お忙しい中大変恐れ入りますが、ご教示いただけますととても助かります。

                 

                以上、何卒宜しくお願い致します。

                • 5. Re: 稼働時間の計算について
                  Shinichiro Murakami

                  最初にお断りしておきますが、結構ヘビーな課題です(と思います。私の知識の限りですが)

                   

                  いろいろと制約があります。

                  まず、

                  このままのデータセットでは対応できないので、ワークシートをデータソースとして使用する必要があります。

                   

                   

                   

                  NUllが生じるので、どっかでフィルタして取り除く必要があります。

                   

                  次に、

                  フィルターでは対応できません。なぜなら、1/1~1/3 まで連続してイベントが継続する場合、1/2をフィルタする方法がないからです。

                  ですので、パラメータで代替します。

                  既存データには、"日付" に該当するデータカテゴリがないので、パラメータ追加の前にフィールドの追加が必要です。

                  [Parameter Date]

                  date([Start Time])

                   

                  パラメータ追加

                   

                  加えて、

                  日付単位 12:00AMでカットするため  開始時刻、終了時刻が 商品名単位では補足できなくなります。

                  このため、INDEXを"イベント"レベルの単位として追加する必要があります。

                   

                   

                  分単位のデータを時間単位に変更

                  [Start Time (hour)]

                  date([Start Time])+int((float([Start Time])%1*24))/24

                   

                  [End Time (hour)]

                  date([End Time])+ceiling(float([End Time])%1*24)/24

                   

                  Start、End とも、12:00 AM でカット

                   

                  [Start Time (hour) 2]

                  if date([Start Time (hour)])=[Param Date]

                  then [Start Time (hour)]

                  elseif

                  date([Start Time (hour)]) <[Param Date]

                  and date([End Time (hour)])=[Param Date]

                  then [Param Date]+0.00

                  END

                   

                  [End Time (hour) 2]

                  if date([Start Time (hour)]) =[Param Date]

                  and date([End Time (hour)])>[Param Date]

                  then [Param Date]+1.0000

                  else [End Time (hour)]

                  END

                   

                  連続時間を計算

                   

                  [Start to End (hour) 2]

                  ([End Time (hour) 2]-[Start Time (hour) 2])

                   

                  ガントチャート作成

                   

                  という流れです。

                   

                  ところで、

                  過去のスレッドについても、何か返信頂けると幸いです。

                   

                  稼働2時間ごとに10分間隔をあける の計算方法について

                  セットのフィルタ設定について 

                   

                  村上

                  • 6. Re: 稼働時間の計算について
                    MAKI TOMITA

                    Shinichiro Murakami 様

                     

                    お世話になっております、富田です。

                     

                    ご丁寧なご返信有難うございました。

                    全く私の考えの及ばないところで、いただいた内容を追って理解するだけでも

                    かなりの時間を要してしまいましたが、やりたいことにだいぶ近づくことができました。

                    本当に有難うございます。

                     

                    度々となり大変申し訳ありませんが、下記点についてご教示ください。

                     

                    今回のサンプルでは「日付を跨ぐ稼働」は、商品Jの6/26・27の2日間だけでしたが、

                    例えば、6/26~6/30と3日以上の稼働となる場合、6/27・28・29は0:00~23:59まで塗られている状態であると

                    望ましいのですが、それはやはり難しいでしょうか。

                    (3日以上の稼働となるデータでグラフを作成すると、初日と最終日だけ塗られる形となります)

                     

                    お忙しい中大変お手数ですが、お分かりになるようでしたらご教示いただければ助かります。

                     

                    どうぞ宜しくお願い致します。

                    • 7. Re: 稼働時間の計算について
                      MAKI TOMITA

                      Shinichiro Murakami 様

                       

                      度々申し訳ありません。

                       

                      過去のスレッドについても確認させていただき

                      コメントさせていただくように致します。

                       

                      申し訳ありません。

                       

                       

                      • 8. Re: 稼働時間の計算について
                        MAKI TOMITA

                        Shinichiro Murakami 様

                         

                        度々のご連絡となり、申し訳ありません。

                         

                        ご教示いただいた商品ごとの時間帯別稼働状況とあわせて

                        添付ファイルのダッシュボード上段のように、日・時間帯(1時間)毎の稼働数を

                        一覧化したいと思っています。

                         

                        例えば、7:15~11:14まで稼働があった場合、7・8・9・10・11時台の時間帯で

                        1をカウントしたいのですが、添付の方法だとそうはならず、

                        上記例の場合でいうと稼働開始の時間帯7時だけで1がカウントされるように

                        なってしまいます。

                         

                        Start・Endの時間だけでなく、間の稼働時間も稼働数にカウントするには

                        どのようにしたら良いのでしょうか。 

                         

                        お忙しい中度々となり大変恐れ入りますが、ご存知でしたらご教示いただけますと

                        幸いです。

                         

                        どうぞ宜しくお願い致します。

                        • 9. Re: 稼働時間の計算について
                          Shinichiro Murakami

                          twbx ファイルを添付いただけるでしょうか。

                           

                          村上

                          • 10. Re: 稼働時間の計算について
                            MAKI TOMITA

                            Shinichiro Murakami 様

                             

                            申し訳ありません。

                            添付致します。

                            • 11. Re: 稼働時間の計算について
                              Shinichiro Murakami

                              データの構造と最終ゴールが理解できていませんが、それらしきものを作ってみました。

                               

                              ちょっと長いですが、もともと簡単な話ではないので、しょうがないと思います。

                              先にお願いですが、答えに「正解」か、「参考になった」か何かをマークするところがあると思うので、それをチェック頂けると励みになります。

                               

                              ファイルではデータの数が少なすぎたので、別のデータを使用しました。

                              Start の日付と Endの日付をパラメータで指定すれば、その日付間の1時間ごと(切り上げ)の稼働状況が表示されます。

                              Start が6/20 8:10 AM、 ENDが6/21 10:20 AM 、日付選択が 6/21~6/22 の場合、

                              表のStartは、6/21 12:00 AM  表のEnd は 6/23 12:00 AM

                              グラフの開始は、6/21 12:00 AM グラフの終点は 6/21 11:00 AM となります。

                               

                              出来上がりビュー

                              計算式

                               

                              「Start Time(Hr)」  // 1時間単位に切り上げ

                              datetrunc('hour',[Start Time])

                               

                              [Start Time(Hr) Adjusted]  // 開始時刻を 開始パラメータ日付の午前0時に合わせる

                              if{fixed[Product ID],[Event ID]: MIN([Start Time(Hr)])}<[Start Date]+0.00

                              and

                              {fixed[Product ID],[Event ID]: MIN([End Time(Hr)])}>[Start Date]+0.00

                              then [Start Date]+0.00

                              elseif {fixed[Product ID],[Event ID]: MIN([Start Time(Hr)])}>=[Start Date]+0.00

                              and

                              {fixed[Product ID],[Event ID]: MIN([End Time(Hr)])}>[Start Date]+0.00

                              then [Start Time(Hr)]

                              END

                               

                              End Time(Hr)  // 1時間単位に切り上げ

                              dateadd('hour',1,(datetrunc('hour',[End Time])))

                               

                              [End Time(Hr) Adjusted]  // 終了時刻を 終了パラメータ日付翌日の午前0時に合わせる

                              if{fixed[Product ID],[Event ID]: MIN([End Time(Hr)])}>[End Date]+1.00

                              and

                              {fixed[Product ID],[Event ID]: MIN([Start Time(Hr)])}<[End Date]+1.00

                              then [End Date]+1.00

                              elseif {fixed[Product ID],[Event ID]: MIN([End Time(Hr)])}<=[End Date]+1.00

                              and

                              {fixed[Product ID],[Event ID]: MIN([Start Time(Hr)])}<[End Date]+1.00

                              then [End Time(Hr)]

                              END

                               

                              [End(Hr) - Start (Hr)]  // グラフの長さを決定

                              [End Time(Hr) Adjusted]-[Start Time(Hr) Adjusted]

                               

                              [Duration Hours]  // 終了時刻 - 開始時刻 を「時間」単位で表示

                              [End(Hr) - Start (Hr)]*24

                               

                              [Start Time(Hr) Filtered]  //  表の表示範囲をフィルタで決定。  フィルタエリアで[null] を除外

                              if ([End Time(Hr) Adjusted]>[Start Date] +0.00 or [Start Time(Hr) Adjusted]<[End Date]+1.00 )

                              then [Start Time(Hr) Adjusted] END

                               

                              [Ref Line End Date]  //  終了パラメータ日付翌日の午前0時を指定 (終了ラインを表示させるため)

                              [End Date]+1.00

                               

                              フィールド配置

                               

                               

                              リファレンスライン

                               

                               

                               

                               

                               

                               

                               

                               

                               

                               

                              表示を整える

                               

                               

                               

                               

                               

                               

                               

                               

                               

                               

                               

                              村上

                               

                              9.0 添付

                              1 of 1 people found this helpful
                              • 12. Re: 稼働時間の計算について
                                Shinichiro Murakami

                                ちなみに、こっちの方のビューは

                                別途、日付時間マスターを持つ必要があります。でないと、13~15 時が表示されない などの問題があります。

                                質問の内容詳細が分からないので、今回は何もしてません。

                                 

                                村上

                                • 13. Re: 稼働時間の計算について
                                  MAKI TOMITA

                                  村上様

                                   

                                  富田です。ご返信遅れ大変申し訳ありません。

                                  ご丁寧にご教示いただき有難うございます。

                                  難しかったので理解するまで時間がかかってしまいましたが、

                                  これまで教えていただいた内容を組み合わせ、

                                  やりたいことが出来るようになりました。

                                  (最終形をお伝えせず、五月雨にお話する形となり
                                  申し訳ありませんでした)

                                   

                                  また何かありましたら、是非ご教示いただけますと助かります。

                                  有難うございました。

                                   

                                   

                                  ※正解をつけさせていただきました。

                                  このサイトの仕組みをきちんと理解できておらず、失礼致しました。

                                  ※過去の分については、後日確認のうえご返信させていただきます。

                                  時間がかかり申し訳ありません。

                                  • 14. Re: 稼働時間の計算について
                                    Shinichiro Murakami

                                    富田さん

                                     

                                    返事が遅くなりました。

                                    お気になさらず。なんか全部お詫びになってて、こっちが申し訳ありません。。。。

                                     

                                    何かありましたら、ご遠慮なくどうぞ。

                                     

                                    村上