توابع و تعریف فرمول در MSP [همراه با مثال عملی]
تعریف جدول مقادیر در MSP
آموزش تعریف فرمول و توابع در نرم افزار ام اس پی یکی دیگر از قسمت های آموزش ام اس پی. یکی از گزینه های قسمت Custom Attributes، این است که مقدارها از جدول خوانده شوند. برای این کار باید روی دکمه Lookup کلیک کنید تا کادر محاوره شکل زیر باز شود.
توجه داشته باشید که این کادر محاوره در مورد کدهای ساختاری( Outline Codeها) تنظیم های بیشتری دارد.
این مسئله در قسمت های قبلی توضیح داده شده و در این قسمت کادر محاوره مربوط به سایر فیلدها توضیح داده می شود. تفاوت کدهای ساختاری با سایر فیلدها در این است که کدهای ساختاری می توانند چندین سطح داشته باشند، در حالی که سایر فیلدها تک سطحی هستند.
در بالای جدول لیستی از مقادیر وجود دارد. مقدارهای مورد نظر خود را در آن وارد کنید.
مقادیر با همان ترتیبی که در جدول وارد شده باشند در کادرهای بازشو نمایش داده می شوند. به همین خاطر بهتر است که ترتیب مناسبی برای آن ها در نظر بگیرید. اگر بعد از وارد کردن مقادیر مایل به تغییر دادن ترتیب آن ها باشید، باید گزینه مورد نظر خود را انتخاب کرده، روی فلش های بالا و پایینی که در سمت راست قرار دارند کلیک کنید.
معمولا برای مشخص کردن مقادیر از عبارت های کوتاه استفاده می کنند. اگر عبارت ها نیاز به شرح داشته باشند ،می توانید شرح مورد نظر خود را در ستون Description وارد کنید. در نسخه های قبل از ۲۰۰۷ در زمان گروه بندی برای سرفصل ها به جای نام (ستون Value) از شرحی که در ستون Description وارد شده بود استفاده می شد، مگر این که شرحی وارد نشده باشد. با این حال نسخه ۲۰۰۷ و ۲۰۱۰ در این شرایط از شرح استفاده نمی کند.
گزینه Display indenting in lookup table تنها در مورد Outline Code ها فعال می شود.
اگر مایل باشید می توانید یکی از مقدارهای وارد شده در جدول را به عنوان پیش فرض انتخاب کنید. در این حالت تمام آیتم ها به طور پیش فرض همان مقدار را خواهند داشت، مگر این که آن را تغییر دهید. برای فعال کردن این سیستم، گزینه Use a value from the table as the default entry for the field را فعال کنید. بعد از آن مقداری که قرار است پیش فرض باشد را انتخاب کرده، روی Set Default کلیک کنید.
همانطور که گفته شد، مقدارهای جدول به طور پیش فرض بر اساس ترتیبی که در لیست دارند در کادرهای بازشو نمایش داده می شوند. می توانید مقدارها را به طور دستی جابجا کنید تا ترتیب مناسبی داشته باشند.
علاوه بر آن، اگر لازم باشد که آیتم ها را بر اساس حروف الفبا مرتب کنید، می توانید از قسمت Display order کادر محاوره استفاده کنید. برای این کار روی علامت + کنار این قسمت کلیک کنید تا باز شود.
یکی از گزینه های Sort ascending یا Sort descending را انتخاب کرده، روی دکمه Sort کلیک کنید تا ترتیب آیتم ها بر حسب حروف الفبا به طور صعودی یا نزولی، مرتب شود. این کار به طور خودکار انجام نمی شود و هرگاه که لازم باشد باید گزینه را انتخاب کرده، روی Sort کلیک کنید.
در پایین کادر محاوره قسمت دیگری به نام Data entry options وجود دارد. وقتی آن را باز کنید، دو گزینه دیگر در اختیارتان قرار خواهد گرفت.
اگر گزینه اول غیر فعال باشد، کاربر قادر به وارد کردن مقداری جز آنچه در جدول وجود دارد، نخواهد بود. اگر آن را فعال کنید، چنین مقدارهایی نیز پذیرفته می شوند و بعد از آن در جدول نیز اضافه خواهند شد.
گزینه دوم فقط برای کدهای ساختاری فعال می شود.
پس از خارج شدن از کادر محاوره می توانید به فیلد مقدار دهید. می توانید مقدارهای مورد نظر خود را در فیلد تایپ کنید، که در این صورت اگر مقدار در جدول وجود داشته باشد، پذیرفته می شود. اگر مقدار در جدول نباشد و گزینه مربوط به دریافت مقدارهای جدید فعال شده باشد، مقدار پذیرفته شده، در جدول نیز قرار می گیرد. اگر گزینه گفته شده فعال نباشد، پیغام خطا داده می شود و مقدار پذیرفته نخواهد شد.
به جای تایپ کردن مقدار، می توانید روی فلش کوچکی که سمت راست فیلد قرار دارد کلیک کنید تا لیست مقادیر مجاز نمایش داده شود.
مطلب مرتبط : آموزش تسطیح منابع در ام اس پی(MSP)
تعریف فرمول در نرم افزار ام اس پی(MSP)
در ادامه آموزش تعریف فرمول و توابع در نرم افزار ام اس پی اگر در طراحی فرمول مهارت داشته باشید، قابلیت های فراوانی در اختیارتان قرار خواهد گرفت. برای تعریف فرمول کادر محاوره اختصاصی سازی فیلد را باز کرده، روی دکمه Formula کلیک کنید. با این کار کادر محاوره شکل زیر باز خواهد شد.
فراموش نکنید که فرمولی که به این ترتیب وارد می شود فقط به منابع یا فعالیت ها اعمال می شود؛ اگر مایل هستید که خلاصه فعالیت ها و سرفصل های گروه بندی نیز از همان فرمول استفاده کنند، باید گزینه Use Formula را هم انتخاب کنید.
هر فرمول دو نوع داده اصلی دارد:
- مقادیر: مقادیر می توانند به طور دستی وارد شوند (اعداد، متن ها و مقدارهای بولی) یا از مقدارهای فیلدها استخراج شوند. محدودیتی که در این کار وجود دارد این است که فرمول تعریف شده در هر آیتم فقط می تواند به سایر فیلدهای همان آیتم ارجاع دهد. تنها استثنایی که وجود دارد، برخی فیلدهای خلاصه فعالیت پروژه هستند که در دسترس تمام رکوردها هستند.
- عملگرها و توابع: عملگرها و توابع چگونگی ترکیب مقادیر را مشخص می کنند.
تمام محتوای گفته شده را می توان تایپ کرد یا به جای تایپ از دکمه هایی که برای درج آن ها وجود دارد استفاده کرد. برای عملگرها دکمه هایی در میانه کادر وجود دارد. توابع در Function قرار دارند و فیلدها نیز از طریق Field قابل دسترسی هستند.
تعریف شیوه نمایش گرافیکی در نرم افزار MSP
برای تعریف شیوه نمایش گرافیکی، گزینه Graphical Indicators را انتخاب کنید تا کادر محاوره شکل زیر باز شود.
شیوه نمایش سه عنصرِ زیر جداگانه تعریف می شود:
- فعالیت ها و منابع (nonsummary rows)
- خلاصه فعالیت ها و سرفصل های گروه بندی (summary rows)
- خلاصه فعالیت پروژه (project summary)
برای مشخص کردن هریک از آن ها، گزینه مربوطه را در بالای کادر انتخاب کرده، تنظیم ها را انجام دهید. اگر قصد ندارید سه شیوه نمایش مختلف تعریف کنید، گزینه های Summary Rows inherit criteria from
nonsummary rowsو Project summary inherits criteria from summary rows را فعال کنید.
اگر گزینه Show data value in tooltip فعال باشد، وقتی کاربر اشاره گر ماوس را روی فیلد نگه دارد، مقدار در کادر کوچکی نمایش داده خواهد شد.
شیوه نمایش در لیست مشخص می شود. برای این کار باید شرایط مختلف و آیکون هایی که در هرکدام از حالت ها نمایش داده می شوند را مشخص کنید. اولین ستون برای مشخص کردن عملگرِ شرط است. شکل زیر عملگرهای موجود را نشان می دهد.
برای مشخص کردن مقدار می توانید آن را تایپ کنید. در صورت لزوم می توانید به جای تایپِ مقدارِ ثابت ، فیلدی را معرفی کنید تا مقدارِ آن برای سنجش به کار رود. برای این کار روی فلش کوچک سمت راست فیلد کلیک کنید.
توجه داشته باشید که این حالت مقدار فیلد اختصاصی هر آیتم با فیلدهای همان آیتم سنجیده می شود. به عنوان مثال، اگر قصد داشته باشید فیلدی تعریف کنید که تاثیر گرفتنِ آیتم ها را از تسطیح نشان دهد، به ترتیب زیر عمل کنید:
چون نتیجه از نوع درست/نادرست (بولی) است، می توانیم از فیلدهای Flag استفاده کنیم. به عنوان مثال فیلد Flag1 را برای این کار در نظر خواهیم گرفت. فیلد را به جدول اضافه کرده، کادر محاوره تنظیم فیلدهای اختصاصی را باز کنید. به آن نام مناسبی مانند Leveled بدهید.
روی Formula کلیک کرده، فرمول شکل زیر را وارد کنید.
در ادامه آموزش تعریف فرمول و توابع در نرم افزار ام اس پی در این فرمول تاریخ های شروع و پایان با تاریخ های شروع و پایان پیش از تسطیح مقایسه می شوند؛ اگر حداقل یکی از دو تاریخ تغییر کرده باشد، نتیجه Yes و در غیر این صورت No خواهد بود.
گزینه Use Formula را فعال کنید تا از همین فرمول برای خلاصه فعالیت ها و سرفصل های گروه بندی نیز استفاده شود. نتیجه فرمول را کنترل کنید.
اکنون به کادر محاوره تنظیم فیلد اختصاصی بازگردید تا شیوه نمایش گرافیکی آن را تنظیم کنیم. برای این کار روی Graphical Indicators کلیک کنید. دو گزینه بالای کادر را فعال کنید تا برای خلاصه فعالیت ها و خلاصه فعالیت پروژه نیز از تنظیم هایی مشابه فعالیت ها استفاده شود. شکل زیر تنظیم ها را نشان می دهد.
اکنون تمام آیتم هایی که زمان بندی آن ها بر اثر تسطیح منابع به طور مستقیم یا غیر مستقیم تغییر کرده باشد ،با علامتی مشخص خواهند شد.
مطلب مرتبط : آموزش تعریف هزینه ها در نرم افزار MSP
توابع در نرم افزار مدیریت پروژه ام اس پی (MSP)
در ادامه آموزش تعریف فرمول و توابع در نرم افزار ام اس پی توابع فراوانی در Project تعریف شده است؛ برخی از این توابع، عمومی هستند و در سایر برنامه ها، مانند Excel نیز کمابیش وجود دارند. برخی دیگر از توابع، خاص Project هستند و نتایج مفیدی را در اختیار کاربر قرار می دهند. اگر مایل باشید که فرمول های پیچیده ای بنویسید، حتما باید به این توابع مسلط باشید.
توابع از این قرارند:
- تابع Abs: قدر مطلق مقدار ورودی را نتیجه می دهد.
- تابع Asc: مقداری متنی دریافت می کند و کد اسکیِ اولین حرف آن را بازمی گرداند.
- تابع Atn: آرک تانژانت ورودی را بر حسب رادیان نتیجه می دهد.
- تابع CBool: مقدار عددی یا متنی ورودی را به مقدار بولی تبدیل می کند.
- تابع CByte: مقدار عددی ورودی را به نوع byte (اعداد صحیح بین ۰ و ۲۵۵) تبدیل می کند.
- تابع CCur: مقدار ورودی را به مقداری از نوع مالی تبدیل می کند.
- تابع CDate: مقدار ورودی را به مقداری از نوع تاریخ تبدیل می کند.
- تابع CDbl: مقدار ورودی را به مقداری از نوع Double تبدیل می کند.
- تابع CDec: مقدار ورودی را به مقداری از نوع Decimal تبدیل می کند.
- تابع Choose: ورودی اول شماره ردیف و ورودی های بعدی مقادیر هستند. مقدارِ متناظر با شماره خروجی تابع خواهد بود.
- تابع Chr: کد اسکی را دریافت می کند و حرف متناظر با آن را برمی گرداند.
- تابع CInt: مقدار ورودی را به مقداری از نوع Integer (صحیح) تبدیل می کند.
- تابع CLng: مقدار ورودی را به مقداری از نوع Long تبدیل می کند.
- تابع Cos: کسینوس ورودی را نتیجه می دهد. ورودی بر حسب رادیان فرض میشود.
- تابع CSng: مقدار ورودی را به مقداری از نوع Single تبدیل می کند.
- تابع CStr: مقدار ورودی را به مقداری از نوع String (متن) تبدیل می کند.
- تابع CVar: مقدار ورودی را به مقداری از نوع Variant (آزاد) تبدیل می کند.
- تابع Date: تاریخ جاری را نتیجه می دهد.
- تابع DateAdd: این تابع سه ورودی دارد. ورودی اول واحد زمان (مانند روز) ،ورودی دوم تعداد مدت زمان (مانند ۵) و ورودی سوم تاریخ مبدا را دریافت می کند. خروجی تاریخی است که به اندازه زمان مشخص شده بعد از تاریخ مبدا باشد. می توانید برای مقدار از اعداد منفی استفاده کنید تا تاریخ های قبل از مبدا به دست آیند.
- تابع DateDiff: ورودی اول واحد زمان و ورودی های دوم و سوم تاریخ هستند. نتیجه اختلاف بین دو تاریخ است که بر اساس واحدِ مشخص شده تعیین می شود. می توانید در ورودی های اختیاریِ چهارم و پنجم به ترتیب اولین روز هفته و اولین هفته سال را مشخص کنید. انواع واحدهای زمانی که در این تابع و توابع مشابه به کار می رود از این قرارند:
- yyyy: سال
- q: فصل
- m: ماه
- d: روز
- ww: هفته
- h: ساعت
- n: دقیقه
- s: ثانیه
- تابع DateSerial: سال، ماه و روز را دریافت کرده، شماره سریال متناظر با آن تاریخ را نتیجه می دهد.
- تابع DateValue: مقدار ورودی که شامل تاریخ یا ترکیب تاریخ و زمان می شود را دریافت کرده ،تاریخ متناظر با آن را نتیجه می دهد.
- تابع Day: تاریخی را دریافت کرده، روز آن (یعنی روز چندم از ماه) را نتیجه می دهد.
- تابع Exp: عدد نپر را به توان ورودی رسانده، نتیجه می دهد.
- تابع Fix: اعشار ورودی را قطع می کند.
- تابع Hex: عددی را در مبنای ده دریافت کرده، معادل آن را در مبنای شانزده نتیجه می دهد.
- تابع Hour: مقداری از نوع زمان را دریافت کرده، ساعت متناظر با آن را نتیجه می دهد.
- تابع IIF: ورودی اول مقداری بولی است که اگر درست باشد، ورودی دوم و در غیر این صورت ورودی سوم نتیجه خواهد شد.
- تابع InStr: متن ورودی سوم را در متن ورودی دوم و از حرفی که شماره آن در ورودی اختیاری اول مشخص شده است به بعد جستجو می کند. خروجی، شماره محل نتیجه است.
- تابع Int: بزرگترین عددی صحیح که اعشار نداشته باشد و از ورودی کوچکتر باشد را نتیجه می دهد.در مورد اعداد مثبت مانند Fix عمل می کند، ولی برای اعداد منفی، نتیجه آن یک واحد کوچکتر از نتیجه Fix است .
- تابع IsNumeric: عددی بودن مقدار ورودی را نتیجه می دهد.
- تابع IsNull: تهی بودن مقدار ورودی را نتیجه می دهد.
- تابع IsDate: تاریخ یا زمان بودن مقدار ورودی را نتیجه می دهد. خروجی از نوع بولی است.
- تابع LCase: تمام حروف متن را به حروف کوچک تبدیل می کند.
- تابع Left: تعداد حروفی از سمت چپ متن ورودی اول که در ورودی دوم مشخص شده است را نتیجه می دهد.
- تابع Len: طول متن ورودی را نتیجه می دهد.
- تابع Log: لگاریتم مبنای ده ورودی را نتیجه می دهد.
- تابع LTrim: فاصله های ابتدای متن ورودی را حذف می کند.
- تابع Mid: تعداد حروفی از متن ورودی اول را نتیجه می دهد که از شماره ورودی دوم آغاز شده و تعداد آن ها به اندازه ورودی سوم باشد.
- تابع Minute: مقداری از نوع زمان دریافت کرده، دقیقه متناظر با آن (یعنی دقیقه چندم از ساعت) را نتیجه می دهد.
- تابع Month: تاریخی را دریافت کرده، ماه متناظر با آن (ماه چندم سال) را نتیجه می دهد.
- تابع Now: تاریخ و زمان جاری را نتیجه می دهد.
- تابع Oct: عددی را در مبنای ده دریافت کرده، معادل آن را در مبنای هشت نتیجه می دهد.
- تابع ProjDateAdd: ورودی اول، تاریخ مورد نظر، ورودی دوم مدت زمانی که باید به آن اضافه شود و ورودی اختیاری سوم تقویم مبنای محاسبه را مشخص می کند. تابع تاریخی را نتیجه می دهد که اختلاف آن با تاریخ وارد شده، به اندازه مدت زمان مشخص شده باشد. کاری یا روزشمار بودن مدت زمان در آن لحاظ شده است.
- تابع ProjDateConv: ورودی اول مقداری مشخص کننده تاریخ و ورودی اختیاری دوم، قالب بندی آن است. اگر مقدار دوم را وارد نکنید، به طور پیش فرض از مقدار PjDateDefault استفاده خواهد شد ،و تاریخ با قالب بندی مشخص شده در تنظیم های برنامه که در نماها نیز به کار می رود نتیجه خواهد شد. در صورت تمایل می توانید از قالب بندی های زیر نیز استفاده کنید:
- pjDate_mm_dd_yy_hh_mmAM :مانند ۹/۳۰/۰۳.۱۲:۳۳PM
- pjDate_mm_dd_yy : مانند ۹/۳۰/۰۳
- pjDate_mm_dd_yyy :مانند ۹/۳۰/۲۰۰۳
- pjDate_mmmm_dd_yyyy_hh_mmAM :مانند September 30, 2003 12:33PM
- pjDate_mmmm_dd_yyyy:مانند September 30, 2003
- pjDate_mmm_dd_hh_mmAM:مانند Sep 30, 2003 12:33PM
- pjDate_mmm_dd_yyy : مانند Sep 30, ‘۰۳
- pjDate_mmmm_dd :مانند September 30
- pjDate_mmm_dd :مانند Sep 30
- pjDate_ddd_mm_dd_yy_hh_mmAM :مانند Tue 9/30/03 12:33PM
- pjDate_ddd_mm_dd_yy:مانند Tue 9/30/03
- pjDate_ddd_mmm_dd_yyy :مانند Tue Sep 30, ‘۰۳
- pjDate_ddd_hh_mmAM :مانند Tue 12:33PM
- pjDate_mm_dd :مانند ۹/۳۰
- pjDate_dd :مانند۳۰
- pjDate_hh_mmAM :مانند ۱۲:۳۳PM
- pjDate_ddd_mmm_dd :مانند Tue Sep 30
- pjDate_ddd_mm_dd :مانند Tue 9/30
- pjDate_ddd_dd :مانند Tue 30
- pjDate_Www_dd:مانند W41/2
- pjDate_Www_dd_yy_hh_mmAM :مانند W41/2/03 12:33PM
- تابع ProjDateDiff: اختلاف دو تاریخ که در ورودی های اول و دوم مشخص شده است را بر حسب تقویمی که در ورودی اختیاری سوم تعیین می شود نتیجه می دهد. نتیجه مدت زمان کاری است.
- تابع ProjDateSub: مدت زمانی که در ورودی دوم مشخص شده است را به تاریخ ورودی اول اضافه کرده، تاریخ جدید را نتیجه می دهد. برای محاسبه از تقویم مشخص شده در ورودی اختیاری سوم استفاده خواهد شد. کاری یا روزشمار بودن مدت زمان در آن لحاظ می شود.
- تابع ProjDateValue: مقدار ورودی را به تاریخ تبدیل می کند.
- تابع ProjDurConv: ورودی اول مقدار متناظر با مدت زمان و ورودی دوم قالب بندی مدت زمان است. ورودی دوم اختیاری است و اگر آن را وارد نکنید، از قالب بندی پیش فرض که در تنظیم ها مشخص شده است استفاده می شود. سایر گزینه ها از این قرارند:
- pjMinutes: مدت زمان کاری بر حسب دقیقه
- pjElapsedMinutes: مدت زمان تقویمی بر حسب دقیقه
- pjMinutesEstimated: مدت زمان کاری غیر قطعی بر حسب دقیقه
- pjElapsedMinutesEstimated: مدت زمان تقویمی غیر قطعی بر حسب دقیقه o pjHours: مدت زمان کاری بر حسب ساعت
- pjElapsedHours: مدت زمان تقویمی بر حسب ساعت
- pjHoursEstimated: مدت زمان کاری غیر قطعی بر حسب ساعت
- pjElapsedHoursEstimated: مدت زمان تقویمی غیر قطعی بر حسب ساعت
- pjDays: مدت زمان کاری بر حسب روز
- pjElapsedDays: مدت زمان تقویمی بر حسب روز
- pjDaysEstimated: مدت زمان کاری غیر قطعی بر حسب روز
- pjElapsedDaysEstimated: مدت زمان تقویمی غیر قطعی بر حسب روز
- pjWeeks: مدت زمان کاری بر حسب هفته
- pjElapsedWeeks: مدت زمان تقویمی بر حسب هفته
- pjWeeksEstimated: مدت زمان کاری غیر قطعی بر حسب هفته
- pjElapsedWeeksEstimated: مدت زمان تقویمی غیر قطعی بر حسب هفته
- pjMonths: مدت زمان کاری بر حسب ماه
- pjElapsedMonths: مدت زمان تقویمی بر حسب ماه
- pjMonthsEstimates: مدت زمان کاری غیر قطعی بر حسب ماه
- pjElapsedMonthEstimated: مدت زمان تقویمی غیر قطعی بر حسب ماه
- تابع Right: تعداد حروفی از سمت راست متن ورودی اول که در ورودی دوم مشخص شده است را نتیجه می دهد.
- تابع Rnd: عدد را گرد می کند.
- تابع RTrim: فاصله های انتهای سمت راست متن را حذف می کند.
- تابع Second: ثانیه متناظر با زمان وارد شده )ثانیه از دقیقه( را نتیجه می دهد.
- تابع Sgn: برای اعداد بزرگتر از صفر، مقدار یک، برای صفر مقدار صفر و برای اعداد کوچکتر از صفر مقدار منفی یک را نتیجه می دهد.
- تابع Sin: سینوس ورودی را نتیجه می دهد. ورودی بر حسب رادیان فرض می شود.
- تابع Space: متنی می سازد که دارای تعداد فاصله (space) مشخص شده در ورودی باشد.
- تابع Sqr: جذر ورودی را نتیجه می دهد.
- تابع Str: عدد وارد شده را به متن تبدیل می کند.
- تابع StrComp: متن ورودی اول و دوم را با تنظیمی که در ورودی سوم مشخص شده است با هم مقایسه می کند.
- تابع StrConv: عدد را با قالب بندی مشخص شده در ورودی دوم به متن تبدیل می کند.
- تابع String: حرف مشخص شده در ورودی دوم را به تعدادی که در ورودی اول مشخص شده است تکرار می کند.
- تابع Switch: تعداد دلخواهی ورودی های دوتایی دریافت می کند. جز اول ورودی های دوتایی، شرط و جز دوم مقدار متناظر با آن است. اولین شرطی که برقرار باشد، مقدار متناظرش نتیجه خواهد شد.
- تابع Tan: تانژانت ورودی را نتیجه می دهد. ورودی بر حسب رادیان فرض می شود.
- تابع Time: زمان جاری را نتیجه می دهد.
- تابع Timer: تعداد ثانیه ای که از بامداد روز جاری گذشته است را نتیجه می دهد.
- تابع TimeSerial: ساعت، دقیق و ثانیه را دریافت کرده، شماره سریال متناظر با آن زمان را نتیجه می دهد.
- تابع TimeValue: زمان دریافت شده را با قالب زمان نتیجه می دهد.
- تابع Trim: فاصله های ابتدا و انتهای متن را حذف می کند.
- تابع UCase: تمام حروف متن ورودی را به حروف بزرگ تبدیل می کند.
- تابع Val: عددی که در قالب متن هست را دریافت کرده، مقدار عددی متناظر با آن را نتیجه می دهد.
- تابع Weekday: روز هفته متناظر با تاریخ وارد شده را نتیجه می دهد. می توانید روز شروع کننده هفته را به عنوان ورودی اختیاری دوم وارد کنید.
- تابع Year: سال متناظر با تاریخ وارد شده را نتیجه می دهد.
مثال ۱: نامگذاری مختصرِ قیدها
در قسمت های پیش توضیح داده شد که قیدهای معمول در کار برنامه ریزی، معمولا با نام های مخفف خوانده می شوند؛ این در حالی است که Project برای نمایش آن ها از نام های کامل استفاده می کند. اگر قرار باشد قیدها را در جدول نمایش دهید، کامل بودن نام آن ها باعث می شود که جای زیادی نیاز داشته باشند. به این منظور می توانیم فیلدی اختصاصی طراحی کنیم تا نام قیدهای فعالیت ها را مخفف شده نمایش دهد.
نام های مخفف قیدها از این قرارند:
- ASAP :As Soon As Possible
- ALAP :As Late As Possible
- FNET :Finish No Earlier Than
- FNLT :Finish No Later Than
- MFO :Must Finish On
- MSO :Must Start On
- SNET :Start No Earlier Than
- FNET :Finish No Earlier Than
نکته مهمی که وجود دارد این است که فیلد Constraint Type با این که متن قیدها را نمایش می دهد، عملا شماره آن ها را ذخیره می کند و در نتیجه در فیلدهای دیگر نیز شماره های آن نمایش داده می شوند. فرض کنید Text2 را مساوی Constraint Type قرار داده باشیم. در این صورت مقدارها به صورت شکل زیر دیده خواهند شد.
برای تعریف فرمول، بهترین راه استفاده از تابع Switch است، زیرا پیاده سازی شرط های متعدد با کمک آن بسیار راحت تر از IIF است. شکل زیر فرمول تعریف شده را نشان می دهد.
نتیجه در شکل زیر نمایش داده شده است.
مثال ۲: فیلد مدت زمان
اگر برای فعالیت های مختلف از تقویم های گوناگون استفاده کنید فیلد Duration خوانایی خود را از دست داده، مقدارهایی خلاف انتظار نتیجه می دهد. شکل زیر برنامه ای را نشان می دهد که تقویم پروژه آن استاندارد و تقویم یکی از فعالیت های آن ۲۴ Hours است.
در این حالت مدت زمان فعالیت b مقدار ۵ روز است، زیرا تنظیم های Tools| Options| Calendar که مطابق تقویم استاندارد هستند این گونه حکم می کنند. اگر تنظیم های گفته شده را تغییر دهید تا با تقویم ۲۴ Hours مطابق شوند، سایر فعالیت هایی که از تقویم استاندارد استفاده می کنند دچار مشکل خواهند شد.
برای رفع مشکل می توانید از فیلد اختصاصی Duration1 با فرمولی که در شکل زیر دیده می شود استفاده کنید.
نتیجه در شکل زیر نمایش داده شده است
در عین حال باید توجه داشته باشید که این فرمول به اندازه کافی دقیق نیست، زیرا تعطیلی های تقویم استاندارد را از مدت زمان کم می کند. به عنوان مثال، جواب آن در حالت شکل زیر مطابق انتظار نیست.
مشکل ایجاد شده به این خاطر است که تمام مدت زمان فعالیت b که با تقویم ۲۴ Hours تعریف شده است، در روزهای تعطیل قرار دارد و مدت زمان کاری این روزها در تقویم استاندارد، صفر است.
برای رفع مشکل می توانیم فیلد دیگری مانند Number1 را با فرمول شکل زیر تنظیم کنیم.
نتیجه فرمول در شکل زیر نمایش داده شده است.
این فیلد تعداد روزها را مستقل از تقویم محاسبه می کند. نکته منفی این فرمول این است که به خاطر در نظر گرفته نشدن اعشارها، ممکن است مدت زمان آن تا حداکثر یک واحد با آنچه انتظار داریم تفاوت داشته باشد.
مثال ۳: درصد پیشرفت زمانی خط مبنا
در فیلدهای خط مبنا مقداری برای درصد پیشرفت برنامه ریزی شده متناظر با تاریخ روز یا Status Date وجود ندارد. اگر نیاز به چنین مقداری داشته باشید، باید فیلدی اختصاصی برای آن بسازید.
برنامه شکل زیر را در نظر بگیرید.
قصد داریم فیلدی اختصاصی تهیه کنیم که میزان پیشرفت زمانی برنامه ریزی شده برای خط مبنا را تا تاریخ Status Date محاسبه کند.
برای این کار از فیلدی مانند Number1 استفاده خواهیم کرد. شکل زیر فرمول مناسب را نشان می دهد.
مقدار خلاصه فعالیت ها باید بر اساس میانگین گیری وزنی زیرمجموعه ها انجام شود. برای این کار باید از چند فیلد کمکی استفاده کرد و محاسبات پیچیده ای انجام داد. در این مثال مقدار خلاصه فعالیت ها با میانگین گیری غیر وزنی زیرمجموعه ها به دست می آید. این مقدار دقت کامل نخواهد داشت.
شکل زیر نتیجه را نشان می دهد.
توجه داشته باشید که این فرمول زمانی نتیجه مناسب می دهد که تمام فعالیت ها از تقویم پروژه استفاده کنند .
اگر این گونه نباشد، باید فرمول را اصلاح کنید تا به جای [Project Calendar] از [Task Calendar] استفاده کند؛ تنها نکته مهمی که وجود دارد این است که اگر برای فعالیت تقویم خاصی مشخص نشده باشد، به این معنی که قرار است از تقویم پروژه استفاده کند، فیلد [Task Calendar] مقدار None را نتیجه می دهد و فرمول دچار مشکل می شود. برای تکمیل فرمول باید شرط دیگری اضافه کنید تا چنین مواردی به جای [Task
Calendar]از [Project Calendar] استفاده کند.
می توانید فیلد مشابهی برای محاسبه درصد پیشرفت زمانی بر اساس برنامه فعلی نیز تهیه کنید.
بهتر است به فیلدهای نام های مناسبی دهید تا قابل تشخیص باشند. علاوه بر آن، می توانیم نمودار را اختصاصی سازی کنیم تا مقدارهای پیشرفت را هم نشان دهد. متاسفانه امکان نمایش همزمان چند فیلد در یکی از قسمت ها وجود ندارد؛ در نتیجه باید برای این کار نیز فیلد اختصاصی دیگری بسازیم. شکل ۲۹-۱۸ فیلد اختصاصی گفته شده را نمایش می دهد.
نتیجه در شکل زیر نمایش داده شده است.
اکنون می توانید نمودار گانت را تنظیم کنید تا مقدارهای فیلد اختصاصی جدید را نمایش دهد.
مثال ۴: تکمیل مثال ۳
فرمول های مثال قبل کمبودهایی داشتند که در این مثال برطرف خواهند شد.
یکی از کمبودها این است که مقدارهای درصد پیشرفت در فیلدهای عددی محاسبه شده و در نتیجه در سمت راست آن ها علامت درصد وجود ندارد. برای رفع مشکل می توانیم از یک فیلد اختصاصی متنی جهت تکمیل کار استفاده کنیم. شکل زیر فرمول مناسب را نشان می دهد.
نتیجه در شکل زیر نمایش داده شده است.
اکنون می توانید فیلدهای اضافه را از نما حذف کرده و به فیلدهای جدید نیز نام های مناسبی اختصاص دهید.
یکی از مشکلات فرمول ها، این بود که برای تمام فعالیت ها از تقویم استاندارد استفاده می کردند. می توان برای رفع این مشکل از چنین فرمولی استفاده کرد:
IIf([Baseline Start]>[Status Date],0,IIf([Baseline Finish]<[Status Date],100,projdatediff([Status
Date],[Baseline Start],IIf([Task Calendar]=”None”,[Project Calendar],[Task
Calendar]))*100/projdatediff([Baseline Finish],[Baseline Start],IIf([Task
((((Calendar]=”None”,[Project Calendar],[Task Calendar]
فرمول قبل با فرمول زیر جایگزین در این فرمول عبارت[Project Calendar] شده است:
IIf([Task Calendar]=”None”,[Project Calendar],[Task Calendar])
مشکل دیگر فرمول ها، این بود که برای محاسبه مقدار خلاصه فعالیت ها، زیرمجموعه ها را میانگین گیری می کردند. این در حالی است که باید برای این کار از میانگین وزنی زیرمجموعه ها استفاده کرد. وزن هر فعالیت ،برابر است با مدت زمان آن. فیلد % Complete نیز از منطق مشابهی استفاده می کند.
برای این محاسبه به سه فیلد دیگر نیاز خواهیم داشت.
تمام این فیلدها برای اصلاح مقادیر خلاصه فعالیت های Number2، که مقدار پیشرفت برنامه ریزی فعلی را نشان می دهد در نظر گرفته شده اند.
فیلد Number3، مقدار وزنی درصد پیشرفت Number2 را محاسبه می کند.
مقدار خلاصه فعالیت های آن هم برابر است با مجموع زیرمجموعه ها.
مقدار فیلد Number4 در مورد فعالیت ها، با Duration برابر است. مقدار آن در خلاصه فعالیت ها، برابر با مجموع زیرمجموعه ها است.
فیلد Number5 در مورد فعالیت ها، حاصل تقسیم Number3 بر Number4 را نشان می دهد (شکل ۳۸-۱۸) که در این مورد برابر با Number2 خواهد بود.
مقدار خلاصه فعالیت های آن هم بر اساس همین فرمول محاسبه می شود.
به این ترتیب درصد پیشرفت مورد نظر در فیلد Number5 دیده خواهد شد. می توانید در شکل ها تفاوت مقدار صحیح که در Number5 قرار دارد را با Number2 ببینید. برای Number1 نیز روند به همین ترتیب است.
امیدواریم از این مطلب در سایت صنایع سافت که درباره آموزش توابع و فرمول نویسی در ام اس پی بود، لذت برده باشید. هر سوال و نظری دارید برای ما کامنت بذارید، کمتر از یک روز پاسخ داده میشه 😉