我已将SSRS报告从SQL转换为本地CRM 2011使用的FETCHXML。
现在报告使用CRM 2013作为数据源。
在本报告的旧版本中,我们有这样的表达:
=String.Format(New System.Globalization.CultureInfo(1033), chrw(123)&"0"&chrw(125)&" "&chrw(40)&"Count"&chrw(58)&" "&chrw(123)&"1"&chrw(125)&chrw(41), IIf(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value), CInt(Count("")).ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()))
我需要更新此表达式以与在线实例兼容,并且我不理解它应该做什么。
有人告诉我,cultureinfo是静态的,不会改变,所以它可以被硬编码。
对于初学者来说,Cint(Count(""))做了什么?我不明白这个表达式是做什么的。
答案 0 :(得分:2)
我可以提供解释
IIF(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value), CInt(Count("")).ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()))
不是为什么它以它的方式完成,而是以可能的输出
1) CInt(Count("") -
如果它在组总行中,这将给当前组行计数,如果没有组,则给出组,那么它将始终给出1作为当前行计数
2) ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), Code.GetCultureInfo()) -
在这里有两个参数
a)First(Fields!NumberFormat_0_Precision.Value)
它将是格式化数字的格式
b)第二个将来自 this系统类。但这来自您的自定义报告代码。您应该检查报告的自定义代码。
3) IIF(IsNothing(Fields!stepname.Value), "Not specified", Fields!stepname.Value)
这里的表达式检查stepname
列是否具有值,如果为null则返回null,然后返回Not specified
,否则返回值。
所以我不确定为什么这样做。如果你查看Count,你可以进行更改,然后你会注意到你可以通过范围,这样就不会混淆下一个开发人员的地狱。然后,如果您的自定义函数GetCultureInfo()
只是在没有任何条件或更改的情况下返回CultureInfo
,那么您可以直接在表达式中传递它,如下所示。
.ToString(First(Fields!NumberFormat_0_Precision.Value, "DSNumberAndCurrencyInfo"), new System.Globalization.CultureInfo("en-US"))
您可以在CultureInfo上获得更多信息。
下一部分是表达式
的开头New System.Globalization.CultureInfo(1033)
在.NET Framework 3.5中,您可以使用反射强制对属性和方法的特定调用使用英语(美国)数据格式(区域设置ID 1033)。所以它只是用于使用数据格式。
chrw(123)&"0"&chrw(125)&" "&chrw(40)&"Count"&chrw(58)&" "&chrw(123)&"1"&chrw(125)&chrw(41)
这个用于在here.
上更多地使用字符代码显示不同的字符因此,所有这些大表达式基本上都用于使用某些条件来格式化数据库中指定的特定格式的字符串值。