Когда в работе возникает проблема, когда значение, возвращаемое функцией SUM (), не обрабатывается как «нормальное» число при использовании значения, возвращенного вместе с функцией Round ().
Попробуйте этот MDX, например
WITH
MEMBER SomeNumber AS 0.595
SET SomeNumberSet AS
{[SomeNumber], [SomeNumber], [SomeNumber], [SomeNumber], [SomeNumber], [SomeNumber], [SomeNumber], [SomeNumber] }
MEMBER SomeNumberSum AS
Round(SUM([SomeNumberSet], [Measures].[SomeNumber]) / 8, 2)
SELECT [SomeNumberSum] ON 0
FROM [SomeCube]
Этот код возвращает 0,59, сумма наборов составляет 4,76, которые затем делятся на 8 = 0,595. Поскольку MDX использует округление банкиров, СЛЕДУЕТ округлить до 0,60.
Использование раунда (0,595) дает нам правильный результат.
Что еще более странно, так это то, что если мы в наборе используем SomeNumber только 6 раз или меньше, а при делении функции раунда с тем же множителем мы получим 0,6 (что правильно)
Кроме того, если я обертываю Sum () с помощью функции StrToValue (), она работает, даже если я использую более 5 SomeNumbers в наборе
Что происходит?!