Results 1 to 8 of 8
  1. #1
    seocavaz is offline Novice
    Windows 8 Access 2013
    Join Date
    Apr 2015
    Posts
    26

    Query iif calc too long


    Hi,

    I have a field in a query that needs to run this calculation:

    CalcdPOF: (IIf([rsr]<=[Tbl_FPHJEDdata].[y1], 9, IIf([rsr]<=[Tbl_FPHJEDdata].[y2],10^(Log([Tbl_FPHJEDdata].[x1])+(Log([Tbl_FPHJEDdata].[x2])-(Log([Tbl_FPHJEDdata].[x1]))/([Tbl_FPHJEDdata].[y2]-[Tbl_FPHJEDdata].[y1])*([RSR]-[Tbl_FPHJEDdata].[y1],IIF([RSR]<= [Tbl_FPHJEDdata].[y3],10^(LOG([Tbl_FPHJEDdata].[x2])+(LOG([Tbl_FPHJEDdata].[x3])-LOG([Tbl_FPHJEDdata].[x2]))/( [Tbl_FPHJEDdata].[y3]-[Tbl_FPHJEDdata].[y2])*([RSR]-[Tbl_FPHJEDdata].[y2])),IIF([RSR]<= [Tbl_FPHJEDdata].[y4],10^(LOG([Tbl_FPHJEDdata].[x3])+(LOG([Tbl_FPHJEDdata].[x4])-(LOG([Tbl_FPHJEDdata].[x3])))/( [Tbl_FPHJEDdata].[y4]-[Tbl_FPHJEDdata].[y3])*([RSR]-[Tbl_FPHJEDdata].[y3])),IIF([RSR]<= [Tbl_FPHJEDdata].[y5],10^(LOG([Tbl_FPHJEDdata].[x4])+(LOG([Tbl_FPHJEDdata].[x5])-(LOG([Tbl_FPHJEDdata].[x4])))/( [Tbl_FPHJEDdata].[y5]-[Tbl_FPHJEDdata].[y4])*([RSR]-[Tbl_FPHJEDdata].[y4])),IIF([RSR]<= [Tbl_FPHJEDdata].[y6],10^(LOG([Tbl_FPHJEDdata].[x5])+(LOG([Tbl_FPHJEDdata].[x6])-(LOG([Tbl_FPHJEDdata].[x5])))/( [Tbl_FPHJEDdata].[y6]-[Tbl_FPHJEDdata].[y5])*([RSR]-[Tbl_FPHJEDdata].[y5])),IIF([RSR]<= [Tbl_FPHJEDdata].[y7],10^(LOG([Tbl_FPHJEDdata].[x6])+(LOG([Tbl_FPHJEDdata].[x7])-(LOG([Tbl_FPHJEDdata].[x6])))/( [Tbl_FPHJEDdata].[y7]-[Tbl_FPHJEDdata].[y6])*([RSR]-[Tbl_FPHJEDdata].[y6])),IIF([RSR]<= [Tbl_FPHJEDdata].[y8],10^(LOG([Tbl_FPHJEDdata].[y7])+(LOG([Tbl_FPHJEDdata].[x8])-(LOG([Tbl_FPHJEDdata].[x7])))/( [Tbl_FPHJEDdata].[y8]-[Tbl_FPHJEDdata].[y7])*([RSR]-[Tbl_FPHJEDdata].[y7])),IIF([RSR]<= [Tbl_FPHJEDdata].[y9],10^(LOG([Tbl_FPHJEDdata].[x8])+(LOG([Tbl_FPHJEDdata].[x9])-(LOG([Tbl_FPHJEDdata].[x8])))/( [Tbl_FPHJEDdata].[y9]-[Tbl_FPHJEDdata].[y8])*([RSR]-[Tbl_FPHJEDdata].[y8])),IIF([RSR]<= [Tbl_FPHJEDdata].[y10],10^(LOG([Tbl_FPHJEDdata].[x9])+(LOG([Tbl_FPHJEDdata].[x10])-(LOG([Tbl_FPHJEDdata].[x9])))/( [Tbl_FPHJEDdata].[y10]-[Tbl_FPHJEDdata].[y9])*([RSR]-[Tbl_FPHJEDdata].[y9])),IIF([RSR]<= [Tbl_FPHJEDdata].[y11],10^(LOG([Tbl_FPHJEDdata].[x10])+(LOG([Tbl_FPHJEDdata].[x11])-(LOG([Tbl_FPHJEDdata].[y10])))/( [Tbl_FPHJEDdata].[y11]-[Tbl_FPHJEDdata].[y10])*([RSR]-[Tbl_FPHJEDdata].[y10])),2100)))))))))))))

    When I do just the first couple of iif statements it works fine however it gives me a syntax error when I have them all in there, though I have combed through and there is no errors. Similarly when I tried to do it through the "build" tool, it will only let me get to a certain amount of characters, is that why? Have I exceeded the allotted amount of characters?

    If anyone has an idea of a simpler way of doing it, that may help too.

    Thanks in advanced!!

    Sam

  2. #2
    Perceptus's Avatar
    Perceptus is offline Expert
    Windows 7 64bit Access 2007
    Join Date
    Nov 2012
    Location
    Knoxville, Tennessee
    Posts
    659
    Do you have the fomulae prior to to the nested IFF. Ive done the same thing in the past, the nested IIF was kludge for needing to properly query the data with a bunch of sub queries.

  3. #3
    JoeM is offline VIP
    Windows XP Access 2007
    Join Date
    Jun 2012
    Posts
    3,904
    Anything that complex should be done as a User Defined Function (UDF) in VBA. They are much easier to program, follow, and maintain. Trying to maintain/support a function like that where everything runs together is extremely difficult.

    Here are some links on UDFs:
    http://datapigtechnologies.com/blog/...ons-in-access/
    http://www.fontstuff.com/vba/vbatut04.htm

  4. #4
    seocavaz is offline Novice
    Windows 8 Access 2013
    Join Date
    Apr 2015
    Posts
    26
    The formula would be:

    10^(log(Xn)+(log(Xn+1)-log(Xn))* ([rsr]-Yn)/(Yn+1 -Yn)

    So basically I should break it down into 11 different fields then find the one not null?

  5. #5
    JoeM is offline VIP
    Windows XP Access 2007
    Join Date
    Jun 2012
    Posts
    3,904
    So you are checking 11 different values?
    Where are these coming from?
    Will the results of 10 of these 11 always be null?

  6. #6
    Perceptus's Avatar
    Perceptus is offline Expert
    Windows 7 64bit Access 2007
    Join Date
    Nov 2012
    Location
    Knoxville, Tennessee
    Posts
    659
    if that is the formula used on all data you could probably get a really nice recursive calculation on nulls to keep code size down.
    Last edited by June7; 07-07-2015 at 03:43 PM.

  7. #7
    June7's Avatar
    June7 is offline VIP
    Windows 7 64bit Access 2010 32bit
    Join Date
    May 2011
    Location
    The Great Land
    Posts
    53,624
    Do you really need the table prefix?

    I think missing a paren:

    CalcdPOF: (IIf([rsr]<=[Tbl_FPHJEDdata].[y1], 9, IIf([rsr]<=[Tbl_FPHJEDdata].[y2],10^(Log([Tbl_FPHJEDdata].[x1])+(Log([Tbl_FPHJEDdata].[x2])-(Log([Tbl_FPHJEDdata].[x1]))/([Tbl_FPHJEDdata].[y2]-[Tbl_FPHJEDdata].[y1])*([RSR]-[Tbl_FPHJEDdata].[y1]),IIF([RSR]<= [Tbl_FPHJEDdata].[y3],10^(LOG([Tbl_FPHJEDdata].[x2])+(LOG([Tbl_FPHJEDdata].[x3])-LOG([Tbl_FPHJEDdata].[x2]))/( [Tbl_FPHJEDdata].[y3]-[Tbl_FPHJEDdata].[y2])*([RSR]-[Tbl_FPHJEDdata].[y2])),IIF([RSR]<= [Tbl_FPHJEDdata].[y4],10^(LOG([Tbl_FPHJEDdata].[x3])+(LOG([Tbl_FPHJEDdata].[x4])-(LOG([Tbl_FPHJEDdata].[x3])))/( [Tbl_FPHJEDdata].[y4]-[Tbl_FPHJEDdata].[y3])*([RSR]-[Tbl_FPHJEDdata].[y3])),IIF([RSR]<= [Tbl_FPHJEDdata].[y5],10^(LOG([Tbl_FPHJEDdata].[x4])+(LOG([Tbl_FPHJEDdata].[x5])-(LOG([Tbl_FPHJEDdata].[x4])))/( [Tbl_FPHJEDdata].[y5]-[Tbl_FPHJEDdata].[y4])*([RSR]-[Tbl_FPHJEDdata].[y4])),IIF([RSR]<= [Tbl_FPHJEDdata].[y6],10^(LOG([Tbl_FPHJEDdata].[x5])+(LOG([Tbl_FPHJEDdata].[x6])-(LOG([Tbl_FPHJEDdata].[x5])))/( [Tbl_FPHJEDdata].[y6]-[Tbl_FPHJEDdata].[y5])*([RSR]-[Tbl_FPHJEDdata].[y5])),IIF([RSR]<= [Tbl_FPHJEDdata].[y7],10^(LOG([Tbl_FPHJEDdata].[x6])+(LOG([Tbl_FPHJEDdata].[x7])-(LOG([Tbl_FPHJEDdata].[x6])))/( [Tbl_FPHJEDdata].[y7]-[Tbl_FPHJEDdata].[y6])*([RSR]-[Tbl_FPHJEDdata].[y6])),IIF([RSR]<= [Tbl_FPHJEDdata].[y8],10^(LOG([Tbl_FPHJEDdata].[y7])+(LOG([Tbl_FPHJEDdata].[x8])-(LOG([Tbl_FPHJEDdata].[x7])))/( [Tbl_FPHJEDdata].[y8]-[Tbl_FPHJEDdata].[y7])*([RSR]-[Tbl_FPHJEDdata].[y7])),IIF([RSR]<= [Tbl_FPHJEDdata].[y9],10^(LOG([Tbl_FPHJEDdata].[x8])+(LOG([Tbl_FPHJEDdata].[x9])-(LOG([Tbl_FPHJEDdata].[x8])))/( [Tbl_FPHJEDdata].[y9]-[Tbl_FPHJEDdata].[y8])*([RSR]-[Tbl_FPHJEDdata].[y8])),IIF([RSR]<= [Tbl_FPHJEDdata].[y10],10^(LOG([Tbl_FPHJEDdata].[x9])+(LOG([Tbl_FPHJEDdata].[x10])-(LOG([Tbl_FPHJEDdata].[x9])))/( [Tbl_FPHJEDdata].[y10]-[Tbl_FPHJEDdata].[y9])*([RSR]-[Tbl_FPHJEDdata].[y9])),IIF([RSR]<= [Tbl_FPHJEDdata].[y11],10^(LOG([Tbl_FPHJEDdata].[x10])+(LOG([Tbl_FPHJEDdata].[x11])-(LOG([Tbl_FPHJEDdata].[y10])))/( [Tbl_FPHJEDdata].[y11]-[Tbl_FPHJEDdata].[y10])*([RSR]-[Tbl_FPHJEDdata].[y10])),2100)))))))))))))

    And the outermost paren pair not needed.

    I think there is a limit of 7 nested IIf.

    Consider Switch() function or VBA.
    How to attach file: http://www.accessforums.net/showthread.php?t=70301 To provide db: copy, remove confidential data, run compact & repair, zip w/Windows Compression.

  8. #8
    CJ_London is offline VIP
    Windows 8 Access 2010 32bit
    Join Date
    Mar 2015
    Posts
    11,840
    to reduce the length of the iif statement and perhaps make it easier to read, alias your Tbl_FPHJEDdata table to something much shorter -e.g. D or even remove it if the y1,y2.. field names are unique

Please reply to this thread with any new information or opinions.

Similar Threads

  1. Too long of query, way to store statements?
    By btappan in forum Queries
    Replies: 3
    Last Post: 12-15-2013, 10:12 PM
  2. Correlation calc in query
    By mike02 in forum Queries
    Replies: 2
    Last Post: 06-10-2013, 02:18 PM
  3. Calc
    By hitman in forum Access
    Replies: 2
    Last Post: 02-14-2013, 07:10 AM
  4. Iff query with date calc?
    By technet in forum Queries
    Replies: 3
    Last Post: 02-08-2012, 10:17 AM
  5. Update Query too long
    By ack9f in forum Queries
    Replies: 3
    Last Post: 04-26-2010, 12:11 PM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Other Forums: Microsoft Office Forums