Alternatif bir SPI analizi

Proje planlaması ile ilgili en sıkıntılı konulardan birisi teorideki performans hesaplama kriterlerinin pratikte çok kullanılamıyor olması, proje kontrolü denince ilk akla gelen yaklaşım kazanılmış değer analizleridir fakat daha önceki deneyimlerimden hem SPI hem de CPI hesaplamalarının gerçek manada bir referans olamayacağını düşünüyorum bu yüzden SPI için alternatif bir çalışma göstermek istiyorum.

Öncelikle SPI ile alakalı en sıkıntılı durum genelde çok kısıtlı zamanda yapıldığı için baseline gerçek uygulamayı değerlendirebileceğimiz bir doküman olamıyor ,FIDIC te detaylı iş programının 28. Günde sunulmalıdır yazdığı için birçok müşavir daha doğru düzgün dizaynı olmayan bir projenin baseline’ı bu düzgün oluşturulamamış iş programı olarak kabul ediyor, bu durumda da normalde 15 günde yapılacak bir aktiviteyi  5 günde yapamadığı için kişilerin performansının düşük olduğunu söylüyoruz .Bu sıkıntının kesin bir çözüm yok fakat Amerika Dışişleri Bakanlığının projelerindeki iş programı sunum yönteminin çok daha mantıklı olduğunu düşünüyorum, bu kontratlarda 2 adet iş programı sunuluyor bunlardan ilki IPES( initial Project Execution Schedule) ikincisi ise BPES (Baseline Project Execution Schedule) olarak anılıyor ,ilk program kontrat imzasından 28 gün sonra sunulan ve sadece dizayn ve mobilizasyon aktivitelerinin detaylı olarak ele alındığı , geri kalan projenin ise üstün körü gösterildiği bir programken ikinci program ise  dizaynın büyük ölçüde tamamlanmasında sonra verilen kısıtlı NTP(Notice to proceed) sonrası sunulan dizayn bir çok belirsizliğin giderilmesinden dolayı çok daha detaylı olarak hazırlanabilen ve gerçek baseline olarak kabul edilen iş programı  oluyor ve bu program bir performans değerlendirmesi için nispeten daha iyi bir araç oluyor.

ikinci olarak SPI genelde sadece proje bazlı olarak hesaplanıyor, bu da hiçbir proje paydasını(çalışan yada müteahhit) motive edebilecek bir hesaplama değil , bence asıl yapılması gereken her proje paydaşının ayrı bir performans indeksinin hesaplanması fakat bunu da tek bir baseline üzerinden yaptığımızda bütün işlerini 50 gün geciktirmiş fakat bitirmiş bir müteahhit yada sorumlunun SPI’ı 1 iken bu müteahhit yüzünden kendi işine 50 gün geç başlamış , 100 günlük işinin yarısını insan üstün bir çabayla 30 günde bitiren bir müteahhit 0.8 gibi bir SPI a sahip olabiliyor .Spı ile ilgili bir diğer sıkıntıda bir müteahhit kritik olmayan aktiviteleri bitrerek projeyi ciddi bir şekilde geciktirmesine rağmen 1 in üstünde bir SPI a sahip olabiliyor.

Bu sıkıntıları bertaraf etmek için benim aklımdan geçen modifiyeli Spı hesaplaması

A: Gerçekleşmelerden gelen kazanılmış değer

B: hesaplanan paydaşın kendi dışındaki etkilerin yansıtıldığı bir baseline dan hesaplanan planlanan değer

Ve bir katsayı olarak

C: hesaplanan paydaşın kendi dışındaki etkilerin yansıtıldığı baseline tamamlanma süresi

D: Hesaplanan paydaşın etkisiyle oluşan proje tamamlanma süresi

(A/B) * (C/D)

Burada 1 adet güncellenen program ve her paydaşın için 2 tane program yaratmamız gerekiyor,1 tanesi paydaşın kendi dışındaki etkilerin yansıtıldığı diğeri de paydaşın etkisiyle oluşan program

Bloğu buraya kadar okuyan herkesin şu anda kafası iyice karışmaya  başladı o yüzden hemen uygulamaya geçiyorum. Adımları olabilince ayrıntılı anlatmaya çalışayım gene de bazı okurlara karmaşık gelebilir bu yüzden yazının sonunda paylaşacağım linkten dosyaları indirebilirsiniz , yazıyı okurken dosyaları da incelerseniz daha kolay anlayabilirsiniz.

Elimizde 6 kişilik bir ekip olsun

furkan proje müdürü
ahmet satin alma şefi
mehmet sözleşme müdürü
metin şantiye şefi
ali saha mühendisi
veli saha mühendisi

Bu altı kişilik ekip için OBS tanımlamak yerine daha kolay olduğu için bir “org” diye bir aktivite kodu tanımlıyorum.

2 binanın ve 1 yol yapımının olduğu basit bir iş programı uyduruyoruz

Şu anda projenin 2 ayını bitirdiğimizi varsayıyoruz, şöyle bir senaryo ile karşı karşıyayız;

Mehmet sözleşmesini 1 gün gecikme ile bitirmiş,

Ahmet nakliyeciyi bağlayıp 5 günlük işi 3 güne indirmiş (şirket Ahmet gibiler sayesinde ayakta kalıyor)

Furkan baseline da olduğu gibi 5 günde işi yapmış,

İşini takip etmeyen bir arkadaş olduğunu düşündüğüm veli ise 10 günde bitirmesi gereken temel kazısını 20 günde bitirmiş ve daha sonra tutuştuğu için de 9 günde kaba işlerin yüzde 70 ini bitirmiş,

Bence şirketin en başarılı elemanı Ali ise veli yüzünden işine geç başlamış ama süper bir yetenek 0olduğu için 10 günlük temel kazısını 6 günde bitirmiş ve kaba işerin yüzde 30 unu bitirmiş (Ali planlama güncellemelerini yapan mühendisle kanka olabilir bu veriler bana çok gerçekçi gelmedi).

Projenin son durumu

Seklinde oldu, şimdi tüm elemanları performansları değerlendirmek için her elemana ait 2 adet iş programı oluşturuyoruz

Furkan proje müdürü olduğundan onun projesini ana baseline ve güncellenen proje olarak düşünebiliriz çünkü projenin genel performansından zaten Furkan sorumlu.

Mehmet için “mehmet dış etkiler” ve “mehmet kendi etkileri” isimli 2 proje oluşturuyoruz. Mehmet’in sadece tek aktivitesi olduğu ve buda başlangıç aktivitesi olduğu için herhangi bir dış mihrakın Mehmet’in performansını etkilemesi mümkün değil o yüzden Mehmet’in “mehmet dış etkiler” projesi baseline ile aynı olacak

“mehmet dış etkiler” programının asıl amacı ise Mehmet’in yaptığı 1 günlük gecikmenin normalde proje bitişini nasıl etkilediğini Mehmet’in suratına vurmak. Eğer bu bir gecikme analizi çalışması olsaydı bu işlemi 1 günlük gecikme diye bir aktivite oluşturup projeye ekleyerek yapabilirdik fakat bu işlemleri yapacak insanın işini kolaylaştırmak için sadece aktivite süresini arttırarak bu etkiyi gösterebiliyoruz.

Gördügünüz gibi mehmetin hatası tüm projeyi 1 gün uzattı , klasik SPI hesaplamasında mehmet projeyi 1 günde uzatsa 10 günde uazatsa aktivitesi bittiği için SPI I 1 olarak hesaplanacaktı benim alternatif hesaplamamda ise mehmetin yaptığı bu hatayı ona ödeteceğiz , burnundan fitil fitil getireceğiz.

Mehmet için yaptığımız işlemin aynısını ahmet içinde yaporuz , bu kez mehmet hametin işini 1 gün geçiktirdiği için “ahmet dış etkiler” programını düzenlememiz gerekiyor.

Gördüğünüz gibi Ahmet’in planlanan günleri bir gün ileri atılmış oldu

Ahmet’in kendi etkileri programında ise Ahmet’in aktivitesinin süresini azaltarak herkes işini düzgün yapsaydı iş programının nasıl 2 gün erken bitebileceğini görüyoruz.

Metine geldiğimizde ise farklı bir durumla karşı karşıyayız metinin programındaki aktiviteler sadece metinin değil Ali ve velinin de aktiviteleri olmalı çünkü bu ikisinin başarısı veya başarısızlığı metininde performans indeksini etkilemeli.

Metin dış etkiler programında inşaat ekibini etkileyen tek aktivite ekskavatör satın alınmasının 1 gün önce bitmesi olduğu için bir tek bu aktiviteyi 1 gün önce bitirdik ve inşaat ekibi tüm işleri düzgün yapsaydı projenin bir gün önce biteceğini görüyoruz.

Metinin kendi etkileri programına baktığımızda alinin müthiş performansı sayesinde projeyi zamanında bitirebilme ihtimali doğmuşken aslında metin işe 1 gün önce başladığı için aslında 1 günlük bir performans kaybı mevcut buda bizim hesaplamamızı etkileyecek.

Aynı işlemleri veli

Ve Ali için yapıyoruz

Şimdi elimizde 12 adet iş programı var ve raporlamanın zor kısmını bitirmiş durumdayız çünkü bundan sonraki kısım her ay hazırladığımız şablon sayesinde kendiliğinden oluşacak.

Şablonu oluşturmaya performans simli bir tablo oluşturarak başlıyoruz

Bu tablodaki alanlarını açıklamadan önce bu hesaplamanın şöyle bir mantığı olacak, eğer bir çalışanın altında başka bir çalışan varsa bu çalışanın performansı kendi altında çalışanların performansından da etkilenecek yani bir ülke müdürünün performansını hesaplarken kendi bireysel olarak yaptığı aktivitelerin yanı sora altında çalışan proje müdürleri veya mühendislerinde performansını hesaba katacağız. Şimdi tablodaki alanları açıklarsak

İsim: performansını değerlendireceğimiz proje paydaşları, bu örnekte hepsi çalışan olmasına rağmen aynı değerlendirmeyi projede çalışan müteahhit firmalar içinde kullanabiliriz

Parent: çalışanın üstünde buluna -kişi

Org: primavera raporundan veri alabilmek için yaptığımız bir eşleştirme alanı

A, B, C, D: yazının ilk başında açıkladığımız değerler

r: C/D katsayısı bunu ayrı olarak hesaplamamızın nedeni bu değeri organizasyon hiyerarşine katmak istemiyoruz , diğer hesaplamalarda ise bu hiyerarşiyi kullanacağız

parent SPI: organizasyon hiyerarşisini göz önünde bulundurarak yaptığımız SPI hesaplaması

Performans: bu çalışmanın son ürünü

İkinci adım olarak dışarıdan alacağımız verileri ayarlamamız gerekiyor burada 2 çeşit verimiz olacak

  • Pmdb serverdan direkt olarak alacağımız veriler
  • Pmdb serverda hesaplanmayan “ time distributed” veriler

Pmdb serverden direkt alacağımız tablolar TASK, PROJECT, ACTVCODE, TASKACTV olacak,bu verileri almak için ODBC driver kurmamız gerekiyor , nasıl kuracağımız ile ilgiliyazıya

http://planlamadanismanlik.com/sqlite-veri-tabani-icin-odbc-baglantisi-yapilmasi/

bağlantısından ulaşabilirsiniz

Bu tabloları excele almak için fotoğraftaki opsiyonu seçip, üstte belirttiğim tabloları yüklüyoruz.

işimiz bittiğinde artık excelde 4 adet query (sorgu) oluşmuş durumda.

Task sorgusunu power query editör de açıyoruz

Sadece fotoğraftaki kolonları seçiyoruz, merge queries opsiyonunu seçip

Project id alanı üzerinden 2 query i birleştiriyoruz

Project tablosundan da sadece proj short name alanını seçip sadece “ana” projesini filtreliyoruz, daha sonra proje id alanlarından taskact tablosunu birleştirip

Aynı işlemi actcode tablosu içinde yapıp shortname alanını seçiyoruz ve elimizde artık güncellediğimiz iş programının istediğimiz detaylarına sahip bir sorguya sahibiz

SPI için kullanacağımız deger Cost olacak , bu konuda herkesin farklı bir yaklaşımı var ben daha kesin bir değer olduğu için Cost seçiyorum, burdada nbenim tercihim bu değeri güncellenen bir iş programından almaktansa aktivite id ve Cost değerlerinin olduğu sabit bir excel tablosunu tercih ediyorum . daha önce kullandğım programlarda yanlışlıkla başlatıp sonra başlamamış hale getirdiğim aktivitelerde çeşitli cost hesaplaması sıkıntıları yaşadım , o yüzden eğer excelde hesaplıyabiliyorsam o değeri excelin hesaplamasını tercih ediyotrum. Bu yüzden  COST isimli yeni bit tablo oluşturuyoruz.

Kırmızı dikdörtgen içindeki tuşu kullanarak tabloyu bir sorguya dönüştürüyoruz ve cost sorgusunu activity Id üzerinden task sorgusuna ekliyoruz

Bizim hedefimiz zamansal performansı ölçmek olduğu için kullanacağımız yüzde “ duration percent complete” olmalı , biraz araştırınca PMDB nin “ duration percent complete” i bir tabloda tutmadığını anlıyorum , bunu hesaplamak içinde “EARNED” adlı yeni hesaplanan alan yaratmalıyız ve formülümüz

=(1-([@[REMAIN_DRTN_HR_CNT]]/[@[TARGET_DRTN_HR_CNT]]))*[@[COST.Budgeted Total Cost]]

Olmalı şimdi elimizde tüm paydaşların güncel tabloda ne kadar kazanılmış değerinin olduğu bir tabloya ve toplamda 5 adet sorguya sahibiz

PMDB tablolarının kapsamlarını anlamak için

https://docs.oracle.com/cd/E17462_01/Reporting_Database/R2andAnalytics/OdsFieldMapList.html

Linkine bakabilirsiniz

Şimdi performans tablosuna geri dönüyoruz, Furkan tüm projenin sahibi olduğu için

Furkan için A alanının formülünü

=SUMIFS(TASK[EARNED],TASK[PROJECT.PROJ_SHORT_NAME],"=ana")

Olarak tanımlıyoruz

Diğerleri için ise

=SUMIFS(TASK[EARNED],TASK[PROJECT.PROJ_SHORT_NAME],"=ana",TASK[ACTVCODE.SHORT_NAME],"="&[@isim])

Formülünü kullanıyoruz böylece A değerlerini hesaplamış olduk

Artık 2. Kısım olan time distributed verileri oluşturmamız gerekiyor

İlk önce time distributed aktivite raporu oluşturmamız gerekiyor, burada dikkat etmemiz gereken şeyler

Burada ordinal dates i seçmemizin sebebi raporun date formatını Excel tanıyamayabiliyor bunun yerine sayısal bir değer kullanıyoruz

Raporu oluşturduktan sonra tüm projeleri birlikte açıp raporu çalıştırıyoruz, alttaki dosya oluştuktan sonra buradaki tüm bilgileri Excel dosyamıza kopyalıyoruz

Ve bu raporu tablo haline getiriyoruz

Tabloyu sorgu haline getiriyoruz, total cost kolonunu kapatıyoruz, tablonun mevcut hali datayı süzmemize olanak vermiyor o yüzden 127 günü gösteren kolonları seçip

Unpivot columns seçeneğini seçiyoruz

Böylece her elemanın her projede her gün için planlanan değerlerinin olduğu bir tablo elde ettik

Kolonun adını days passed olarak değiştirip data type’ını decimal numbera çeviriyoruz.

Bu tablodan istediğimiz veriyi alabilmemiz için rapor tarihi ile proje başlangıcı arasındaki farkı bulmamız gerekiyor o yüzden 3 tane hücre belirliyoruz

Bu veriyi çok kullanma ihtimalimiz olduğu için passed days hücresini “passed” olarak isimlendiriyoruz.

Furkan tüm projenin sahibi olduğu için

Furkan için B alanının formülünü

=SUMIFS(DIST[Value],DIST[Project ID],"=ana",DIST[days passed],"= "&passed)

Olarak tanımlıyoruz

Diğerleri için ise

=SUMIFS(DIST[Value],DIST[Project ID],"=ana-"&[@isim]&"-1",DIST[days passed],"= "&passed,DIST[org],[@org])

Formülünü kullanıyoruz

C ve D alanlarını hesaplamak için önce Project sorgusunu düzenlememiz gerekiyor, Sorgunun son hali

Oluyor, sorgunun ismini “PROJECTS” olarak değiştiriyoruz

C değerlerini hesaplarken Furkan için

=VLOOKUP("ana",PROJECTS,3,0)-VLOOKUP("ana",PROJECTS,2,0)

Diğerleri için

=VLOOKUP("ana-"&[@isim]&"-1",PROJECTS,3,0)-VLOOKUP("ana-"&[@isim]&"-1",PROJECTS,2,0)

Formüllerini kullanıyoruz

D değerlerini hesaplarken Furkan için

=VLOOKUP("ana-baseline",PROJECTS,3,0)-VLOOKUP("ana",PROJECTS,2,0)

Diğerleri için

=VLOOKUP("ana-"&[@isim]&"-2",PROJECTS,3,0)-VLOOKUP("ana-"&[@isim]&"-2",PROJECTS,2,0)

Formüllerini kullanıyoruz

r alanı içinde

=[@C]/[@D]

Formülünü kullanıyoruz

Şu an elimizde her isim için bir değerimiz fakat biz çalışanlar için hiyerarşi yapısın oluşturup üstteki çalışanın performansının alttaki çalışanların performansından etkilenmesini istiyoruz, ayrıca ülke müdürü gibi projelere direkt etkisi olmayan fakat birden fazla proje için değerlendirme yapmamız gereken çalışmalar için hiyerarşi yapısını kullanmaktan başka bir alternatifimiz yok. Hiyerarşi yapısını oluşturmamız için DAX (Data Analysis Expressions) denen hesaplamaları kullanmamız gerekiyor ve fonksiyonlar ise excelde ve query alanlarında kullanılamıyor bu yüzden PowerPivot özelliği ile veri modeli oluşturmalıyız

Add to data model seçeneğini tıklıyoruz ve karşımıza alttaki gibi bir ara yüz çıkıyor

Bu tabloya 4 adet hesaplanmış kolon ekliyoruz sırasıyla adları ve formülleri

Path =path([isim],[parent])

org1 =PATHITEM([path],1)

org2 =PATHITEM([path],2)

org3 =PATHITEM([path],3)

Diagram view i seçip org1 org2 org3 alanlarını seçip create hierarchy opsiyonunun seçiyoruz

Oluşturduğumuz hiyerarşinin son hali yandaki gibi oluyor

Ve bu veri modelinden yeni bir pivot table oluşturuyoruz

Burada da gördüğünüz gibi metinin tek başına planlanan değeri 3000 iken alt çalışanları da işe kattığımızda 57500 oluyor şimdi SPI hesaplamalarını yapmamız gerekiyor burada dikkat etmemiz gereken nokta bunu performans tablosunda yapsaydık üst grup alttaki SPI ları toplayacağı için 5 6 gibi abuk subuk rakamlar görecektik bunu engellemek için bir calculated fied oluşturmamız gerekiyor.

Böylece her çalışan için hiyerarşiye göre bir SPI hesaplaması yapılmış oldu.

Performans tablosuna geri dönüp  parent SPI kolonuna

=VLOOKUP([@isim],PIVOT!A:D,4,0)

Formülünü, performans kolonuna ise

=VLOOKUP([@isim],PIVOT!A:D,4,0)

Formülünü yazıyoruz

Artık elimizde tüm çalışanlar için performans değerimiz oluştu , burada r değerine bazı modifikasyonlar yapabiliriz , mesela 600 günlük bir projede 6 günlük gecikme yüzde 1 olarak hesaplanıyor eğer bunun daha önemli olduğunu düşünüyorsanız r değerini C/D nin karesi küpü gibi alternatifler yapabiliriz

Son olarak ta power view özelliği ile bu çalışanları görsel olarak sıralayan bir çalışma yapıyoruz

Power view özelliğini ilk defa kullanıyorum, bunu tercih etmemim sebebi internetten öğrendiğim kadarıyla power BI ve SharePoint’te bu raporları yayınlayabileceğimizin yazmasıydı, bu özelliği aktif etmek için 2 gün uğraştım internet forumlarından bulduğum yalan yanlış bilgiler ile regeditten Excel ayarlarını bile değiştirdim , en sonunda Microsoft’un sitesinde bu özelliğin hangi Office 365 planına ait olduğunu buldum benim Office 365 planım business plus olmasına ve normalde Office pro özelliklerine sahip olmasına rağmen bu özellik için minimum enterprise e3 planını kullanmam gerektiğini anladım , sonuç olarak internetteki yanlış bilgilerden regedit  agd olduğu için  bilgisayara format atmak ve bir üst Office 365 sürümüne geçmek zorunda kaldım bence Microsoft plan içeriklerini daha açıklayıcı yapmalı , ayrıca şunu da belirteyim okurlarını en fazla seven blogger benim , insanlara Bir şeyler öğreteceğim diye çektiğim çilenin haddi hesabı yok.

Bu yazının olması gerekenden 5 kat daha uzun olması ve benim de konuya daha hâkim olabilmem için power view ı daha etkin kullanma ve yayınlama ile ilgili başka bir yazı yayınlamayı planlıyorum.

Bu çalışmayla ilgili ilk söyleyebileceğim şey içinde birçok özelliğin nasıl kullanılacağını gösteren bir çalışma oldu , böyle bir hesaplamanın karışık bir projede daha zor olacağının farkındayım ama bu çalışmayı kendi yapmaya çalışan biri planlama raporu oluştururken karşısına çıkabilecek birçok problemi nasıl çözebileceğini görecektir. İkinci olarak eğer bir projede bu hesaplama yöntemi hayata geçirilirse çalışanların iş programına ilgisi oldukça artacak ve herkes iş programına hâkim olacaktır , buda iş programını bir prosedür dokümanından çıkartıp yaşayan bir dokümana çevirecektir.

Çalışma sonucu ortaya çıkan dosyaları

https://planlamadanismanlik.sharepoint.com/:f:/s/genel/EmBdy_-xMqhNpILo67XdvbUBjJrrFxrEpmBr6Sr3xGVwGw?e=Ik7e6T

linkinden indirebilirsiniz, 12 adet proje ve 1 adet raporu import etmekle uğraşmamanız için direkt olarak SQLite dosyasını koyuyorum, bağlanabilmeniz için

username: admin

password:asd123

Son olarak da buradan Microsoft Türkiye’ye seslenmek istiyorum , milyonlarca inşaat firması çalışanlarını birer yarış atı gibi sıralayabilecekleri bu tür opsiyonları fark edip Office sürümlerini yükselttiklerinde eminim ki beni de görürsünüz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir