7 апреля 2025

Выпуск обновления для FastCube .NET 2025.2

В этом обновлении мы сосредоточились на ускорении вычислений, улучшении совместимости с .NET 9 и упрощении понимания изменений.

 


 

Переход на инвариантную математику – до 2 раз быстрее!

Одним из самых значительных улучшений стало отказ от типа "вариант" в пользу инвариантной математики. Это изменение привело к существенному ускорению построения и пересчета куба, в некоторых случаях – более чем в 2 раза!

Кроме того, теперь куб работает корректно в различных локализациях, включая нестандартные (отличные от латиницы), что расширяет его применение для международных пользователей.

 


 

Разделение изменений по продуктам

Разделение изменений по продуктам


Теперь обновления FastCube .NET разделены на разные продукты (WinForms, Web, Mono и общий FastCube .NET). Это сделало процесс обновления более прозрачным – вы можете сразу понять, какие изменения затрагивают нужную версию.

 


 

Исправлена ошибка считывания потока из сжатого файла

Ранее в некоторых случаях происходила некорректная обработка сжатых файлов, из-за чего данные могли загружаться неправильно или вовсе не загружаться.

Теперь этот баг устранён, и механизм работы со сжатыми файлами полностью исправлен. Это означает:

  • Корректное чтение данных из архивных файлов.
  • Более стабильная работа при загрузке больших файлов.
  • Отсутствие ошибок в многопоточном режиме, что особенно важно для Web-приложений.

Если ваш проект активно использует сжатие данных, рекомендуем обновиться до версии 2025.2, чтобы избежать возможные проблемы.

 


 

Сигнатура файла для куба теперь неизменяемая (const вместо static)

Ранее сигнатура файла была объявлена как static, что позволяло менять её в ходе выполнения программы. В ряде случаев это могло привести к ошибкам, связанным с изменением структуры данных или даже повреждению файла.

В новой версии:

- Сигнатура теперь объявлена как const, что делает её неизменяемой на уровне кода.
- Гарантирована целостность структуры файла, независимо от изменений в коде программы.
- Повышена стабильность работы с файлами куба в разных средах, включая Web и Mono.

Это особенно важно для разработчиков, которые работают в многопользовательских и распределённых системах.

 


 

Совместимость с .NET 9

Совместимость с .NET 9


Одним из ключевых улучшений стало добавление поддержки .NET 9. Теперь FastCube .NET полностью совместим с последней версией платформы, что позволяет использовать новые возможности и улучшения, предложенные Microsoft. Это важное обновление для разработчиков, которые переходят на .NET 9 или планируют использовать его в своих проектах. 

Отдельно отметим, что поддержка новых версий позволяет обеспечить стабильность работы продукта и интеграцию с последними технологиями.

 


 

Обновление поддерживаемых версий .NET

Основной версией теперь считается .NET 8, что соответствует текущим стандартам для большинства корпоративных проектов. Тем не менее, сохранена поддержка .NET 6, которая представляет собой долгосрочную версию с расширенной поддержкой. 

Кроме того, как уже было упомянуто, добавлена поддержка .NET 9, что даёт вам гибкость при выборе платформы для работы с FastCube .NET, будь то стабильность (через .NET 6) или новейшие возможности и улучшения производительности (.NET 9).

 


 

Исправления и улучшения в демонстрационном примере

Исправления и улучшения в демонстрационном примере


В демонстрационном примере для формата boolean была исправлена ошибка, из-за которой корректность отображения данных была нарушена. Теперь данный формат работает правильно и не вызывает ошибок, что улучшает опыт пользователей, работающих с демонстрационными примерами.

В демонстрационном кубе "Sales by months" ранее возникали ситуации, когда заголовки отображались некорректно. Теперь эта ошибка устранена, и названия полей выводятся корректно, обеспечивая точность и удобство работы с данными.

 


 

Улучшение сериализации данных

Одним из важных улучшений является оптимизация процесса сериализация данных. Были добавлены новые методы и установлены свойства, благодаря чему значения по умолчанию теперь реже сериализуются. 

Снижение объема сериализуемых данных уменьшает нагрузку на систему при сохранении и загрузке информации. Кроме того, эти изменения способствует улучшению производительности, что будет особенно заметно при работе с большими наборами данных.

 


 

Список изменений


FastCube .NET WinForms

[Common]
- исправлена ошибка, при которой поток из сжатого файла считывался некорректно;
* сигнатура файла для куба теперь имеет модификатор const вместо static и не может быть изменена;


FastCube .NET Web

[Common]
- исправлена ошибка, при которой поток из сжатого файла считывался некорректно;
* сигнатура файла для куба теперь имеет модификатор const вместо static и не может быть изменена;


FastCube .NET Mono

[Common]
- исправлена ошибка, при которой поток из сжатого файла считывался некорректно;
* сигнатура файла для куба теперь имеет модификатор const вместо static и не может быть изменена;


FastCube .NET

[Common]
+ добавлена совместимость с .NET 9;
+ обновлены версии .NET, основной версией теперь считается .NET 8, а поддерживаемые целевые платформы включают .NET 6, .NET 8 и .NET 9;
* скрыта часть свойств от пользователя в редакторе WinForms;
* тип "вариант" был заменён на вариантную математику;
* улучшена сериализация, добавлены методы и установлены свойства, благодаря чему значения по умолчанию реже сериализуются;
- исправлено отображение названия поля в демонстрационном кубе "Sales by months";
- исправлена ошибка в демонстрационном примере для boolean format.

 


 

Другие критические изменения


Общие изменения для FastCube Web, FastCube WinForms и FastCube Mono

Устаревшие делегаты. Были заменены на совместимые, т.к. был убран тип Variant теперь вместо него используется боксинг через Object:

Нажмите сюда, чтобы развернуть

 

  • FastReport.Olap.Slice.Value2Delegate(System.Int32, System.Int32, FastReport.Olap.Utils.Variant, FastReport.Olap.Utils.Variant, System.Int32)
  • FastReport.Olap.Slice.ValueDelegate(System.Int32, System.Int32, FastReport.Olap.Utils.Variant, System.Int32)
  • FastReport.Olap.Slice.SliceChartDataHandler(FastReport.Olap.Slice.Slice, FastReport.Olap.Slice.ChartParams, System.String[], System.String[], FastReport.Olap.Utils.Variant[], System.Int32)

 


Устаревшие поля. Следующие поля были заменены на соответствующие свойства:

Нажмите сюда, чтобы развернуть

 

  • FastReport.Olap.Types.BoolValue -> public System.Boolean Value
  • FastReport.Olap.Types.ByteValue -> public System.Byte Value
  • FastReport.Olap.Types.DateTimeValue -> public System.DateTime Value
  • FastReport.Olap.Types.DecimalValue -> public System.Decimal Value
  • FastReport.Olap.Types.DoubleValue -> public System.Double Value
  • FastReport.Olap.Types.FloatValue -> public System.Single Value
  • FastReport.Olap.Types.IntValue -> public System.Int32 Value
  • FastReport.Olap.Types.LongValue -> public System.Int64 Value
  • FastReport.Olap.Types.SByteValue -> public System.SByte Value
  • FastReport.Olap.Types.ShortValue -> public System.Int16 Value
  • FastReport.Olap.Types.StringValue -> public System.String Value
  • FastReport.Olap.Types.TimeSpanValue -> public System.TimeSpan Value
  • FastReport.Olap.Types.UIntValue -> public System.UInt32 Value
  • FastReport.Olap.Types.ULongValue -> public System.UInt64 Value
  • FastReport.Olap.Types.UShortValue -> public System.UInt16 Value
  • FastReport.Olap.Slice.MeasureCell -> public FastReport.Olap.Utils.Variant Value

 


Устаревшие методы. Были заменены на совместимые методы, но вместо типа Variant теперь используется боксинг данных через Object что позволяет передавать не значения с копированием памяти а ссылку на объект.

Нажмите сюда, чтобы развернуть

 

  • FastReport.Olap.Types.BoolDTP -> public FastReport.Olap.Types.BoolValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.ByteDTP -> public FastReport.Olap.Types.ByteValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.CommonDataTypeProcessor``2<T, T2> -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.CommonDataTypeProcessor``2<T, T2> -> public T VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.DateTimeDTP -> public FastReport.Olap.Types.DateTimeValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.DecimalDTP -> public FastReport.Olap.Types.DecimalValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.DoubleDTP -> public FastReport.Olap.Types.DoubleValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.FloatDTP -> public FastReport.Olap.Types.FloatValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.IntDTP -> public FastReport.Olap.Types.IntValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.LongDTP -> public FastReport.Olap.Types.LongValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.Range -> public System.Boolean Match(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.Ranges -> public System.Boolean Match(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.SByteDTP -> public FastReport.Olap.Types.SByteValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.ShortDTP -> public FastReport.Olap.Types.ShortValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.StringDTP -> public FastReport.Olap.Types.StringValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.TimeSpanDTP -> public FastReport.Olap.Types.TimeSpanValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.UIntDTP -> public FastReport.Olap.Types.UIntValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.ULongDTP -> public FastReport.Olap.Types.ULongValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Types.UShortDTP -> public FastReport.Olap.Types.UShortValue VariantToValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Slice.AxisContainer -> public FastReport.Olap.Utils.Variant GetValue(System.Int32, System.Int32)
  • FastReport.Olap.Slice.MeasuresContainer -> public FastReport.Olap.Utils.Variant GetMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
  • FastReport.Olap.Slice.MeasuresContainer -> public FastReport.Olap.Utils.Variant GetSecondAdditionalTotalMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
  • FastReport.Olap.Slice.Slice -> public System.Object Calc(FastReport.Olap.Types.Expression, FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Slice.Slice -> public FastReport.Olap.Utils.Variant CalcFuncForSelectedArea(FastReport.Olap.Types.AggregateFunction, FastReport.Olap.Types.Selection)
  • FastReport.Olap.Slice.Slice -> public FastReport.Olap.Utils.Variant GetMeasureValue(System.Int32, System.Int32)
  • FastReport.Olap.Slice.SliceField -> public FastReport.Olap.Utils.Variant GetUniqueValue(System.Int32)
  • FastReport.Olap.Slice.SliceField -> public FastReport.Olap.Utils.Variant GetUniqueValueFromRecord(System.Int32)
  • FastReport.Olap.Slice.SliceField -> public System.Int32 GetUniqueValueIdAndVariantFromRecord(System.Int32, FastReport.Olap.Utils.Variant&)
  • FastReport.Olap.Slice.UniqueValuesFieldFilter -> public System.Void SetAllowedUniqueValueByValue(FastReport.Olap.Utils.Variant, System.Boolean)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValueByAppend(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 GetValueIdAtValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CommonUniqueValues -> public FastReport.Olap.Utils.Variant GetVariantByOrder(System.Int32)
  • FastReport.Olap.Cube.CommonUniqueValues -> public FastReport.Olap.Utils.Variant GetVariantByValueId(System.Int32)
  • FastReport.Olap.Cube.Cube -> public FastReport.Olap.Utils.Variant GetSourceValue(System.Int32, System.Int32)
  • FastReport.Olap.Cube.Cube -> public FastReport.Olap.Utils.Variant GetSourceValue(System.Int32, FastReport.Olap.Cube.CubeField)
  • FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, System.Int32, FastReport.Olap.Utils.Variant&)
  • FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant&)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(System.Int32, FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(System.Int32, FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(FastReport.Olap.Cube.CubeField, FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.DatePartUniqueValues -> public System.DateTime GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.DayOfWeekPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.DayOfYearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.DayPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.HalfYearPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.HourPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.MillisecondPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.MinutePartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.MonthPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.QuarterPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.SecondPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.TimePartUniqueValues -> public System.TimeSpan GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValueByAppend(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public T2 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 GetValueIdAtValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public FastReport.Olap.Utils.Variant GetVariantByOrder(System.Int32)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public FastReport.Olap.Utils.Variant GetVariantByValueId(System.Int32)
  • FastReport.Olap.Cube.WeekNumberPartUniqueValues -> public System.Byte GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.YearMonthPartUniqueValues -> public System.Int32 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Cube.YearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetTotalValueForDims(System.Int32, System.String)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetValue(System.Int32)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColOffsetValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColRowOffsetValue(System.Int32, System.Int32)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetColRowOffsetWithLevelValue(System.Int32, System.Int32, System.Int32, System.Int32)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetTotalValueForDims(System.Int32, System.String)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetValue(System.Int32)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetRowOffsetValue(FastReport.Olap.Utils.Variant)
  • FastReport.Olap.Code.Measure -> public FastReport.Olap.Utils.Variant GetTotalValueForDims(System.String)
  • FastReport.Olap.Code.Measures -> public FastReport.Olap.Utils.Variant GetDetailValue(System.Int32, System.String)

 


Устаревшие свойства. Следующие свойства были заменены на использование боксинга вместо типа Variant:

Нажмите сюда, чтобы развернуть

 

  • FastReport.Olap.Types.BoolValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.ByteValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.DateTimeValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.DecimalValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.DoubleValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.FloatValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.IntValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.LongValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.Range -> FastReport.Olap.Utils.Variant HighRange { public get; public set; }
  • FastReport.Olap.Types.Range -> FastReport.Olap.Utils.Variant LowRange { public get; public set; }
  • FastReport.Olap.Types.SByteValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.ShortValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.StringValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.TimeSpanValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.UIntValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.ULongValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Types.UShortValue -> FastReport.Olap.Utils.Variant Variant { public get; public set; }
  • FastReport.Olap.Slice.CalculateMeasureEventArgs -> FastReport.Olap.Utils.Variant Data { public get; public set; }
  • FastReport.Olap.Slice.CalculateValueEventArgs -> FastReport.Olap.Utils.Variant Value { public get; public set; }
  • FastReport.Olap.Slice.SliceField -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
  • FastReport.Olap.Code.ContainerFieldItem -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
  • FastReport.Olap.Code.Dimension -> FastReport.Olap.Utils.Variant CurrentValue { public get; }
  • FastReport.Olap.Code.Dimensions -> FastReport.Olap.Utils.Variant DetailValue { public get; }
  • FastReport.Olap.Code.Measure -> FastReport.Olap.Utils.Variant CurrentValue { public get; }

 


Устаревшие типы. Следующие типы устарели и были целиком удалены, т.к. теперь они не используются.

  • FastReport.Olap.Utils.Variant
  • FastReport.Olap.Types.IVariantable
  • FastReport.Olap.Types.UnAssigned

 


Новые делегаты заменили старые, которые использовали тип Variant.

  • FastReport.Olap.Slice.Value2Delegate(System.Int32, System.Int32, System.Object, System.Object, System.Int32)
  • FastReport.Olap.Slice.ValueDelegate(System.Int32, System.Int32, System.Object, System.Int32)
  • FastReport.Olap.Slice.SliceChartDataHandler(FastReport.Olap.Slice.Slice, FastReport.Olap.Slice.ChartParams, System.String[], System.String[], System.Object[], System.Int32)

 


Новое поле заменило существующие, теперь вместо типа Variant используется боксинг через Object.

  • FastReport.Olap.Slice.MeasureCell -> public System.Object Value

 


Новые методы заменили старые, где использовался тип Variant. Теперь вместо него используется боксинг и передача данных идёт по ссылке, а не по значению, что позволило значительно вырасти скорости.

Нажмите сюда, чтобы развернуть

 

  • FastReport.Olap.Types.Range -> public System.Boolean Match(System.Object)
  • FastReport.Olap.Types.Ranges -> public System.Boolean Match(System.Object)
  • FastReport.Olap.Slice.AxisContainer -> public System.Object GetValue(System.Int32, System.Int32)
  • FastReport.Olap.Slice.MeasuresContainer -> public System.Object GetMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
  • FastReport.Olap.Slice.MeasuresContainer -> public System.Object GetSecondAdditionalTotalMeasureValue(System.Int32, System.Int32, System.Int32, System.Int32, System.Int32, System.Int32)
  • FastReport.Olap.Slice.Slice -> public System.Object Calc(FastReport.Olap.Types.Expression, System.Object)
  • FastReport.Olap.Slice.Slice -> public System.Object CalcFuncForSelectedArea(FastReport.Olap.Types.AggregateFunction, FastReport.Olap.Types.Selection)
  • FastReport.Olap.Slice.Slice -> public System.Object GetMeasureValue(System.Int32, System.Int32)
  • FastReport.Olap.Slice.SliceField -> public System.Object GetUniqueValue(System.Int32)
  • FastReport.Olap.Slice.SliceField -> public System.Object GetUniqueValueFromRecord(System.Int32)
  • FastReport.Olap.Slice.SliceField -> public System.Int32 GetUniqueValueIdAndVariantFromRecord(System.Int32, System.Object&)
  • FastReport.Olap.Slice.UniqueValuesFieldFilter -> public System.Void SetAllowedUniqueValueByValue(System.Object, System.Boolean)
  • FastReport.Olap.Cube.BaseDataReaderDataSet -> public System.Object GetValue(System.Int32)
  • FastReport.Olap.Cube.BaseDataSet -> public System.Object GetValue(System.Int32)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValue(System.Object)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 AddNewVariantValueFromParentValueByAppend(System.Object)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Int32 GetValueIdAtValue(System.Object)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Object GetVariantByOrder(System.Int32)
  • FastReport.Olap.Cube.CommonUniqueValues -> public System.Object GetVariantByValueId(System.Int32)
  • FastReport.Olap.Cube.Cube -> public System.Object GetSourceValue(System.Int32, System.Int32)
  • FastReport.Olap.Cube.Cube -> public System.Object GetSourceValue(System.Int32, FastReport.Olap.Cube.CubeField)
  • FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, System.Int32, System.Object&)
  • FastReport.Olap.Cube.Cube -> public System.Int32 GetSourceValueIdAndVariant(System.Int32, FastReport.Olap.Cube.CubeField, System.Object&)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(System.Int32, System.Object)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean AddUniqueValue(FastReport.Olap.Cube.CubeField, System.Object)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(System.Int32, System.Object)
  • FastReport.Olap.Cube.CubeManualLoadEventArgs -> public System.Boolean SetFieldValue(FastReport.Olap.Cube.CubeField, System.Object)
  • FastReport.Olap.Cube.DatePartUniqueValues -> public System.DateTime GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.DayOfWeekPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.DayOfYearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.DayPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.HalfYearPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.HourPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.IBaseDataSet -> public System.Object GetValue(System.Int32)
  • FastReport.Olap.Cube.MillisecondPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.MinutePartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.MonthPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.QuarterPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.SecondPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.TimePartUniqueValues -> public System.TimeSpan GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 GetValueIdAtValue(System.Object)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValue(System.Object)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Int32 AddNewVariantValueFromParentValueByAppend(System.Object)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public T2 GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Object GetVariantByOrder(System.Int32)
  • FastReport.Olap.Cube.UniqueValues``2<T, T2> -> public System.Object GetVariantByValueId(System.Int32)
  • FastReport.Olap.Cube.WeekNumberPartUniqueValues -> public System.Byte GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.YearMonthPartUniqueValues -> public System.Int32 GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Cube.YearPartUniqueValues -> public System.Int16 GetChildValueFromParentValue(System.Object)
  • FastReport.Olap.Code.Measure -> public System.Object GetColOffsetTotalValueForDims(System.Int32, System.String)
  • FastReport.Olap.Code.Measure -> public System.Object GetColOffsetValue(System.Int32)
  • FastReport.Olap.Code.Measure -> public System.Object GetColOffsetValue(System.Object)
  • FastReport.Olap.Code.Measure -> public System.Object GetColRowOffsetValue(System.Int32, System.Int32)
  • FastReport.Olap.Code.Measure -> public System.Object GetColRowOffsetWithLevelValue(System.Int32, System.Int32, System.Int32, System.Int32)
  • FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetTotalValueForDims(System.Int32, System.String)
  • FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetValue(System.Int32)
  • FastReport.Olap.Code.Measure -> public System.Object GetRowOffsetValue(System.Object)
  • FastReport.Olap.Code.Measure -> public System.Object GetTotalValueForDims(System.String)
  • FastReport.Olap.Code.Measures -> public System.Object GetDetailValue(System.Int32, System.String)

 


Новые свойства заменили или дополнили устаревшие:

Нажмите сюда, чтобы развернуть

 

  • FastReport.Olap.Types.BoolValue -> System.Boolean Value { public get; public set; }
  • FastReport.Olap.Types.ByteValue -> System.Byte Value { public get; public set; }
  • FastReport.Olap.Types.DateTimeValue -> System.DateTime Value { public get; public set; }
  • FastReport.Olap.Types.DecimalValue -> System.Decimal Value { public get; public set; }
  • FastReport.Olap.Types.DoubleValue -> System.Double Value { public get; public set; }
  • FastReport.Olap.Types.FloatValue -> System.Single Value { public get; public set; }
  • FastReport.Olap.Types.IntValue -> System.Int32 Value { public get; public set; }
  • FastReport.Olap.Types.LongValue -> System.Int64 Value { public get; public set; }
  • FastReport.Olap.Types.Range -> System.Object HighRange { public get; public set; }
  • FastReport.Olap.Types.Range -> System.Object LowRange { public get; public set; }
  • FastReport.Olap.Types.SByteValue -> System.SByte Value { public get; public set; }
  • FastReport.Olap.Types.ShortValue -> System.Int16 Value { public get; public set; }
  • FastReport.Olap.Types.StringValue -> System.String Value { public get; public set; }
  • FastReport.Olap.Types.TimeSpanValue -> System.TimeSpan Value { public get; public set; }
  • FastReport.Olap.Types.UIntValue -> System.UInt32 Value { public get; public set; }
  • FastReport.Olap.Types.ULongValue -> System.UInt64 Value { public get; public set; }
  • FastReport.Olap.Types.UShortValue -> System.UInt16 Value { public get; public set; }
  • FastReport.Olap.Slice.CalculateMeasureEventArgs -> System.Object Data { public get; public set; }
  • FastReport.Olap.Slice.CalculateValueEventArgs -> System.Object Value { public get; public set; }
  • FastReport.Olap.Slice.SliceField -> System.Object CurrentValue { public get; }
  • FastReport.Olap.Format.CustomFormat -> System.String DefaultFormatValue { public get; public set; }
  • FastReport.Olap.Code.ContainerFieldItem -> System.Object CurrentValue { public get; }
  • FastReport.Olap.Code.Dimension -> System.Object CurrentValue { public get; }
  • FastReport.Olap.Code.Dimensions -> System.Object DetailValue { public get; }
  • FastReport.Olap.Code.Measure -> System.Object CurrentValue { public get; }

 


Новые типы:

  • FastReport.Olap.Utils.VMath - заменил тип Variant, теперь математика происходит через инвариантные вычисления с помощью боксинга и преобразование типа.
  • FastReport.Olap.Types.IValueStruct``1<T> - интерфейс для реализации собственного типа боксинга.
  • FastReport.Olap.Types.SimpleCompareAction - перечисление для типов действий инвариантной математики.

 

Изменения для FastCube WinForms и FastCube Mono

Устаревшие поле было заменено на технически совместимое.

  • FastReport.Olap.Controls.SizingInfo -> public FastReport.Olap.Utils.Variant Data


Новое поле:

  • FastReport.Olap.Controls.SizingInfo -> public System.Int32 Data

 

17 апреля 2025

Импорт документов из Word уже доступен в FastReport .NET Ultimate

С релизом 2025.2 подписка на Ultimate .NET стала еще выгодней! Все владельцы лицензии получили дополнительный плагин для импорта документов из Microsoft Word.
14 апреля 2025

Скидка 50% на продление лицензии FastReport Single — только до 30 апреля!

Отличные новости для владельцев FastReport VCL и FastReport .NET лицензии Single! Только до 30 апреля можно продлить свою лицензию с внушительной скидкой 50%.
8 апреля 2025

Обновление .NET продуктов до версии 2025.2

В версии 2025.2 появились: .NET 9, библиотека FastScript .NET, плагин импорта из Word, коннектор к Apache Ignite, улучшения дизайнера и экспортов, новые функции в WebReport.