快捷搜索:  as  2018  FtCWSyGV  С˵  test  xxx  Ψһ  w3viyKQx

葡京娱乐场968119_龟发之家论坛



SQL Server报表办事(SSRS)对付开拓职员和用户来说是一个异常有用的设计和浏览报表的对象。然则,有些特点是在SSRS中没有供给为直接可以应用的。 这些特点是开拓职员和用户常常必要的。

在一个报表中显示办事器名称或IP地址

当报表数据是运行在几个报表办事器上时,用户常常会搞错。你可能有一个测试和开拓情况,然则你葡京娱乐场968119不知道你的报表数据是来自于哪个办事器。

很显着,办理这个问题的一个措施是在报表中显示报表办事器名称或它的IP地址。不幸的是,没有直接的函数或措施来获取办事器名称。然则有这个事情情况。

在报表办事中,有一个全局参数叫做ReportServerUrl,它可以显示报表URL。这个值的开始部分是来自于C:Program FilesMicrosoft SQL ServerMSSQL.#Reporting ServicesReportServer 文件夹下的RSReportServer.config 文件。在这个文件里,有叫做URLRoot 的结点。它是http://{IPAddress}/reportserver或http://{Server Name}/reportserver。你必要找到措施来提取这个IP地址或办事器名称,你可以应用下面的表达式:

Mid(Globals!ReportServerUrl,8,InStr(9,Globals!ReportServerUrl,"/")-8)

这个表达式所做的,是提取从//位置后的字母到/位置后的字母间的名称,这是办事器的办事器名称或IP地址。

将数字类型转化为文本

这是在SSRS论坛上常常看到的问题,由于许多用户必要将数字类型的数据显示为文本。只管在水晶报表中有一个函数,然则在SSRS中没有函数。不过,你可以葡京娱乐场968119在SSRS中自己写个函数。

让我们用下面的查询来举个例子:

SELECTSales.SalesPerson.SalesPersonIDASSalesPerson,

SUM(Sales.SalesOrderDetail.OrderQty*Sales.SalesOrderDetail.UnitPrice)ASAmount

FROMSales.SalesOrderDetail

INNERJOINSales.SalesOrderHeaderONSales.SalesOrderDetail.SalesOrderID=Sales.SalesOrderHeader.SalesOrderID

INNERJOINSales.SalesPersonONSales.SalesOrderHeader.SalesPersonID=Sales.SalesPerson.SalesPersonID

GROUPBYSales.SalesPerson.SalesPersonID

为了应用这个例子,让我们假设我们必要显示贩卖职员的id和数量,数量要以文本形式显示。

按照下面的步骤来创建一个报表。

1. 创建一个SSRS项目。

2. 添加新报表到这个项目中。

3. 添加一个数据源,它的数据库指向adventureworks。

4. 用上面的查询创建一个数据集。

5. 从对象箱疲塌一个表来进行显示,并疲塌字段到这个表上。

下一步是创建一个函数来转换数字类型为文本。

SQL Server报表办事(SSRS)对付开拓职员和用户来说是一个异常有用的设计和浏览报表的对象。然则,有些特点是在SSRS中没有供给为直接可以应用的。 这些特点是开拓职员和用户常常必要的。

到报表菜单选项中选择报表属性。选择对话框中的代码标签页并复制和黏贴下面的代码:

' Source

' http://cc.msnscache.com/cache.aspx?q=72465960679242&mkt=en-US&lang=en-US&w=577f5001&FORM=CVRE8

SHARED suffixes AS String() = _

{"Thousand ", "Million ", "Billion ", "Trillion ", _

"Quadrillion ", "Quintillion ", "Sextillion "}

SHARED units AS String() = _

{"","One ", "Two ", "Three ", "Four ", "Five ", _

"Six ", "Seven ", "Eight ", "Nine "}

SHARED tens AS String() = _

{"Twenty ", "Thirty ", "Forty ", "Fifty ", "Sixty ", _

"Seventy ", "Eighty ", "Ninety "}

SHARED digits AS Str葡京娱乐场968119ing() = _

{"Ten ","Eleven ", "Twelve ", "Thirteen ", "Fourteen ", _

"Fifteen ", "Sixteen ", "Seventeen ", "Eighteen ", "Nineteen"}

SHARED expr AS NEW _

System.Text.RegularExpressions.Regex("^-?d+(.d{2})?$", _

System.Text.RegularExpressions.RegexOptions.None)

PUBLIC Function ExpandPrice(Price AS Double, _

Optional pSeparator AS String = ".") _

AS String

Dim pPrice As String

pPrice = FORMAT(Price,"##############.00")

Dim temp AS New System.Text.StringBuilder()

If Not expr.IsMatch(pPrice) Then

' temp.Append(pPrice) or whatever you want to do here

Else

Dim parts AS String() = pPrice.Split(pSeparator)

Dim dollars AS String = parts(0)

Dim cents AS String = parts(1)

If CDbl(dollars) > 1 Then

temp.Append(ExpandIntegerNumber(dollars) & "Dollars ")

If CInt(cents) > 0 Then

temp.Append("And ")

End If

ElseIf CDbl(dollars) = 0 Then

temp.Append(ExpandIntegerNumber(dollars) & "Zero Dollars ")

If CInt(cents) >= 0 Then

temp.Append("And ")

End If

ElseIf CDbl(dollars) = 1 Then

temp.Append(ExpandIntegerNumber(dollars) & "Dollar " )

End If

If CDbl(cents) > 1 Then

temp.Append(ExpandIntegerNumber(cents) & "Cents")

ElseIf CDbl(cents) = 0 Then

temp.Append(ExpandIntegerNumber(cents) & "Zero Cents ")

ElseIf CDbl(cents) = 1 Then

temp.Append(ExpandIntegerNumber(cents) & "Cent " )

End If

End If

RETURN temp.ToString()

End Function

Function ExpandIntegerNumber(pNumberStr AS String) AS String

Dim temp2 AS New System.Text.StringBuilder()

Dim number AS String = _

StrDup(3 - Len(pNumberStr) Mod 3, "0") & pNumberStr

Dim i AS Integer, j AS Integer = -1

Dim numPart AS String

For i = Len(number) - 2 To 1 Step -3

numPart = Mid(number, i, 3)

If Clng(numPart > 0) Then

If j > -1 Then

temp2.Insert(0,suffixes(j),1)

End If

End If

temp2.Insert(0,GetNumberUnder1000Str(numPart),1)

j += 1

Next

RETURN temp2.ToString()

End Function

Function GetNumberUnder1000Str(pNumber AS String) AS String

Dim temp1 AS New System.Text.StringBuilder()

If Len(pNumber) = 3 Then

If CLng(Left葡京娱乐场968119(pNumber, 1)) > 0 Then

temp1.Append(GetNumberUnder100Str(Left(pNumber, 1)) & "Hundred ")

End If

End If

temp1.Append(GetNumberUnder100Str(Right("0" & pNumber, 2)))

RETURN temp1.ToString()

End Function

Function GetNumberUnder100Str(pNumber AS String) AS String

If pNumber > 19 Then

RETURN tens(Left(pNumber, 1) - 2) & units(Right(pNumber, 1))

ElseIF pNumber >= 10 and pNumber

上面的代码是从网站上代码片段那里获得的。

然后为这个组选择page break at the end选项。

阻拦向下钻取矩阵中总列数葡京娱乐场968119

当你在报表中有个矩阵时,你可以像下面这样显示总行数和列数:

假如你想在你点击任何具体单元时导航到另一个报表,那么你可以设置设置设备摆设摆设导航标签。然则,这个设置设置设备摆设摆设的问题是这个设置设置设备摆设摆设使得用户可以点击总列数并钻取到导航报表。你不能经由过程应用表达式来阻拦,由于总列数可以看作是一个其它字段。

下面是我们将用于上面这个例子的查询:

SELECT YEAR(Sales.SalesOrderHeader.OrderDate) AS Year,

Production.Product.Name AS Name,

SUM(Sales.SalesOrderDetail.LineTotal) AS Amt

FROM  Sales.SalesOrderDetail

INNER JOIN Sales.SalesOrderHeader ON Sales.SalesOrderDetail.SalesOrderID = Sales.SalesOrderHeader.SalesOrderID

INNER JOIN Production.Product ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID

WHERE  ( Production.Product.Name LIKE 'HL R%' )

AND ( YEAR(Sales.SalesOrderHeader.OrderDate) IN ( 2001, 2002 ) )

GROUP BY Production.Product.Name,

YEAR(Sales.SalesOrderHeader.OrderDate)

ORDER BY YEAR,

Name

您可能还会对下面的文章感兴趣: