2

我在 SSRS 表达式中转换此 Crystal Report 公式时遇到问题有人可以帮助我吗?

公式1:

Dim fromExDay as String
Dim toExDay as String
Dim sYr as String
Dim sMonth as String
Dim sDay as String

fromExDay = ToText({wk_TORIO0460_a.HktrExchngDayFrom})
fromExDay = Replace (fromExDay, ",", "" )
fromExDay = Replace (fromExDay, ".", "" )

toExDay = ToText({wk_TORIO0460_a.HktrExchngDayTo})
toExDay = Replace (toExDay, ",", "" )
toExDay = Replace (toExDay, ".", "" )
if Len (Trim(fromExDay)) > 0 and Len (Trim(toExDay)) > 0 then
    sYr = Right(Left(fromExDay, 4),2)
    if sYr <> "99" then
        sYr = LEFT(CStr(CDbl(sYr) + 12),2)
    end if
    sMonth = Mid(fromExDay, 5, 2)
    sDay = Left(Right(fromExDay, 4),2)
    'fromExDay = sYr + sMonth + sDay    
    fromExDay = sYr + sMonth + sDay
    sYr = Right(Left(toExDay, 4),2)
    if sYr <> "99" then
        sYr = LEFT(CStr(CDbl(sYr) + 12),2)
    end if
    sMonth = Mid(toExDay, 5, 2)
    sDay = Left(Right(toExDay, 4),2)
    toExDay = sYr + sMonth + sDay    
    'toExDay = Right(fromExDay, 2)
    Formula = fromExDay + " ~ " + toExDay    
Else
    Formula = ""
End If

ExchangeFrom 和 ExchangeTO 的值来自 Database 。ExchangeFrom 值 = 20031031 ExchangeTo 值 = 200 数据库中是否存在

4

2 回答 2

0

返回值应该是

151010 ~ 1220

实际上,将其转换为 SSRS VB 函数不需要太多更改。在 SSRS 中,函数不能直接与字段一起使用,因此您需要将它们作为参数传递给函数。旧函数中的大部分 VB 其余部分在 SSRS 中应该是一样的——我刚刚删除了不在 SSRS 中的 ToText 函数。

当您从文本框中调用该函数时,您会传递字段。

=code.Formula1(Fields!HktrExchngDayFrom.Value, Fields!HktrExchngDayTo.Value)

这是功能:

Public Function Formula1(ByVal fromExDay as String, ByVal toExDay as String) as String

Dim sYr as String
Dim sMonth as String
Dim sDay as String

fromExDay = Replace (fromExDay, ",", "" )
fromExDay = Replace (fromExDay, ".", "" )

toExDay = Replace (toExDay, ",", "" )
toExDay = Replace (toExDay, ".", "" )

if Len (Trim(fromExDay)) > 0 and Len (Trim(toExDay)) > 0 then
    sYr = Right(Left(fromExDay, 4),2)
    if sYr <> "99" then
        sYr = LEFT(CStr(CDbl(sYr) + 12), 2)
    end if
    sMonth = Mid(fromExDay, 5, 2)
    sDay = Left(Right(fromExDay, 4), 2) 
    fromExDay = sYr + sMonth + sDay
    sYr = Right(Left(toExDay, 4), 2)
    if sYr <> "99" then
        sYr = LEFT(CStr(CDbl(sYr) + 12), 2)
    end if
    sMonth = Mid(toExDay, 5, 2)
    sDay = Left(Right(toExDay, 4), 2)
    toExDay = sYr + sMonth + sDay 
    Formula1 = fromExDay + " ~ " + toExDay    
Else
    Formula1 = ""
End If

End Function 

我认为 sDay 的计算不正确。

sDay = Left(Right(fromExDay, 4),2)      

好像又要上月了。应该是

sDay = Right(fromExDay, 2)

或者,如果它可以是更长的字符串,请使用 MID:

sDay = Mid(fromExDay, 7, 2)

将结果更改为:

151031~12

于 2019-03-14T17:36:22.637 回答
0

为了制作这个公式,我在 Active Report 页面中使用了两个文本框,并将这个公式分成两个部分。

文本框1:

=iif(Right(Left( Fields!ExchngDayFrom.Value , 4),2)  <> 99 ,LEFT(CStr(CDbl((Right(Left( Fields!ExchngDayFrom.Value , 4),2) ) + 12),2) + Mid( Fields!ExchngDayFrom.Value , 5, 2) + Left(Right( Fields!ExchngDayFrom.Value , 2),2 ) ," ")

假设 ExchangeDayfrom 的值为:20031031 输出为 151031

文本框2:

="~ " & iif(Right(Left( Fields!ExchngDayTo.Value , 4),2) <> 99 ,LEFT(CStr(CDbl((Right(Left( Fields!ExchngDayTo.Value , 4),2)) + 12),2)  + Mid( Fields!ExchngDayTo.Value , 5, 2) +  Left(Right( Fields!ExchngDayTo.Value , 2),2 ) , Right(Left( Fields!ExchngDayTo.Value , 4),2) + Mid( Fields!ExchngDayTo.Value , 5, 2) +  Left(Right( Fields!ExchngDayTo.Value , 2),2 )

假设 ExchangeDayTo 的值为:99999999 输出为 ~ 999999

这就是我解决问题的方法。非常感谢@Hannover Fist 先生,感谢您宝贵的解决方案,是的,您的解决方案是正确的,它也很完美

于 2019-03-18T08:50:52.640 回答