07. august 2006 - 14:10Der 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 ;)
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
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
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)
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...
=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!!! :-(
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.