Skip to main content

AccessTr.neT


Enterpolasyon (Ara Değer) Hesaplama

Enterpolasyon (Ara Değer) Hesaplama

Çözüldü #1
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...
.rar EnterpolasyonHesabi.rar (Dosya Boyutu: 12,84 KB | İndirme Sayısı: 202)
elmariachi, 17-04-2009 tarihinden beri AccessTr.neT üyesidir.
Son Düzenleme: 23/05/2009, 10:32, Düzenleyen: elmariachi.
Cevapla
Çözüldü #2
2,61 değerini nasıl hesapladınız? işlemi yazar mısınız?
Cevapla
Çözüldü #3
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
.rar EnterpolasyonHesabi_Seruz2.rar (Dosya Boyutu: 13,73 KB | İndirme Sayısı: 50)
Bildiğini bilenin arkasından git, bildiğini bilmeyeni uyar, bilmediğini bilene öğret, bilmediğini bilmeyenden kaç.
Konfüçyüs
Cevapla
Çözüldü #4
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...
elmariachi, 17-04-2009 tarihinden beri AccessTr.neT üyesidir.
Cevapla
Çözüldü #5
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

Bildiğini bilenin arkasından git, bildiğini bilmeyeni uyar, bilmediğini bilene öğret, bilmediğini bilmeyenden kaç.
Konfüçyüs
Cevapla
Çözüldü #6
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. +rep

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...
.rar EnterpolasyonHesabi.rar (Dosya Boyutu: 17,99 KB | İndirme Sayısı: 32)
elmariachi, 17-04-2009 tarihinden beri AccessTr.neT üyesidir.
Son Düzenleme: 25/05/2009, 19:41, Düzenleyen: elmariachi.
Cevapla

Bir hesap oluşturun veya yorum yapmak için giriş yapın

Yorum yapmak için üye olmanız gerekiyor

ya da
Task