5

「締め切り」までの日数と、すでに完了したタスクの完了率に基づいて、一連の任意のタスクの緊急度を計算する式を見つけようとしています。

これまでのところ、次を表す「関数」があります。

U = ((dd * 25) - (100 - cp))

Where: 
dd = Day difference from deadline to current date (in an integer value)
cp = current completion % (in an integer value - in increments of 5 currently)

これにより、線形関数が得られます。この関数の 25 は、タスクが 1 日あたり 25% 進行していることを示しています。

そのため、任意の日付で次のようになります。

Where U <0 task is urgent
Where U =0 task is on schedule
Where U >0 task is ahead of schedule
(The actual display on if a task is on schedule (within a range) would be handled separately)

2 つの日付の差と変数による重み付けから、タスクの緊急度を計算する他の方法はありますか? 現在の回答から: start dateend dateおよびcurrent date差異と完了率を使用して緊急度を計算する

おそらく非線形関数を使用して、cp > 75% の場合は U を増やし、cp < 75% の場合は U を減らします。線形関数と非線形関数の利点はありますか?

タスクが U 値をどのように使用しているかを表示する方法が欲しいので、これは MySQL と JavaScript で使用されます。したがって、U の値を正しく計算する方法 (現在の方法よりも多く) を見つけることが、私がやろうとしていることです。

解決

私が行った解決策(マークされた解決策に基づく):

((((((end_date - now) / (end_date - start_date)) * 100) * (100 - cp)) * 10) * -1)

マイナーチェンジ

を最初に使用し、rule of three10 を掛けて値を増やし、float 値をあまり考慮せずに広い範囲を作成します。また、-1 を掛けると、完了したタスクは負の数になり、未完了のタスクはより大きな数を示すようになります (理にかなっています: タスクの緊急性が高いため、より大きな数になります)。提案されたタスクの場合、および特定のタスクに割り当てられた人数も考慮に入れます。この関数は、最初に実行する必要があるタスク (特定のリスト内) を誰かに示すための大まかなガイドとしてのみ使用されます。

また、MySQLでこれを使用したため、関数をIFNULLでラップする必要がありました(私の場合、既存のデータのため)

IFNULL( *function* ,-200)

null 値の場合は任意の初期値 -200 (一部のタスクには開始日/終了日がないため)

支援と提案をありがとう

4

1 に答える 1

2

とすれば:

  • 期日は、期日から現在の日付までの日差です
  • 推定時間はタスクに必要な時間です
  • doneはパーセンテージでの進行状況です

これは、次の 3 つの単純なルールになります。

var rest = estimated / 100 * (100 - done);

if(due < rest) {
    state = 'behind';
}
if(due == rest) {
    state = 'on';
}
if(due > rest) {
    state = 'ahead';
}

正確に一致する必要があるため、「スケジュールどおり」のタスクはほとんどない可能性があることに注意してくださいrest < due + 0.5 && rest > due - 0.5。非線形の優先順位付けを模倣して、範囲などをチェックインすることもできます。

于 2013-03-19T15:09:52.800 に答える