News

May 15, 2025

Fast Reports Wins ComponentSource Award!

We are excited to be once again among the Top-50 Publisher by ComponentSource! 
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 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   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 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 02, 2025

More flexibility with the new "Business" license type

Since April 1, 2025, there will be a licensing option available for FastReport .NET and FastReport VCL. 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. What else is included in the new license option? Personal manager Priority support Build server Access to knowledge base and products webinars Early access to special offers Personal discount and preferential terms for the subscription renewal Access for up to 12 developers at one geographic address Available in 32 languages Documentation in 2 languages: English and German   Choose the one that suits you the best Full price list
March 25, 2025

Release of a library for executing scripts in C#

We are pleased to announce the release of a cross-platform library for executing complex scripts in C# called FastScript .NET. Libraries for executing complex scripts provide the ability to dynamically generate and execute code, which can be useful in various scenarios such as developing plugins, creating user scripts, and so on. Working in Constrained Environments. FastScript .NET is built on the classic "lexer-parser-interpreter" model. It does not use compilation to machine code, allowing it to operate in environments where code generation is restricted (NativeAOT, iOS, WASM). Its performance is comparable to other solutions that use interpretation (such as Lua and JavaScript), although it is slower than compiled C# code. C# as a Scripting Language. FastScript .NET has full integration with the .NET platform and allows the use of all libraries, frameworks, and APIs. A unified code base in C# for scripts eliminates the need to maintain code in multiple languages. Compactness. The small size of the library (just 300 KB) makes it convenient to use even in resource-constrained projects without overloading the system. Since version 2025.1.21 FastScript .NET is part of the WinForms, WPF, WEB, Mono and Avalonia packages. Our library is also part of Ultimate.NET solutions with all source codes. Learn more
March 18, 2025

Upgrade your Team or Site license with a 50% discount!

We are gifting a 50% discount on FastReport .NET and VCL Team and Site licenses to users with an expired subscription. Until March 31 get access to new features, an improved designer, and support for half the price, even if your grace period is over! We release updates twice a year, so an active subscription guarantees support for the latest versions of environments, reports with constantly improved functionality and interface, access to technical support, and much more. Contact us to replace your outdated license with a new one!
February 12, 2025

Delphi turns thirty!

To celebrate the occasion, we invite you to get the FastReport VCL Ultimate edition with a notable discount of 30%. It's a great opportunity to get a great deal on the most extensive type of reporting tool with a source code, cross-platform tools, and OLAP features! Don't miss your chance on February 13 and 14 to save from $390 and provide your application with: Source code Report designer with dialog forms Client-server components for VCL and Lazarus Report creation for VCL, FMX and Lazarus Converters from Quick Report, Report Builder, Rave Reports Support for exporting templates to other data formats Multidimensional analysis system FastCube for VCL, Lazarus and FMX Flexible and open architecture with support for custom report objects Storing finished documents in cloud storage Google Drive, Next Cloud, OneDrive, Amazon S3, Outlook, Gmail FastScript and FastQueryBuilder included   Freeze your discount and pay later! The offer is valid till 11.59 pm of February 14. If for some reason you can't make payment until this time, contact us and freeze your discount for 6 days to pay later!  
December 19, 2024

Recap of 2024 and plans for 2025

Friends, this year has been eventful and productive for us!     📌 Key achievements Release of new products: we launched FastReport Avalonia – a tool for cross-platform work on reports for Windows, MacOS, and Linux. Changes in approach to product formation: we split the product content in a way where you do not have to buy unnecessary functionality.     What changed for our products? For Delphi and Lazarus: Improved work with hierarchical data in FastReport for Delphi and Lazarus by adding the TfrTreeView component. Additional capabilities for working with maps were added by supporting the GeoJSON and TopoJSON formats. Improved digital signatures, added infinite table width, expanded barcode capabilities, and improved display accuracy and compatibility of PDF, HTML5, SVG, DOCX, and XLSX export filters. In the latest version, we have enhanced the capabilities of working with reports in complex scenarios and provided a higher level of integration with modern development environments, including RAD Studio 12.2. Next year, we plan to add new components, support for RFID tag EPC in ZPL, new transports, improved export filters, and much more.     For .NET: We have abandoned the legacy .NET Standard 2.0 - 3.1 and .NET 5 compatibility layer in our libraries. Now the minimum supported .NET version is .NET 6, and the minimum supported framework is .NET Framework 4.6.2. With the latest version of the FastReport .NET library, FastReport Business Graphics .NET and FastCube .NET now support .NET 9. To do this, we abandoned binary serialization (BinaryFormatter). This year, we relaunched FastCube .NET, a library for working with OLAP cubes and operational analysis of big data. Now FastCube.Core.Web supports  Linux and MacOS. It opens up the possibility of developing web applications with OLAP functionality on any server. One of the key changes in the FastCube .NET 2025.1 release was the complete removal of the dependency on the System.Drawing.Common library in the FastCube.Core module. This was done to increase the library compatibility with various platforms and improve performance. The FastReport Online Designer visual template designer has also changed. In 2024, a new "SparkGraphic" object was added, it became possible to create guidelines on the page and a new component menu was implemented. When editing the report code, the Intellisense functionality was added, which provides automatic code completion and syntax hints, which allows users to write code faster and more accurately directly in the web interface. In 2025, we plan to add a new plugin allowing you to convert user reports from MS Word to .frx. In addition, a connection to Google Sheets will be implemented in the future. FastScript .NET for executing scripts will be released in the first half of the year. The new library will contain a compilation technology that allows you to convert intermediate code into machine code for a specific platform (Native AOT). We are striving to create a complete ecosystem of products for different platforms, so next year we will also work on their integration with each other.     For service solutions: In FastReport Cloud, we improved the automatic task execution system, added printing from the browser, and developed a font storage, finalized the SDK. Improved the usability and speed of the API Added new API methods for working with the cloud, allowing you to perform familiar operations faster and more conveniently: bulk copying, deleting, and moving files; a new upload method that allows you to upload large files and use fewer resources; methods for obtaining the current user's rights to files, groups, tasks, and data sources; added the ability to receive and edit report parameters without opening the report itself for editing. Made the user panel more convenient Improved work with the Online Designer: added a Richtext preview, and style templates for ChartObject. Gave the ability to edit the user's avatar, made a new trash bin for deleting files, improved the Tasks page; finalized data sources, giving the ability to use stored procedures and add custom tables from SQL. In 2025, we plan to release a new product and add parameter transfer to StaticPreview UI.     We thank you for trusting us in 2024. Let's move on and create the future together! Happy Holidays!  
December 18, 2024

Last chance to buy at a discount in 2024

From December 18 to December 31, we are offering you to purchase reporting libraries for .NET and Delphi at a 25% discount. This is a great opportunity to make sure that in 2025 your business will save resources on creating documents and reports. The offer does not apply to renewals and upgrades. Only new purchases are eligible.
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.