Current Limitations
This document describes the current limitations of AFC as of the latest release mentioned in the release notes.
Spreadsheets
Excel
- Only the subset of Excel documented in this reference is guaranteed to be supported.
- Null values (empty cells) are not yet supported. In particular, an
AVERAGE
involving empty cells will return a different result than Excel. - In Excel, a formula like
(A1 = 0)
returns false whenA1
isFALSE
. In AFC it is true. In both AFC and Excel,(A1 + 0 = 0)
returns true. - In Excel,
SUM
ignores booleans. In AFC it does not. In both, numeric operators like+
treat booleans as numbers. - String comparisons don’t sort umlauts and such the way Excel does (see String Comparisons).
- The options flag “Precision as displayed” is not supported. AFC always uses the full precision of the configured numeric type internally and only rounds final outputs.
- The Excel .xls loader does not yet handle references to labels in formulas.
Ranges
- Range intersections are parsed but not evaluated correctly.
- Ranges specified using named cells as endpoints are not supported. Named ranges, however, are.
- Named range unions are not supported. They are ignored when the spreadsheet is loaded and their name will therefore not be known to AFC.
- Array expressions are not supported (such as
{=INDEX({1,2;3,4};0;2)}
).
Repeating Sections
AND
andOR
cannot be used as aggregators over repeating sections.- Functions like
NPV()
,MIRR()
, andIRR()
cannot be used over repeating sections.
MATCH
- The last argument (the match type) must be constant, and the second argument (the match range) cannot reference a repeating section.
- The range must be strictly ascending or descending for sorted searches to ensure results consistent with Excel.
INDEX
- The range argument cannot reference a repeating section.
- No 3-dimensional lookups.
- Does not return arrays (as in
=SUM(INDEX(A1:B2;2))
). - For 1-dimensional lookups, the index argument for the other direction must be either omitted, set to the constant value 0 (Excel accepts any expression returning 0), or set to an expression returning 1 (as in
=INDEX(HorizVector;0;A1)
). - Does not slice ranges into relative vectors for 1-dimensional lookups (as in
=INDEX(Data;0;3)
where this formula is in a row intersectingData
).
Numeric Types
Scaled Long
- Currently computes exponentiation and conversion from and to dates using the
double
type. - Scaled division currently swaps arguments on the stack a little too much.
BigDecimal
POWER()
and the^
operator with non-integer exponents are converted todouble
operations.IRR()
throwsIllegalArgumentException
when the function does not converge.MIRR()
is not supported because it needs fractional exponents.
Interfacing with Java
- There is no support for
null
yet (see also the note on empty cells). - When binding a
String
-valued output method to a date field in Excel, the resulting value is not formatted as a date, but as a number. This is because, internally, dates are treated as numbers. This is the same behaviour as that shown byCONCATENATE
and&
in Excel itself. - When binding a
String
-valued output method to a numeric field with a special cell format, that format is not respected. This is the same behaviour as that shown byCONCATENATE
and&
in Excel itself. - Aggregators spanning nested sections are not yet supported, except for the special case which is useful for
DSUM
et al..
Miscellaneous
- The interactive demo is still somewhat broken (because of missing info methods on the spreadsheet query interface).