Analytica 4.2 beta Release Notes/Changes in

<< Back to Beta Tester Page

This page lists changes in since beta build

Enhancements to Functions

  • We've changed the names of all the Excel functions as follows:
Old Name New Name
OpenExcelFile SpreadsheetOpen
SaveExcelWorkbook SpreadsheetSave
WorksheetCell SpreadsheetCell
WorksheetRange SpreadsheetRange
WriteWorksheetCell SpreadsheetSetCell
WriteWorksheetRange SpreadsheetSetRange
Although some of these functions were unofficially present in 4.1, they were not officially released or supported, so officially they are new to 4.2. Hence, we're changing them to preferable names. The old names, however, continue to work -- they just don't appear on the Definition menu or in the documentation any more, where they have been replaced with the new names.
  • In SpreadsheetRange, the parameter order is now different from what it was in the previous WorksheetRange function. The «sheet» parameter is now optional, and does not need to be used used when providing a named range label. «Sheet» is now the last parameter, rather than the second parameter, since it is optional and only rarely needed. Also, when using a cell range, the sheet can be specified in the range specification, such as "Sheet1!F6:H15". The same change applies to SpreadsheetSetRange.
  • ReadFromUrl now creates a picture object (which can be assigned to a Pict attribute) when the http source is a picture. For a really cool demo of this, see the new example model Map images from internet.ana in the Example Models\Function Examples directory.
  • Dynamic can now be defined in reverse, see next section.

Changes to Dynamic evaluation

  • An enhancement to Dynamic now allows you to specify the recurrence in reverse. In many dynamic programming problems, one starts with the value in the final time period and then defines a recurrence at Time=t as a function of values at Time=t+1. This is the reverse of the way recurrences are normally defined using Dynamic. The optional parameter, «reverse», can be set to true to indicate that the recurrence is to be evaluated from the last time period back, rather than from the first time period forward. When used in this fashion, the first parameter to Dynamic will contain the recurrence, while the second (thru Nth) parameters contain the final values. For example, here 12 is the value in the last time period, and 10 is the value in the penultimate time period:
Dynamic( F(Self[Time+1]), 10, 12, reverse:true )
  • Some problems were identified when two more more Dynamic variables, using different dynamic indexes, form loops. It was found that these multi-dimensional dynamic computations were computing incorrect results when certain nodes were evaluated first, but correct results when nodes were evaluated in a different order. Those problems were fixed.
There is one oddity, which will remain. The dimensionality of results within dynamic loops with multiple different dynamic indexes may change depending one which variable within the loop is evaluated first. The results, however, should be equivalent regardless of which node is evaluated first. For example, if a variable X is in a dynamic loop that contains dynamic indexes Time and Project, it is possible that it will contain only the Time index if it is evaluated first, but if another variable in the loop is evaluated first, X's result could contain both the Time and Project indexes; however, in that case, it would be constant along the Project dimension with each Project-slice being the same as in the first case.
  • An inefficiency impacting Subscript along Time from within a Dynamic loop could result in computations that were quadratic complexity in the length of Time, whereas the fix in this build converts these to linear complexity. For very long Time indexes, this can make a huge difference in computation time.
  • When using Dynamic[T](...) with a non-Time dynamic index, there were some cases where it would start iterating over the wrong index (or indexes).
  • The EvaluationTime for some variables in dynamic loops was off. Time spent retrieving cached values was being counted as part of evaluation time. Impacts the Performance Profiler.

Crashing bugs

  • The cause of several intermittent and hard-to-reproduce crashes was uncovered and fixed. These were most common when viewing large result tables, such as when resizing result tables, scrolling through large tables or tables with large cells.
  • Fixed a crash that occurred when a table window was closed while a large paste operation was in progress.
  • Invert(A,I,J) crashed when A was all NaN. In other cases where NaNs were present, an internal type mismatch error would occur. Because this function is used by RegressionDist, these same would occur in similar cases with that function, as well as with the Decompose function.

Other Engine fixes

  • The value of the Sys_DefaultNumberFmt system variable was not being saved with the model when changed. This is the default number format used throughout the model when it hasn't been set explicitly for a variable.
  • When a User-Defined Function changes the value of a parameter, that change should not impact future calls to the same function since the parameter is passed-by-value. However, there were cases where the changed value was passed to subsequent calls when the function was array abstracted - most notably when the parameter itself was optional and not originally specified. This bug was fixed.
  • A speed improvement to nested lookups such as in A[J=Slice(B,i)] was implemented. This lookup occurs in constant time, so that if you repeat this for N values of i, the total time is proportional to N. However, there were some special cases of such nested lookups that were requiring more than constant time (e.g., linear time), so that when repeated over N lookups, quadratic time could be required. This was fixed so that these cases are requiring constant time as they should. For large iterations (e.g., 1M+ records), in cases where this occurred, a 1 to 2 order of magnitude speedup may result.

Fixes to miscellaneous functions

  • Array(I, J, c), when c is atomic, was not being indexed by J as it should.

GUI changes & fixes

  • When you first launch Analytica, the object window displays. The title, rather than the identifier, is now in focus.
  • When the Save a Copy In... option was used, the crash recovery log was being cleared, causing any unsaved changes up to that point to be lost when a crash occurred after the Save a Copy In... but before save of the actual model file.
  • When node alignment commands (like align left edges, make same size, etc) were used, the primary selected node was changing, where it should have stayed the same.
  • When the attribute panel at the bottom of the diagram is scrolled to the bottom of a long list or long definition, and you click on a new variable, it now resets the scroll bar to the top. Because it wasn't reseting the scroll position, you could get into a state where it appeared as if definitions were not showing (since they were scrolled out of view).

Installer, Licensing, and New Release Alerts

  • When installing in Vista, the User Access Control was causing the installer to run in Administrator mode, and thus install for the administrator account rather than the end-user account. This is fixed so that when you run the installer from a non-administrator account, it installs for that account and doesn't require a switch to administrator privileges.
  • Numerous other interactions with Vista's User Access Control features were ironed out for smoother and more reliable installs from Vista and Windows 7.
  • When you receive an alert that a new release is now available for download, after you download and install the new release, the alert is automatically removed without you having to check the Don't show me this again checkbox on the alert.
  • On some systems, usually Vista, with tight security settings, a Vista warning dialog would occur whenever the check for whether new releases are available was run (usually once every 48 hours). The warning required the user to confirm that it was okay for the operation to proceed. This warning should no longer appear.
  • The ReadMe.txt file is updated for 4.2.
  • The uninstaller file, Uninstall.exe, is now digitally signed. This also helps to avoid an unnecessary Vista warning dialog when uninstalling.


  • A new CD Player edition was created. The CD Player edition can be burned to a CD, along with a model, and run from the CD in such a manner that no install is required, and Analytica will make no changes to the file system or system registry. This is directed to the distribution of models to organizations that do not allow any installs or changes to registry or file system from "unapproved software".
  • Copy/Paste from external applications has previously been disallowed from the free Player. We've now enabled it, so free Player users can copy data from external applications into input variables and into edit tables.


  • Substantial additions to the Users Guide, describing 4.2 features, have occurred in this release.
  • When launching a model on the command line, e.g., Analytica.exe myModel.exe, the file name is now interpreted relative to the current directory (the directory you are in when you type this command in CMD.EXE). Previously the file name was interpreted relative to the initial CurrentModelDirectory(), which is usually [My Documents] (unless you've set the InitialDir registry setting to something different).

You are not allowed to post comments.