Avatar billede snowball Novice
07. august 2006 - 14:10 Der er 7 kommentarer og
1 løsning

Hjælp til større IIf funktion

Hej.

Jeg er ved at rette en række fejl i gammel Access97 frontend, og er kommet til noget som jeg ikke lige helt kan finde hoved og hale i.

Er der en der kan "oversætte" nedenstående til noget forståeligt for jeg har mistet overblikket? ;)

=IIf(DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El'") Is Not Null;DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El'")/([IPO2]+[IPO2K]);0)+IIf(DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Mont El'") Is Not Null;DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Mont El'")/([IPO2]+[IPO2K]);0)+IIf(DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Inst El'") Is Not Null;DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Inst El'")/([IPO2]+[IPO2K]);0)+IIf(DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Mont El'") Is Not Null;DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Mont El'")/([IPO2]+[IPO2K]);0)

Jeg vil ikke høre noget for navngivningen af felterne, for det er ikke mig der har lavet det i sin tid ;)

På forhånd tak.
Avatar billede kjulius Novice
07. august 2006 - 19:31 #1
Jeg har prøvet at opdele sætningen lidt og får noget der ligner dette:

IIf(
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El'")
Is Not Null;
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El'")/ ([IPO2]+[IPO2K]);
0)

+IIf(
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Mont El'")
Is Not Null;
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Mont El'")/([IPO2]+[IPO2K])
;
0)

+IIf(
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Inst El'")
Is Not Null;
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Inst El'")/([IPO2]+[IPO2K]);
0)


+IIf(
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Mont El'")
Is Not Null;
DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Tr Mont El'")/([IPO2]+[IPO2K]);
0)


Som jeg ser det, så har du en tabel eller forespørgsel ved navn "Copying Quotation UF Project, sum", som indeholder et felt der hedder "[Net sale with out com and - DG / hour]".

Tabellen indeholder desuden et felt som hedder "[Navn ID]", som kan have værdierne:
'Inst El'
'Mont El'
'Tr Inst El'
'Tr Mont El'

Beregningen giver altså:

Hvis der findes rows hvor [Navn ID] = "Inst El" så returner summen af feltet [Net sale with out com and - DG / hour]
Hvis der ikke findes sådanne rows, returneres 0

+

Hvis der findes rows hvor [Navn ID] = "Mont El" så returner summen af feltet [Net sale with out com and - DG / hour]
Hvis der ikke findes sådanne rows, returneres 0

+

Hvis der findes rows hvor [Navn ID] = "Tr Inst El" så returner summen af feltet [Net sale with out com and - DG / hour]
Hvis der ikke findes sådanne rows, returneres 0

+

Hvis der findes rows hvor [Navn ID] = "Tr Mont El" så returner summen af feltet [Net sale with out com and - DG / hour]
Hvis der ikke findes sådanne rows, returneres 0
Avatar billede kjulius Novice
07. august 2006 - 19:45 #2
I praksis returnerer den simpelthen summen af feltet [Net sale with out com and - DG / hour] i tabellen "Copying Quotation UF Project, sum", hvor nøglefeltet [Navn ID] er en af de tilladte værdier, svarende til følgende SQL:

SELECT SUM([Net sale with out com and - DG / hour])
FROM [Copying Quotation UF Project, sum]
WHERE [Navn ID] IN ("Inst El", "Mont El", "Tr Inst El", "Tr Mont El")

Du ville kunne simplificere sætningen en hel del ved simpelthen at inkludere alle kriterierne i een DSUM funktion:

=IIf(DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El'") Is Not Null;DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El' Or [Navn ID]='Mont El' Or [Navn ID]='Tr Inst El' Or [Navn ID]='Tr Mont El'")/([IPO2]+[IPO2K]);0)
Avatar billede kjulius Novice
07. august 2006 - 19:56 #3
Jeg må desværre korrigere mig selv - det er summen af
([Net sale with out com and - DG / hour] / IPO2) + IPO2K,

svarende til forespørgslen:

SELECT SUM(([Net sale with out com and - DG / hour] / IPO2) + IPO2K)
FROM [Copying Quotation UF Project, sum]
WHERE [Navn ID] IN ("Inst El", "Mont El", "Tr Inst El", "Tr Mont El")

Den simplificerede sætning skulle stadig gælde, hvis du skulle have mod på at ændre i den oprindelige sætning...
Avatar billede kjulius Novice
07. august 2006 - 20:00 #4
Grrrr...

=IIf(DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El' Or [Navn ID]='Mont El' Or [Navn ID]='Tr Inst El' Or [Navn ID]='Tr Mont El'") Is Not Null;DSum("[Net sale with out com and - DG / hour]";"Copying Quotation UF Project, sum";"[Navn ID]='Inst El' Or [Navn ID]='Mont El' Or [Navn ID]='Tr Inst El' Or [Navn ID]='Tr Mont El'")/([IPO2]+[IPO2K]);0)

Jeg havde også glemt at teste på alle fire konditioner i den første DSUM.
Sorry!!! :-(
Avatar billede snowball Novice
07. august 2006 - 21:48 #5
Tak for forklaringen. Det kastede lidt lys over det :)

Jeg kigger nærmere på det i morgen når jeg kommer på arbejde :)
Avatar billede snowball Novice
09. august 2006 - 09:52 #6
Det ser ud til at virke. Lav venligst et svar :)
Avatar billede kjulius Novice
09. august 2006 - 12:22 #7
S'gerne...
Avatar billede snowball Novice
09. august 2006 - 13:23 #8
Tak for hjælpen :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester