前回の続きで、タスク割当問題についてもう少し深堀りしたいと思います。
今回の課題
前回は、タスクは日ごとに指定がないようなデータになっていましたが、今回はタスクに実行日が決まっているパターンを考えてみます。
前回のタスクリスト。
今回のタスクリスト。
このような場合は頭から追加するとなると、マクロが必要になってきます(とはいっても非常に単純なマクロです)。例えば、マクロ化する前に4/1分を処理することを考えてみましょう(マクロを作る際は、まず1回の処理分を作ってからマクロ化する、という手順になります)。
この場合は、タスクリストのところに4/1でフィルタをかけるようにすればまず最初に日の処理ができます。
次の日以降もその日付でフィルタがかけられれば処理ができます。ということは、日付をどんどん変えながらフィルタし、行位置で結合していけば良い、ということになります。これをマクロで表現するには以下のようにバッチマクロにします。
ほぼ元のワークフローと同じ感じですが、フィルタの部分にコントロールパラメータ入力を配置し、アクションツール経由でフィルタを行う値を書き換えています。なお、フィルターツールは基本フィルターを使っています(カスタムフィルターを使う場合は、以下のアクションツールの設定を変える必要があります)。
コントロールパラメーター入力には日付が入ってきます。この場合のアクションツールの設定は以下のとおりです。
ただ、この場合余ったリソースがいつのものかわからないので、少し改良してみましょう。コントロールパラメーター入力の値をそのまま結合ツールのR出力側に差し込みます(方法としてはいくつかあります)。
ここではフォーミュラツールを使い、新しい項目を作成しています。来た値をそのまま入れれば良いので、フォーミュラツールのQ入力側に直接接続しています。この場合のフォーミュラツールの設定は以下のとおりです。
ここではコントロールパラメータの値をそのまま使いたいので[#1]と記載しています。これは複数のコントロールパラメータ入力を接続すると[#2][#3]といった形になりますが、それぞれの接続名でその値にアクセスできます。このコントロールパラメータの使い方は、デバッグ時には値が入ってこないので、この値を使って計算などをするような場合はデバッグがしにくいためあまりおすすめできません([#1]にはマクロとして動かして初めて値が入ってきます)。使い方としてはすっきりするので使い所をよく考えて利用することをおすすめします。
このマクロを使うためには以下のようなワークフローにする必要があります。
ポイントは、コントロールパラメータ入力にはユニークな日付をインプットすることです。そのために、集計ツールを使ってグループ化しています。
おまけ
ところで、今回のようなケースでは、マクロを使わずともできます。ただし、少しワークフローが煩雑になるためその分慣れが必要です。サンプルワークフローに方にはいくつかサンプルを掲載しておきますが、ワークフローの全体像だけここにも掲載したいと思います。
以下はタスクにもIDを振っておき、かつリソース側は各対象日のレコードを増やしておき、IDと日付で結合することで割当可能なタスクにリソースを割り振り、未割り当てになるタスクの明確化、残リソースの明確化をするワークフローです。
まとめ
前回に続いて、リソース割り当て問題となりました。少し前回より複雑なパターンの場合は、マクロを使いつつ頭から結合することでも解決できますが、問題が複雑になってくるとキー列に基づいての結合で解決する方法になっていきます。
このパターン以外にも、リソース側が各日ごとに人数が異なるようなケースやもっと複雑なケースが考えられますが、複雑な問題は要素要素に分解していけば解決が可能です。
サンプルワークフローダウンロード
次回
Alteryxにおける「ランダム」を扱ってみましょう。
コメント