April 07, 2025

Release the new version of FastCube .NET 2025.2

In this update, we focused on speeding up calculations, improving compatibility with .NET 9, and making changes easier to understand.

 


 

Transition to invariant mathematics – up to 2 times faster!

One of the most significant improvements was the abandonment of the "variant" type in favor of invariant mathematics. This change led to a significant acceleration of the make and recalculation of the cube, in some cases - more than 2 times!

In addition, the cube now works correctly in various localizations, including non-standard ones (other than Latin), which expands its application for international users.

 


 

Splitting changes by product

Splitting changes by product


FastCube .NET updates are now split into different products (WinForms, Web, Mono, and general FastCube .NET). This makes the update process more transparent – you can immediately see what changes affect the version you need.

 


 

Fixed error reading stream from compressed file

Previously, in some cases, compressed files were not processed correctly, which could cause data to load incorrectly or not load at all.

Now this bug is fixed and the mechanism for working with compressed files is completely fixed. This means:

  • Correct reading of data from archive files.
  • More stable performance when loading large files.
  • No errors in multithreaded mode, which is especially important for Web applications.

If your project makes heavy use of data compression, we recommend upgrading to version 2025.2 to avoid potential issues.

 


 

The file signature for the cube is now immutable (const instead of static)

Previously, the file signature was declared as static, which allowed it to be changed during program execution. In some cases, this could lead to errors related to data structure changes or even file corruption.

New version:

  • The signature is now declared as const, making it immutable at the code level.
  • The integrity of the file structure is guaranteed, regardless of changes in the program code.
  • Improved stability of working with cube files in different environments, including Web and Mono.

This is especially important for developers who work in multi-user and distributed systems.

 


 

Compatibility with .NET 9

Compatibility with .NET 9

 

One of the key improvements was the addition of .NET 9 support. FastCube .NET is now fully compatible with the latest version of the platform, allowing you to take advantage of new features and improvements offered by Microsoft. This is an important update for developers who are port to .NET 9 or planning to use it in their projects.

We would like to point out that support for new versions ensures stable operation of the product and integration with the latest technologies.

 


 

Updating supported versions of .NET

The main version is now .NET 8, which is the current standard for most enterprise projects. However, support for .NET 6 is retained, which is a long-term version with extended support.

Additionally, as mentioned, .NET 9 support has been added, giving you flexibility in choosing the platform to work with FastCube .NET, whether it's stability (via .NET 6) or the latest features and performance improvements (.NET 9).

 


 

Fixes and improvements in the demo example

Fixes and improvements in the demo example


In the demo for the boolean format, a bug was fixed that caused the data to be displayed incorrectly. Now this format works correctly and does not cause errors, which improves the experience of users working with demo examples.

In the "Sales by months" demo cube, there were previously situations where the headers were displayed incorrectly. Now this error has been fixed, and the field names are displayed correctly, ensuring accuracy and ease of working with data.

 


 

Improving data serialization

One of the important improvements is the optimization of the data serialization process. New methods have been added and properties have been set, due to which default values are now serialized less frequently.

Reducing the amount of serialized data reduces the load on the system when saving and loading information. In addition, these changes contribute to improved performance, which will be especially noticeable when working with large data sets.

 


 

List of changes


FastCube .NET WinForms

[Common]
- fixed a bug where the stream from a compressed file was read incorrectly;
* the file signature for the cube now has a const modifier instead of static and cannot be changed;


FastCube .NET Web

[Common]
- fixed a bug where the stream from a compressed file was read incorrectly;
* the file signature for the cube now has a const modifier instead of static and cannot be changed;


FastCube .NET Mono

[Common]
- fixed a bug where the stream from a compressed file was read incorrectly;
* the file signature for the cube now has a const modifier instead of static and cannot be changed;


FastCube .NET

[Common]
+ added compatibility with .NET 9;
+ .NET versions have been updated, the main version is now .NET 8, and supported target platforms include .NET 6, .NET 8, and .NET 9;
* some properties are hidden from the user in the WinForms editor;
* the "variant" type was replaced by variant mathematics;
* improved serialization, added methods and set properties, due to which default values are serialized less often;
- corrected display of the field name in the "Sales by months" demo cube;
- fixed bug in demo example for boolean format.

 


 

Other critical changes


General changes for FastCube Web, FastCube WinForms and FastCube Mono

Deprecated delegates. They were replaced with compatible ones, because the Variant type was removed and now boxing via Object is used instead:

Click here to expand

 

  • 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)

 


Deprecated fields. The following fields have been replaced with the corresponding properties:

Click here to expand

 

  • 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

 


Deprecated methods. Replaced with compatible methods, but instead of the Variant type, data boxing is now used via Object, which allows passing not values with memory copying, but a reference to an object.

Click here to expand

 

  • 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)

 


Deprecated properties. The following properties have been replaced by using boxing instead of the Variant type:

Click here to expand

 

  • 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; }

 


Deprecated Types. The following types are deprecated and have been removed entirely because they are no longer used.

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

 


The new delegates replace the old ones, which used the Variant type.

  • 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)

 


The new field replaces the existing ones, now boxing via Object is used instead of the Variant type.

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

 


The new methods replaced the old ones, which used the Variant type. Now, boxing is used instead, and data is transferred by reference, not by value, which has significantly increased the speed.

Click here to expand

 

  • 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)

 


New properties have replaced or expand the deprecated ones:

Click here to expand

 

  • 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; }

 


New types:

  • FastReport.Olap.Utils.VMath - replaced the Variant type, now mathematics occurs through invariant calculations using boxing and type conversion.
  • FastReport.Olap.Types.IValueStruct``1<T> - interface for implementing own boxing type.
  • FastReport.Olap.Types.SimpleCompareAction - enumeration for types of invariant mathematics actions.

 

Changes for FastCube WinForms and FastCube Mono

The deprecated field has been replaced with a technically compatible one.

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


New field:

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

 

April 08, 2025

Updating .NET products to version 2025.2

In version 2025.2 appeared: .NET 9, the FastScript library.NET, an import plugin from Word, a connector to Apache Ignite, improvements to the designer and exports, new features in WebReport.
April 07, 2025

Release of FastReport Business Graphics .NET 2025.2

If you are planning to port to .NET 9 or are already using it in your projects, you can be sure that our components are ready to work without any additional modifications!
April 02, 2025

More flexibility with the new "Business" license type

The "Business" license is designed for teams of developers from 5 to 12 people, which is a perfect fit when the "Team" license is too small and the "Site" is excessive.
Fast Reports
  • 800-985-8986 (English, US)
  • +31 97 01025-8466 (English, EU)
  • +49 30 56837-3928 (German, DE)
  • +55 19 98147-8148 (Portuguese, BR)
  • info@fast-report.com
  • 66 Canal Center Plaza, Ste 505, Alexandria, VA 22314

© 1998-2025 Fast Reports Inc.