ReportingService運算式參考

來源:互聯網
上載者:User

些運算式在報表中很常用。其中包括更改報表中的資料外觀、更改報表專案屬性以及影響資料檢索方式的運算式。本主題介紹了一些可用於報表中常見任務的運算式。有關詳細資料,請參閱在 Reporting Services 中建立運算式。

函數

報表中的許多運算式都包含函數。您可以使用這些函數來設定資料格式、應用邏輯和訪問報表中繼資料。您可以編寫使用 Visual Basic 執行階段程式庫、System.Convert 和 System.Math
命名空間中的函數的運算式。您可以從其他程式集或自訂代碼中向函數添加引用。還可以使用 Microsoft .NET Framework
中的類,包括 System.Text.RegularExpressions。有關運算式中所支援的 Visual Basic
函數的詳細資料,請參閱 msdn.microsoft.com 上的“Visual Basic 執行階段程式庫”。

Visual Basic 函數

您可以使用 Microsoft Visual Basic
函數來處理文字框中所顯示的資料,或者處理參數、屬性或報表其他地區中所用的資料。本部分舉例說明了其中的一些函數。有關 Visual Basic
函數的詳細資料,請參閱 Visual Basic 文檔。

日期函數

您可以使用 Visual Basic 函數在報表中提供日期資訊。

  • 下面的運算式包含提供當前日期的 Today 函數。此運算式可用在文字框中以在報表上顯示日期,或用在參數中以根據當前日期篩選資料。 複製代碼
    =Today()
  • 若要基於單個參數提供日期範圍,可使用 DateAdd 函數。下面的運算式提供 StartDate 參數中的日期之後六個月的日期: 複製代碼
    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)

  • 面的運算式包含顯示特定日期所屬年份的 Year
    函數。您可以使用此運算式將日期組合在一起,或者將年份顯示為一組日期的標籤。此運算式可以為給定順序的一組日期提供年份。Month
    函數和其他函數也可用於日期操作。有關詳細資料,請參閱 Visual Basic .NET 文檔。 複製代碼
    =Year(Fields!OrderDate.Value)
字串函數

您可以使用 Visual Basic 函數處理報表中的字串。

  • 您可以使用串聯運算子和 Visual Basic 常量來組合多個欄位。以下運算式返回兩個欄位,分別位於同一文字框的單獨行中。 複製代碼
    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value 
  • 可以使用 Format 函數來設定字串中日期和數位格式。下面的運算式以長日期格式顯示 StartDate 和 EndDate 參數的值: 複製代碼
    =Format(Parameters!StartDate.Value, "D") & " through " &  Format(Parameters!EndDate.Value, "D")  

    如果文字框僅包含日期或數字,則應使用文字框的 Format 屬性(而不是在文字框中使用 Format 函數)來應用格式設定。

  • Right、Len 和 InStr 函數可用於返回子字串,例如,修整 DOMAIN/username 以便僅返回使用者名稱。下面的運算式從名為 User 的參數返回反斜線 (/) 字元右側的字串部分: 複製代碼
    =Right(Parameters!User.Value, Len(Parameters!User.Value) - InStr(Parameters!User.Value, "/"))

    下面的運算式使用 .NET Framework String 類的成員而不使用 Visual Basic 函數,可以得到與上一個運算式相同的值: 複製代碼

    =Parameters!User.Value.Substring(Parameters!User.Value.IndexOf("/")+1, Parameters!User.Value.Length-Parameters!User.Value.IndexOf("/")-1)
  • 可以顯示多值參數中選定的值。下面的樣本使用 Join 函數將參數 MySelection 的選定值串聯到單個字串中,可以將該字串設定為報表專案中的文字框值的運算式。 複製代碼
    = Join(Parameters!MySelection.Value)

    如果文字框僅包含日期或數字,則應使用文字框的 Format 屬性(而不是在文字框中使用 Format 函數)來應用格式設定。

  • .NET
    Framework System.Text.RegularExpressions 中的 Regex
    函數用於更改現有字串的格式,例如,設定電話號碼格式。下面的運算式使用“替換”函數將欄位中的十位電話號碼格式從 425-555-8080
    形式更改為 (425) 555-8080 形式: 複製代碼
    =System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(/d{3})[ -.]*(/d{3})[ -.]*(/d{4})", "($1) $2-$3")
轉換函式

您可以使用 Visual Basic 函數在報表中根據需要轉換資料類型。

  • 您可以使用 Visual Basic 函數根據需要轉換資料類型。轉換函式常用於消除報表中的 #Error 訊息或設定這類訊息的格式。下面的運算式顯示為多值參數 MySelection 選擇的值數目。 複製代碼
    =CStr(Parameters!MySelection.Count)
決策函數

您可以使用 Visual Basic 函數來計算輸入值並根據結果返回另一個值。

  • Iif 函數可根據運算式的計算結果是否為 True 返回兩個值中的一個。下面的運算式使用 Iif 函數,在 LineTotal 的值超過 100 時返回布爾值 True,否則返回 False: 複製代碼
    =Iif(Fields!LineTotal.Value > 100, True, False)

    下面的運算式使用多個 Iif 函數(也稱為“嵌套 Iif 函數”),根據 PctComplete 的值返回三個值中的一個: 複製代碼

    =Iif(Fields!PctComplete.Value >= .8, "Green", Iif(Fields!PctComplete.Value >= .5, "Amber", "Red"))
  • 下面的運算式也是根據 PctComplete 的值返回三個值中的一個,不過使用的是 Switch 函數,該函數返回的是與一系列計算結果為 True 的運算式中第一個運算式相關聯的值: 複製代碼
    =Switch(Fields!PctComplete.Value >= .8, "Green", Fields!PctComplete.Value >= .5, "Amber", Fields!PctComplete.Value < .5, "Red")
  • 下面的運算式測試 ImportantDate 欄位的值,並在該值早於一周時返回“Red”,否則返回“Blue”。此運算式可用於控制報表專案中的文字框的 Color 屬性。 複製代碼
    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")
  • 下面的運算式測試欄位 PhoneNumber 的值,以瞭解該值是否為 null(在 Visual Basic 中為 Nothing),並返回“無值”,而不是空值。此運算式可用於控制報表專案中的文字框的值。 複製代碼
    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)
  • 以下運算式測試“部門”欄位的值,並返回子報表名稱或 null(在 Visual Basic 中為 Nothing)。此運算式可用於條件性切入子報表。 複製代碼
    =Iif(Fields!Department.Value = "Development", "EmployeeReport", Nothing)
  • 以下運算式測試欄位值是否為空白。此運算式可用於控製圖像報表專案的 Hidden 屬性。 複製代碼
    =Iif(IsNothing(Fields!LargePhoto.Value),True,False)
報表函數

Reporting Services 還提供了可用於處理報表中的資料的其他報表函數。本部分舉例說明了其中兩個函數。有關報表函數和樣本的詳細資料,請參閱在運算式中使用報表函數 (Reporting Services)。

  • Sum 函數可以計算某一分組或資料區域中多個值的總計值。此函數可用於表組的組頭或組尾中。下面的運算式顯示 Order 分組或資料區域中資料的和: 複製代碼
    =Sum(Fields!LineTotal.Value, "Order")
  • 在資料區域內的文字框中使用包含 RowNumber 函數的運算式,可以顯示該運算式所在的每個文字框執行個體的行號。此函數可用於為表中的各行編號。還可以用於更複雜的情況,如根據行數插入分頁符。有關詳細資料,請參閱本主題稍後部分中的“分頁符”。
    下面的運算式顯示最外面資料區域中從第一行到最後一行的行號。Nothing 關鍵字表示該函數將從最外面的資料區域中的第一行開始計數。若要從子資料區域開始計數,可使用資料區域的名稱。 複製代碼
    =RowNumber(Nothing)
報表資料的外觀

您可以使用運算式來控制資料在報表中的顯示形式。例如,可以在一個文字框中顯示兩個欄位的值,顯示報表的相關資訊,或設定報表中分頁符的插入方式。

報表表頭和表尾

在設計報表時,可能需要在報表表尾中顯示報表名稱和頁碼。為此,可使用以下運算式:

  • 下面的運算式提供報表的名稱及其已耗用時間。可以將該運算式置於報表表尾或表體的文字框中。其時間格式為短日期形式的 .NET Framework 格式設定字串:


    複製代碼
    =Globals.ReportName & ", dated " & Format(Globals.ExecutionTime, "d")
  • 下面的運算式位於報表表尾的文字框中,提供報表的頁碼和總頁數: 複製代碼
    =Globals.PageNumber & " of " & Globals.TotalPages

您也可以在報表表頭或表尾中使用運算式來表示表體中的報表專案。下面的樣本說明如何在表頭中顯示頁面中的第一個值和最後一個值,類似於目錄列表的形式。該樣本假設存在一個包含名為 LastName 的文字框的資料區域。

  • 下面的運算式位於表頭左側的文字框中,提供頁面中的 LastName 文字框的第一個值: 複製代碼
    =First(ReportItems("LastName").Value)
  • 下面的運算式位於表頭右側的文字框中,提供頁面中的 LastName 文字框的最後一個值: 複製代碼
    =Last(ReportItems("LastName").Value)

您可以對錶頭或表尾中的報表專案引用應用彙總函式。(不過,不能對錶體中的報表專案引用應用彙總函式。)下面的樣本說明如何顯示頁總頁數。該樣本假設存在一個包含名為 Cost 的文字框的資料區域。

  • 下面的運算式位於表頭或表尾中,提供頁面上 Cost 文字框中的值的總和: 複製代碼
    =Sum(ReportItems("Cost").Value)
    注意:
    對於表頭或表尾中的每個運算式,只能引用一個報表專案。

     

     

分頁符

在某些報表中,可能需要在指定行數之後、特定的組或報表專案中插入分頁符。為此,可以在資料區域中建立組(通常是緊挨著詳細資料地區外側的組),在該組中添加分頁符,再添加組運算式以按指定行數分組。

  • 下面的運算式如果用在組運算式中,可為每 25 行指定一個編號。如果為組定義了分頁符,則此運算式會每隔 25 行插入一個分頁符。 複製代碼
    =Int((RowNumber(Nothing)-1)/25)
屬性

運算式不僅用於顯示文字框中的資料。還可以用於更改將屬性應用於報表專案的方式。您可以更改報表專案的樣式資訊,或更改其可見度。

格式

您可以使用運算式改變報表中報表專案的外觀。

  • 下面的運算式如果用於文字框的 Color 屬性中,可以根據 Profit 欄位的值更改文本的顏色:


    複製代碼
    =Iif(Fields!Profit.Value < 0, "Red", "Black")
  • 下面的運算式如果用於資料區域中某報表專案的 BackgroundColor 屬性中,可以將每一行的背景色在淡綠色與白色之間變換: 複製代碼
    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")

    如果將運算式用於指定的範圍,則可能必須指明彙總函式的資料集: 複製代碼

    =Iif(RowNumber("Employees") Mod 2, "PaleGreen", "White")
可見度

您可以使用報表專案的可見度屬性來顯示和隱藏報表中的項。在諸如表的資料區域中,可以根據運算式中的值在一開始隱藏詳細資料列。

  • 下面的運算式如果用於組中詳細資料列的初始可見度,可以顯示 PctQuota 欄位值超過 90% 的所有銷售的詳細資料列: 複製代碼
    =Iif(Fields!PctQuota.Value>.9, False, True)
  • 下面的運算式(如果在表的“可見度”、“隱藏”屬性中設定)僅顯示至少包含 12 行的表: 複製代碼
    =IIF(CountRows()>12,true,false)
報表資料

您可使用運算式來處理報表中所使用的資料。可以引用參數和其他報表資訊。甚至可以更改用於檢索報表資料的查詢。

參數

您可以在參數中使用運算式來更改參數的預設值。例如,可以使用參數,根據用於運行報表的使用者識別碼 篩選特定使用者的資料。

  • 下面的運算式如果用作參數的預設值,可以收集運行報表的使用者的 ID:


    複製代碼
    =User!UserID
  • 您可以使用下面的運算式來引用查詢參數、篩選器運算式、文字框或其他報表地區中的參數。此樣本假定參數名為 User: 複製代碼
    =Parameters!User.Value
自訂代碼

您可以在報表中使用自訂代碼。自訂代碼嵌入在報表中,或儲存在報表使用的自訂程式集中。有關自訂代碼的詳細資料,請參閱在運算式中使用自訂代碼引用 (Reporting Services)。

  • 下面的樣本調用 ToUSD 內嵌程式碼方法,該方法將 StandardCost 欄位值轉換為美元值: 複製代碼
    =Code.ToUSD(Fields!StandardCost.Value)
  • 下面的樣本顯示如何定義某些自訂常量和變數。
    [Visual Basic] 複製代碼
    Public Const MyNote = "Authored by Bob"
    Public Const NCopies As Int32 = 2
    Public Dim MyVersion As String = "123.456"
    Public Dim MyDoubleVersion As Double = 123.456

    儘管自訂常量和變數不會出現在“運算式編輯器常量”視圖(僅顯示內建常量)中,但是可以從任何錶達式向其中添加引用,如下面的樣本所示。這些引用被作為變數進行處理。
    [Visual Basic] 複製代碼

    =Code.MyNote
    =Code.NCopies
    =Code.MyVersion
    =Code.MyDoubleVersion
  • 下面的樣本調用內嵌程式碼方法 FixSpelling,該方法將使用 Bicycle 替換 SubCategory.Value 中出現的所有 Bike 文本。 複製代碼
    =Code.FixSpelling(Fields!SubCategory.Value)

    嵌入報表定義之後,以下代碼顯示 FixSpelling 方法的實現。此自訂代碼首次運行時,MessageBox
    將顯示已替換的文本。此樣本顯示了如何引用 .NET Framework StringBuilder 類和
    System.Windows.Forms.MessageBox 類。您必須為 System.Windows.Forms
    向報表屬性添加引用。有關詳細資料,請參閱如何向報表添加代碼(報表設計師)和如何向報表添加程式集引用(報表設計師)。
    [Visual Basic] 複製代碼

    Dim firstTime As Boolean = True
    Public Function FixSpelling(ByVal s As String) As String
    Dim strBuilder As New System.Text.StringBuilder(s)
    If s.Contains("Bike") Then
    strBuilder.Replace("Bike", "Bicycle")
    If firstTime Then
    System.Windows.Forms.MessageBox.Show(strBuilder.ToString())
    ' or MsgBox(strBuilder.ToString())
    firstTime = False
    End If
    Return strBuilder.ToString()
    Else : Return s
    End If
    End Function

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.