حساب نسبة تقدم النتيجة الرئيسية في OKR
نتيجة رئيسية بدأت عند 20 ووصلت إلى 65 وهدفها 100 تكون قد أنجزت 56.25%، لأن التقدم يُقاس من قيمة البداية. وتُحسب الأهداف التي يجب أن تنخفض، مثل زمن الاستجابة، بالطريقة نفسها. مجاناً في متصفحكم.
- مجاني
- يعمل في متصفحك
- دون تسجيل
- بياناتك لا تغادر جهازك
شغّل الأداة مجانًا
مثال محلول
- القيمة الابتدائية
- 20
- القيمة الحالية
- 65
- القيمة المستهدفة
- 100
- التقدم (%)
- 56.25
تحول هذه الحاسبة قيمة البداية والقياس الحالي والقيمة المستهدفة لنتيجة رئيسية في OKR إلى نسبة مئوية واضحة. وهي تناسب الأهداف التي ينبغي أن ترتفع، مثل الإيرادات، والأهداف التي ينبغي أن تنخفض، مثل زمن الاستجابة أو عدد العيوب. كما تحتفظ بالنتائج الأقل من 0 والأعلى من 100 لإظهار التراجع وتجاوز الهدف من دون حدود مصطنعة. يمكنكم استخدامها في مراجعة واحدة أو ضمن تقارير آلية حتمية.
قيسوا الحركة انطلاقاً من خط الأساس الفعلي
لا تكون نسبة OKR ذات معنى إلا إذا بدأت من القيمة المسجلة في أول الدورة. تقيس الحاسبة الجزء المقطوع من المسافة الكاملة. فالانتقال من 20 إلى 60 عندما يكون الهدف 100 يساوي 50 في المئة، لا 60.
استخدموا الوحدة والفترة والنطاق نفسها للقيم الثلاث، ولا تخلطوا بين بيانات شهرية وسنوية أو إقليمية وعالمية. تُقرب النتيجة إلى ست منازل عشرية لضمان استقرار التقارير مع الاحتفاظ بدقة عملية كافية.
استخدموا الصيغة نفسها للزيادة والخفض
تعالج الصيغة الاتجاهية النوعين من دون وضع منفصل. في هدف الزيادة تعني القيمة الحالية الأعلى عادة تقدماً أكبر، وفي هدف الخفض يحدث العكس. إذا كان المطلوب خفض الزمن من 12 ساعة إلى 4 ساعات ووصل إلى 8 ساعات، فالتقدم 50 في المئة.
تتلاشى الإشارتان السالبتان على نحو صحيح. تصلح الطريقة للتكاليف والتسرب والعيوب والتأخير والانبعاثات. لا يجوز أن يساوي الهدف قيمة البداية، إذ لا تبقى مسافة قابلة للقياس وتحدث قسمة على صفر.
وتظل القيم السالبة مقبولة عندما يسمح بها المؤشر الأساسي، مثل صافي التدفق النقدي.
فسروا التراجع وتجاوز الهدف من دون إخفائهما
لا تُحصر النتيجة بين 0 و100. تدل النسبة السالبة على الابتعاد عن الهدف، وتدل النسبة الأعلى من 100 على تجاوزه في الاتجاه المقصود. إخفاء الحالتين يحجب معلومات إدارية مهمة.
تعاملوا مع الرقم بوصفه قياساً لا حكماً كاملاً على الأداء. إذا احتاجت لوحة المتابعة إلى شريط محدود، فاحتفظوا بالقيمة الخام وحدّوا العرض وحده. في الأتمتة، نفذوا الحساب بعد اعتماد أحدث قياس، واحفظوا قيم المصدر الثلاث بجانب النسبة كي تظل التغييرات اللاحقة قابلة للتفسير والتدقيق.
حالات الاستخدام
تحديث لوحة OKR ربع السنوية
حولوا كل قياس معتمد إلى نسبة تقدم متسقة للدورة الحالية.
متابعة هدف خفض
قيسوا التقدم نحو تقليل التسرب أو العيوب أو زمن الاستجابة.
تدقيق حسابات التقدم
أعيدوا حساب النسبة من خط الأساس والقياس والهدف للتحقق منها.
الأسئلة الشائعة
ما الصيغة التي تستخدمها الحاسبة؟
تقسم (القيمة الحالية ناقص قيمة البداية) على (الهدف ناقص قيمة البداية)، ثم تضرب الناتج في 100.
هل تحسب هدفاً ينبغي أن ينخفض؟
نعم. تعمل الصيغة الاتجاهية عندما يكون الهدف أدنى من قيمة البداية.
لماذا قد تكون النتيجة سالبة أو أعلى من 100؟
تظهر النسبة السالبة الابتعاد عن الهدف، وتظهر الأعلى من 100 تجاوز الهدف.
لماذا تُرفض مساواة البداية والهدف؟
لأن الحركة المطلوبة تصبح صفراً، فتنتج قسمة على صفر بلا نسبة معرفة.
لماذا لا يكفي قسمة القيمة الحالية على الهدف؟
لأن ذلك يتجاهل نقطة البداية. الانتقال من 20 إلى 60 مع هدف 100 يقطع نصف المسافة، أي تقدماً بنسبة 50%، بينما تعطي قسمة 60 على 100 نسبة 60% خطأً.
أدوات ذات صلة
للمطوّرين — الوصول عبر API
كل ما في هذه الصفحة متاح برمجيًا. هذا القسم موجّه للفرق التقنية التي تريد ربط الأداة بأنظمتها الخاصة؛ بقية المستخدمين يمكنهم استخدام الأداة أعلاه مباشرة دون الحاجة لقراءة ما يلي.
الـEndpoint
صادِق على طلبك بترويسة Bearer، وأرسل طلب POST واحدًا لتدخل مهمتك قائمة التنفيذ فورًا؛ ثم تستلم النتيجة عبر webhook أو رابط موقّع.
استدعِ الخدمة من بيئتك
curl -X POST https://api.kit.forhosting.com/biz/okr-progress-percent \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"starting_value":20,"current_value":65,"target_value":100}'const res = await fetch("https://api.kit.forhosting.com/biz/okr-progress-percent", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"starting_value": 20,
"current_value": 65,
"target_value": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/biz/okr-progress-percent",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"starting_value": 20,
"current_value": 65,
"target_value": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/biz/okr-progress-percent", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"starting_value":20,"current_value":65,"target_value":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"starting_value":20,"current_value":65,"target_value":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/biz/okr-progress-percent", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)مثال على الطلب
{
"starting_value": 20,
"current_value": 65,
"target_value": 100
}مثال على الاستجابة
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "biz.okr_progress_percent",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}الواجهة غير متزامنة: تستلم task_id فور الإرسال، ويمكنك الاستعلام عن الحالة بمعدل طلب واحد في الثانية.
الأسعار
السعر معلن كما تراه: لا tokens ولا نظام نقاط؛ وإن فشلت المهمة فلن تُحاسَب عليها.
الأخطاء
| HTTP | الرمز | المعنى |
|---|---|---|
401 | unauthorized | مفتاح الوصول مفقود أو غير صالح؛ تحقق من ترويسة Bearer في طلبك. |
402 | insufficient_balance | رصيدك لا يكفي لتنفيذ هذه المهمة؛ أعد شحن الرصيد ثم أعد المحاولة. |
404 | unknown_type | نوع المهمة المطلوب غير موجود في الكتالوج — راجع الاسم المرسل في الطلب. |
429 | rate_limited | تجاوزت الحد المسموح من الطلبات؛ انتظر قليلًا ثم أعد المحاولة. |
ملاحظات تقنية
قيسوا الحركة انطلاقاً من خط الأساس الفعلي
أدخلوا خط الأساس في starting_value، وأحدث قياس موثوق في current_value، والنهاية المطلوبة في target_value.
أسئلة تقنية
كم تبلغ كلفة الحساب عبر API؟
يكلف كل طلب API مبلغ $0.002. وينفذ إصدار الويب الحساب الحتمي نفسه محلياً.