Articles in this section

What Are the Differences Between Crystal Reports and Bold Reports?

Published:
Updated:

Converting Crystal Reports (.rpt) files to RDL (Report Definition Language) format can be challenging due to differences in report architecture, rendering engines, and feature implementations. To simplify migration, Bold Reports provides a dedicated Crystal Reports to SSRS/RDL Converter Utility that automates the conversion of Crystal Reports (.rpt) files into RDL reports compatible with Bold Reports and SQL Server Reporting Services (SSRS). The utility supports both single-file and bulk conversions while preserving supported report elements such as layouts, data connections, parameters, charts, formulas, and report structure wherever possible.

The migration process typically includes:

  1. Converting Crystal Reports (.rpt) files to RDL format using the Crystal Reports to SSRS Converter Utility.
  2. Reviewing and validating converted report elements, datasets, parameters, expressions, and formatting.
  3. Adjusting report layouts and unsupported features, if required, to align with the Bold Reports platform.
  4. Publishing and testing the converted RDL reports in Bold Reports.

This article outlines the key differences between Crystal Reports and Bold Reports to help you better understand the migration process and platform capabilities.


Key Differences Between Crystal Reports and Bold Reports

Fundamental Architecture

Aspect Crystal Reports Bold Reports
Design Interface Section-based (Header, Footer, Detail) Tablix-based (Tables, Matrices, Lists)
Data Handling Direct connection to various data sources Uses datasets via SQL queries/stored procedures
Formulas/Expressions Proprietary Crystal syntax Uses VB.NET expressions (=IIF(), =SUM(), etc.)
Sub-reports Commonly used for modular reports Less efficient; use nested datasets and data regions instead
Export Options Multiple custom export formats Focuses on Microsoft stack compatibility

String Functions

Function Crystal Reports Bold Reports
Concatenate “FirstName” & " " & “LastName” Fields!FirstName.Value & " " & Fields!LastName.Value
Substring Mid({Field}, 2, 5) Mid(Fields!Field.Value, 2, 5)
Left Left({Field}, 4) Left(Fields!Field.Value, 4)
Right Right({Field}, 4) Right(Fields!Field.Value, 4)
Length Len({Field}) Len(Fields!Field.Value)
Replace Replace({Field}, “old”, “new”) Replace(Fields!Field.Value, “old”, “new”)
Uppercase UCase({Field}) UCase(Fields!Field.Value)
Lowercase LCase({Field}) LCase(Fields!Field.Value)
Trim Trim({Field}) Trim(Fields!Field.Value)
Proper Case ProperCase (string) StrConv(Fields!YourField.Value, vbProperCase)
Reverse String StrReverse(string) StrReverse(Fields!YourField.Value)
Is Numeric IsNumeric (string) IsNumeric(Fields!YourField.Value)
String Compare StrCmp(“string1”, “string2”) StrComp(“string1”, “string2”)
Number to String ToText(number, decimals) FormatNumber(Fields!number.Value, “N2”)
String to Number ToNumber(string) CInt(Fields!string.Value)
String to Date ToDate(string) CDate(Fields!string.Value)
Finds Position Instr(string, substring) InStr(Fields!string.Value, “substring”)
Join Join (list of sub strings) Join([List of SubStrings], “,”)
Split Split (inputString) Split(“String”, “,”)

Date and Time Functions

Function Crystal Reports Bold Reports
Current Date CurrentDate Today()
Current DateTime CurrentDateTime Now()
Date Part (Year) Year({DateField}) Year(Fields!DateField.Value)
Date Part (Month) Month({DateField}) Month(Fields!DateField.Value)
Date Part (Day) Day({DateField}) Day(Fields!DateField.Value)
Add Days DateAdd(“d”, 5, {DateField}) DateAdd(“d”, 5, Fields!DateField.Value)
Format Date ToText({DateField}, “MM/dd/yyyy”) Format(Fields!DateField.Value, “MM/dd/yyyy”)
Time Only Time({DateTimeField}) Format(Fields!DateField.Value, “hh:mm:ss tt”)
Print Date PrintDate Globals!ExecutionTime.ToShortDateString()
Print Time PrintTime Globals!ExecutionTime.ToShortTimeString()
Difference b/w dates DateDiff(interval, date1, date2) DateDiff(“d”, Fields!date1.Value, Fields!date2.Value)
WeekDay WeekDay (date) Weekday(Fields!YourDate.Value)
DayOfWeek DayOfWeek (date) Weekday(Fields!YourDate.Value)
Month Name MonthName ({month (from 1 - 12)}) MonthName(Month(Fields!YourDate.Value))
Week Day Name WeekdayName (weekday (as number)) WeekdayName(Weekday(Fields!YourDate.Value))
IsDate IsDate (string / number) IsDate(Fields!YourField.Value)

Mathematical Functions

Function Crystal Reports Bold Reports
Absolute Abs({Field}) Abs(Fields!Field.Value)
Round Round({Field}, 2) Round(Fields!Field.Value, 2)
Ceiling Ceiling({Field}) Ceiling(Fields!Field.Value)
Floor Floor({Field}) Floor(Fields!Field.Value)
Remainder Remainder({Field1}, {Field2}) Fields!Field1.Value Mod Fields!Field2.Value
Round down to nearest integer Int (number) Int(Fields!number.Value)
Round Up RoundUp (number) Ceiling(Fields!number.Value)
Truncate Truncate (number) Fix(Fields!number.Value)
MRound MRound (number, multiple) Round(Fields!YourField.Value / multiple, 0) * multiple
Fix Fix (number) Fix(Fields!number.Value)
Sign (+ / 0 / -) Sgn (number) Sign(Fields!number.Value)
Sin Sin (number) Sin(Fields!number.Value)
Cos Cos (number) Cos(Fields!number.Value)
Tan Tan (number) Tan(Fields!number.Value)
Atn Atn (number) Atan (number)
Pi pi Math.PI
Square Root Sqr (number) Sqrt(Fields!number.Value)
Exponentiation Exp (number) Exp(Fields!number.Value)
Natural logarithm Log (number) Log(Fields!number.Value)

Aggregate and Logical Functions

Function Crystal Reports Bold Reports
If / Else If {Field} > 10 Then “High” Else “Low” IIF(Fields!Field.Value > 10, “High”, “Low”)
Nested If If x > 10 Then “A” Else If x > 5 Then “B” Else “C” Switch(Fields!x.Value > 10, “A”, Fields!x.Value > 5, “B”, True, “C”)
Null Handling If IsNull({Field}) Then 0 Else {Field} IIF(IsNothing(Fields!Field.Value), 0, Fields!Field.Value)
Sum Sum({Field}) Sum(Fields!Field.Value)
Average Average({Field}) Avg(Fields!Field.Value)
Minimum Minimum({Field}) Min(Fields!Field.Value)
Maximum Maximum({Field}) Max(Fields!Field.Value)
Count Count({Field}) Count(Fields!Field.Value)
Standard Deviation StdDev({fields}) StDev(Fields!YourField.Value)
Population Standard Deviation PopulationStdDev({fields}) StDevP(Fields!YourField.Value)
Variance Variance({fields}) Var(Fields!YourField.Value)
Population Variance PopulationVariance({fields}) VarP(Fields!YourField.Value)
Distinct Count DistinctCount({fields}) CountDistinct(Fields!YourField.Value)

Percentage and Advanced Functions

Function Crystal Reports Bold Reports
Percentage of Sum PercentOfSum ({field1}, {field2}) Fields!field1.Value / Sum(Fields!field2.Value)
Percentage of Average PercentOfAverage ({field1}, {field2}) Fields!field1.Value / Avg(Fields!field2.Value)
Percentage of Minimum PercentOfMinimum ({field1}, {field2}) Fields!field1.Value / Min(Fields!field2.Value)
Percentage of Maximum PercentOfMaximum ({field1}, {field2}) Fields!field1.Value / Max(Fields!field2.Value)
Percentage of Count PercentOfCount ({field1}, {field2}) Fields!field1.Value / Count(Fields!field2.Value)
Percentage of Distinct Count PercentOfDistinctCount ({field1}, {field2}) Fields!field1.Value / CountDistinct(Fields!field2.Value)

Global and User-Related Functions

Function Crystal Reports Bold Reports
Page Number PageNumber Globals!PageNumber
Total Pages TotalPageCount Globals!TotalPages
Report Name ReportName Globals!ReportName
User Name UserName User!UserID
Selection locale SelectionLocale User!Language

Migration Summary

By understanding these differences and limitations, you can migrate your Crystal Reports to Bold Reports seamlessly. The key is recognizing:

  1. Syntax Changes: Crystal Reports uses curly braces {} for field references, while Bold Reports uses Fields!FieldName.Value
  2. Formula Language: Crystal Reports uses its proprietary syntax, while Bold Reports uses VB.NET expressions
  3. Architecture Shift: Moving from section-based to tablix-based design paradigm
  4. Function Equivalents: Most functions have direct equivalents, though some require minor adjustments
  5. Automation Limits: The converter utility handles ~50-60% automatically; plan for manual reconfiguration of advanced features

See Also

Was this article useful?
Like
Dislike
Help us improve this page
Please provide feedback or comments
Comments (0)
Access denied
Access denied