Enterpolasyon (Ara Değer) Hesaplama

1 2
23/05/2009, 10:30

elmariachi

Arkadaşlar raporda yaptığım bir hesaplama sonucuna göre başka bir tabodan ara değer hesaplatmak istiyorum. Şöyle ki,

Rapor1 de göreceğiniz gibi
Toplam Sayı: 5060
Sınıf: 3 Sınıf değerleri var.

Şimdi bu değerleri PID isimli tabloda orantılayacağız. 5060 değeri 5000 ve 7500 ün arasında olduğu için bu iki değer alınacak. Sınıfımızda 3 Sınıf olduğu içinde 5000 ve 7500 ün 3 Sınıf karşılığı olan 2,62 ve 2,32 sınıf değerleri alınacak ve hesaplanak. Kısaca, 5060 değerinin 3 sınıf için karşılığını bulmak istiyorum. Bu değerde raporda gösterilecek.

Rapordaki sayı değerine göre hangi aralıkta olduğunu tespit edecek, sonrada, o aralığa ait sınıf değerlerini kullanarak istenen değeri bulmak.

NOT: Verilen örnek için sonuç 2,61 dir.

Selamlar...
23/05/2009, 12:40

kadirdursun

2,61 değerini nasıl hesapladınız? işlemi yazar mısınız?
23/05/2009, 13:30

Seruz

Siz sanırım, 5000 ve 7500'ün değerleri olan 2,62 ve 2,32 'nin Ağırlıklı Ortalamasını hesaplamışsınız ve 2,61 olarak bulmuşsunuz. Ama nasıl hesapladığınızın formülü yazmamışsınız.

Her 2 değeri de bulan örneği ekledim.

Alt (mesela 5000 için 2,62) ve Üst (mesela 7500 için 2,32 ) değerlerini buluyor, ortalaması olan 2,61 in nasıl hesaplanacağının formülünü de sizin yazmanız gerekiyor.

Kod:
Private Sub Ayrıntı_Format(Cancel As Integer, FormatCount As Integer)
Dim Bulunan_AltDeger, Bulunan_UstDeger
    Select Case Me.SINIF
    Case "1 Sınıf"
        Bulunan_AltDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "2 Sınıf"
        Bulunan_AltDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "3 Sınıf"
        Bulunan_AltDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "4 Sınıf"
        Bulunan_AltDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "5 Sınıf"
        Bulunan_AltDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    End Select
    Me.AltDeger = Bulunan_AltDeger
    Me.UstDeger = Bulunan_UstDeger
End Sub

Ayrıca alan adlarında boşluk kullanmamanızı şiddetle tavsiye ederim.
Bu ve dikkat etmeniz gereken diğer şeyler için aşağıdaki konuyu okuyun.
Yapılmaması gereken ölümcül hatalar
24/05/2009, 10:48

elmariachi

Sn.seruz, hesap için 5000 ve 7500 değerlerine de ihtiyaç var. Onlarıda form üstünde 2,62 ve 2,32 gibi gösterebilirsek, formülü rakamlar üzerinden yazacağım. Biraz uğraştım ama yapamadım...

Selamlar...
24/05/2009, 15:24

Seruz

Aslında bu kadar Dlookup yerine, ADO kullanan bir function yapsak daha güzel olacak ama şimdi vaktim yok. Siz formülü yazın, uygun olursam Pazartesi-Salı function ile çözümü gönderirim.

Yazdığım kodları aşağıdaki şekilde değiştirin.
Kod:
Dim Bulunan_AltM2, Bulunan_UstM2, Bulunan_AltDeger, Bulunan_UstDeger

    Select Case Me.SINIF
    Case "1 Sınıf"
        Bulunan_AltDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[1 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "2 Sınıf"
        Bulunan_AltDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[2 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "3 Sınıf"
        Bulunan_AltDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[3 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "4 Sınıf"
        Bulunan_AltDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[4 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Case "5 Sınıf"
        Bulunan_AltDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
        Bulunan_UstDeger = DLookup("[5 Sınıf]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    End Select
    Me.AltDeger = Bulunan_AltDeger
    Me.UstDeger = Bulunan_UstDeger
    Bulunan_AltM2 = DLookup("[YYm/BM (m2)]", "PID_SORGUSU_ALT", "[YYm/BM (m2)] <=" & Me.TOPSAYI)
    Bulunan_UstM2 = DLookup("[YYm/BM (m2)]", "PID_SORGUSU_UST", "[YYm/BM (m2)] >=" & Me.TOPSAYI)
    Me.Deger = 0  'Buraya formülü yazacaksınız
25/05/2009, 19:40

elmariachi

Formül, kodların en altında yazılıdır arkadaşlar. (Rapor1-Ayrıntı-Olay- Biçimlendiğinde)

Verilen örnek değerler için formül;

2,32-2,62
_________ = -0,00012

7500-5000


-0,00012 x (5060-5000) = -0,0072

-0,0072 + 2,62 = 2,61


Yardımlarında dolayı seruz üstada çok teşekkür ederim.
Ama kendisinden bir isteğim daha olacak. PID tablosuna bakınca; [YYm/BM (m2)] isimli alandaki sayıların 500-80000 aralığında olduğunu görürüz. 500 den küçük sayılar için 500 ün SINIF değrlerini, 80000 den büyük sayılar içinde 80000 in SINIF değerlerini almasını istiyorum.

Selamlar...
1 2