分享方式:


報表產生器編頁報表中的運算式範例

適用於:Microsoft 報表產生器 (SSRS) Power BI Report Builder SQL Server Data Tools 中的報表設計師

分頁報表中常會使用運算式來控制內容與報表的外觀。 運算式都是以 Microsoft Visual Basic 撰寫,並可使用內建函式、自訂程式碼、報表和群組變數,以及使用者定義的變數。 運算式以等號 (=) 當做開頭。 如需運算式編輯器以及可包含之參考類型的詳細資訊,請參閱在編頁報表中使用運算式 (報表產生器) 以及將運算式新增至編頁報表 (報表產生器)

重要

若啟用 RDL 沙箱,當報表發行時,運算式文字中只能使用特定類型和成員。 如需詳細資訊,請參閱以 SharePoint 整合模式啟用和停用 Reporting Services 的 RDL 沙箱功能

如需特定用法的運算式範例,請參閱下列文章:

如需簡單和複雜運算式、可使用運算式的位置以及運算式可包含之參考類型的詳細資訊,請參閱編頁報表中的運算式 (報表產生器) 下的文章。 如需評估運算式以計算彙總所使用之內容的詳細資訊,請參閱編頁報表之總計、彙總與內建集合的運算式範圍 (報表產生器)

如需瞭解如何撰寫使用本文章中運算式範例所使用的許多函式和運算子的運算式,請參閱教學課程:運算式簡介

函式

報表中的許多運算式都有包含函數, 您可以使用這些函式來格式化資料、套用邏輯以及存取報表中繼資料。 您可以撰寫運算式,使用來自 Microsoft Visual Basic 執行階段程式庫,以及來自 ConvertMath 命名空間的函式。 您可以加入其他組件或自訂程式碼中函數的參考, 您也可以使用 Microsoft .NET Framework 中的類別,包括 System.Text.RegularExpressions

Visual Basic 函式

您可以使用 Visual Basic 函式來操作顯示在文字輸入框中的資料,或是用於參數、屬性或其他報表區域的資料。 此章節提供示範其中一些函數的範例。 如需詳細資訊,請參閱 Visual Basic 執行階段程式庫成員

.NET Framework 提供許多自訂格式選項,例如特定日期格式。

數學函數

  • Round 函數可用來將數字四捨五入至最接近的整數。 下列運算式會將 1.3 四捨五入為 1:

    = Round(1.3)  
    

    您也可以撰寫運算式來將值四捨五入至您所指定的倍數,類似於 Excel 中的 MRound 函數。 透過此函式,您可將值乘以一個可產生整數的因數,將數字四捨五入,然後再除以同一個因數。 例如,若要將 1.3 四捨五入到最接近的 0.2 的倍數 (1.4),請使用下列運算式:

    = Round(1.3*5)/5  
    

日期函式

  • Today 函數會提供目前的日期。 此運算式可用於文字輸入框,以顯示報表中的日期,或根據目前的日期在參數中篩選資料:

    =Today()  
    
  • 使用 DateInterval 函式,拉出日期的特定部分。 以下是一些有效的 DateInterval 參數:

    • DateInterval.Second

    • DateInterval.Minute

    • DateInterval.Hour

    • DateInterval.Weekday

    • DateInterval.Day

    • DateInterval.DayOfYear

    • DateInterval.WeekOfYear

    • DateInterval.Month

    • DateInterval.Quarter

    • DateInterval.Year

      例如,此運算式會顯示今天日期之目前年份的週數:

      =DatePart(DateInterval.WeekOfYear, today()) 
      
  • DateAdd 函數在根據單一參數提供一個範圍的日期時很有用。 下列運算式提供在名為 StartDate 參數的日期六個月之後的日期:

    =DateAdd(DateInterval.Month, 6, Parameters!StartDate.Value)  
    
  • Year 函數會顯示特定日期的年份。 您可以使用此函式將日期分組在一起,或將年份顯示為一組日期的標籤。 這個運算式會提供給定訂購日期群組的年份。 也可使用 Month 函式和其他函式來操作日期:

    =Year(Fields!OrderDate.Value)  
    
  • 您可以在運算式中結合函數來自訂格式。 下列運算式會將日期的格式從「月-日-年」改成「月-週-週數」, 例如,將 12/23/2009 變為 December Week 3

    =Format(Fields!MyDate.Value, "MMMM") & " Week " &   
    (Int(DateDiff("d", DateSerial(Year(Fields!MyDate.Value),   
    Month(Fields!MyDate.Value),1), Fields!FullDateAlternateKey.Value)/7)+1).ToString  
    

    當做為資料集中的導出欄位使用時,您可以在圖表中使用這個運算式,在每個月內逐週彙總值。

  • 下列運算式會將 SellStartDate 值格式化為 MMM-YY。 SellStartDate 欄位是 Datetime 資料類型:

    =FORMAT(Fields!SellStartDate.Value, "MMM-yy")  
    
  • 下列運算式會將 SellStartDate 值格式化為 dd/MM/yyyy。 SellStartDate 欄位是 Datetime 資料類型:

    =FORMAT(Fields!SellStartDate.Value, "dd/MM/yyyy")  
    
  • CDate 函數會將值轉換成日期。 Now 函式會根據系統傳回包含目前日期和時間的日期值。 DateDiff 會傳回長數值,指定兩個日期值之間的時間間隔數。

    下列範例會顯示目前年份的開始日期:

    =DateAdd(DateInterval.Year,DateDiff(DateInterval.Year,CDate("01/01/1900"),Now()),CDate("01/01/1900"))  
    
  • 下列範例會根據目前月份顯示上個月的開始日期:

    =DateAdd(DateInterval.Month,DateDiff(DateInterval.Month,CDate("01/01/1900"),Now())-1,CDate("01/01/1900"))  
    
  • 下列運算式會產生 SellStartDateLastReceiptDate 之間的間隔年數。 這些欄位位於兩個不同的資料集:DataSet1 和 DataSet2 中。 報表產生器函式 – 編頁報表中的第一個函式 (報表產生器) 為彙總函式,其會傳回 DataSet1 中 SellStartDate 的第一個值,以及 DataSet2 中 LastReceiptDate 的第一個值:

    =DATEDIFF("yyyy", First(Fields!SellStartDate.Value, "DataSet1"), First(Fields!LastReceiptDate.Value, "DataSet2"))  
    
  • DatePart 函式會傳回整數值,其中包含給定日期值的指定元件。 下列運算式會傳回 DataSet1 中 SellStartDate 第一個值的年份。 已指定資料集範圍,因為報表中有多個資料集:

    =Datepart("yyyy", First(Fields!SellStartDate.Value, "DataSet1"))  
    
    
  • DateSerial 函式會傳回代表指定年、月、日,並將時間資訊設為午夜的 Date 值。 下列範例會根據目前月份顯示上個月的結束日期:

    =DateSerial(Year(Now()), Month(Now()), "1").AddDays(-1)  
    
  • 下列運算式會根據使用者選取的日期參數值,顯示各種日期:

範例描述 範例
昨天 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-1)
兩天前 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value)-2)
一個月前 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-1,Day(Parameters!TodaysDate.Value))
兩個月前 =DateSerial(Year(Parameters!TodaysDate.Value),Month(Parameters!TodaysDate.Value)-2,Day(Parameters!TodaysDate.Value))
一年前 =DateSerial(Year(Parameters!TodaysDate.Value)-1,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))
兩年前 =DateSerial(Year(Parameters!TodaysDate.Value)-2,Month(Parameters!TodaysDate.Value),Day(Parameters!TodaysDate.Value))

字串函數

  • 使用串連運算子和 Visual Basic 常數來合併多個欄位。 下列運算式會傳回兩個欄位,分別位於相同文字方塊中的不同行:

    =Fields!FirstName.Value & vbCrLf & Fields!LastName.Value   
    
  • 您可以使用 Format 函數,將字串中的日期與數字格式化。 下列運算式會以完整日期格式來顯示 StartDateEndDate 參數的值:

    =Format(Parameters!StartDate.Value, "D") & " through " &  Format(Parameters!EndDate.Value, "D")    
    

    如果文字輸入框只包含日期或數字,則應使用文字輸入框的 Format 屬性來套用格式,而非使用文字輸入框中的 Format 函式。

  • RightLenInStr 函式在傳回子字串時很有用;例如,將 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)  
    

    下列範例會執行與前一個範例相同的作業,並在選取的值清單之前顯示文字字串:

    ="Report for " & JOIN(Parameters!MySelection.Value, " & ")  
    
    
  • 來自 .NET Framework System.Text.RegularExpressionsRegex 函式可用於變更現有字串的格式,例如設定電話號碼格式。 下列運算式使用 Replace 函式,將欄位中電話號碼的格式從 "nnn-nnn-nnnn" 變更為 "(nnn) nnn-nnnn":

    =System.Text.RegularExpressions.Regex.Replace(Fields!Phone.Value, "(\d{3})[ -.]*(\d{3})[ -.]*(\d{4})", "($1) $2-$3")  
    

    注意

    確認 Fields!Phone.Value 的值沒有額外的空格,而且為 String

查閱

  • 您可以藉由指定索引鍵欄位,使用 Lookup 函數來從一對一關係的資料集 (如索引鍵-值組) 中擷取值。 下列運算式會顯示提供要比對的產品識別碼時,資料集 "Product" 中的產品名稱:

    =Lookup(Fields!PID.Value, Fields!ProductID.Value, Fields!ProductName.Value, "Product")  
    

LookupSet

  • 您可以藉由指定索引鍵欄位,使用 LookupSet 函數來從一對多關係的資料集中擷取一組值。 例如,人員可以擁有多個電話號碼。 在下列範例中,假設資料集 PhoneList 在每個資料列中包含人員識別碼和電話號碼。 LookupSet 會傳回值的陣列。 下列運算式會將傳回值合併成單一字串,並顯示 ContactID 所指定人員的電話號碼清單:

    =Join(LookupSet(Fields!ContactID.Value, Fields!PersonID.Value, Fields!PhoneNumber.Value, "PhoneList"),",")  
    

轉換函數

您可以使用 Visual Basic 函式,將欄位從一種資料類型轉換成另一種資料類型。 可使用轉換函式將欄位的預設資料類型轉換為計算或結合文字時所需的資料類型。

  • 下列運算式會將常數 500 轉換成十進位類型,以便與 Value 欄位中的 Transact-SQL 貨幣資料類型進行比較來篩選運算式:

    =CDec(500)  
    
  • 下列運算式會顯示針對多重數值參數 MySelection 所選的值數目:

    =CStr(Parameters!MySelection.Count)  
    

決策函式

  • IIF 函式會根據運算式是否為 true,傳回兩個值的其中一個。 下列運算式會使用 IIF 函式,在 LineTotal 的值超過 100 時傳回布林值 "True"。 否則會傳回值 "False":

    =IIF(Fields!LineTotal.Value > 100, True, False)  
    
  • 使用多個 IIF 函式 (也稱為「巢狀 IIF 陳述式」),根據 PctComplete 的值傳回三個值的其中一個。 可將下列運算式置入文字輸入框的填滿色彩,依照文字輸入框中的值變更背景色彩:

    =IIF(Fields!PctComplete.Value >= 10, "Green", IIF(Fields!PctComplete.Value >= 1, "Blue", "Red"))  
    

    大於或等於 10 的值會以綠色背景顯示。 介於 1 和 9 之間的值以藍色背景顯示, 小於 1 的值則以紅色背景顯示。

  • 另一種取得相同功能的方法,是使用 Switch 函數。 當測試的條件有三個或三個以上時, Switch 函數就很有用。 Switch 函式會傳回與數列中評估為 TRUE 的第一個運算式相關聯的值:

    =Switch(Fields!PctComplete.Value >= 10, "Green", Fields!PctComplete.Value >= 1, "Blue", Fields!PctComplete.Value = 1, "Yellow", Fields!PctComplete.Value <= 0, "Red")  
    

    大於或等於 10 的值會以綠色背景顯示。 介於 1 和 9 之間的值以藍色背景顯示, 等於 1 的值以黃色背景顯示, 小於或等於 0 的值則以紅色背景顯示。

  • 測試 ImportantDate 欄位的值,如果超過一週,則傳回 "Red",否則傳回 "Blue"。 此運算式可用來控制報表項目中文字輸入框的 Color 屬性:

    =IIF(DateDiff("d",Fields!ImportantDate.Value, Now())>7,"Red","Blue")  
    
  • 測試 PhoneNumber 欄位的值,如果為 null 值 (在 Visual Basic 中為 Nothing),則傳回 "No Value", 否則,會傳回電話號碼值。 此運算式可用來控制報表項目中文字輸入框的值:

    =IIF(Fields!PhoneNumber.Value Is Nothing,"No Value",Fields!PhoneNumber.Value)  
    
  • 測試 Department 欄位的值,並傳回子報表名稱或 null 值 (在 Visual Basic 中為 Nothing)。 此運算式可用於條件式鑽研子報表:

    =IIF(Fields!Department.Value = "Development", "EmployeeReport", Nothing)  
    
  • 測試欄位值是否為 null 值。 此運算式可用來控制影像報表項目的 Hidden 屬性。 在下列範例中,只有欄位值不是 null 值時,才會顯示 LargePhoto 欄位所指定的影像:

    =IIF(IsNothing(Fields!LargePhoto.Value),True,False)  
    
  • MonthName 函數會傳回字串值,包含指定之月份的名稱。 下列範例會在欄位包含 0 的值時,在 Month 欄位中顯示 NA:

    IIF(Fields!Month.Value=0,"NA",MonthName(IIF(Fields!Month.Value=0,1,Fields!Month.Value)))  
    
    

報表函式

在運算式中,您可以加入在報表中操作資料之其他報表函式的參考。 此章節提供這些函數的其中兩個範例。 如需報表函式與範例的詳細資訊,請參閱報表產生器函式 – 在編頁報表中使用彙總函式參考 (報表產生器)

Sum

  • Sum 函數可以將群組或資料區域中的值加總。 群組的頁首或頁尾可以使用這個函數。 下列運算式顯示 Order 群組或資料區域中的資料總和:

    =Sum(Fields!LineTotal.Value, "Order")  
    
  • 您也可以使用 Sum 函數進行條件式彙總計算。 例如,假設您的資料集有稱為 State 的欄位,而該欄位具有 Not Started、Started、Finished 等可能值, 則當下列運算式放在群組標頭時,只會計算 Finished 值的彙總總和:

    =Sum(IIF(Fields!State.Value = "Finished", 1, 0))  
    

RowNumber

  • RowNumber 函數在用於資料區域內的文字方塊時,會為其中顯示此運算式的每個文字方塊執行個體顯示資料列號碼。 此函數對於計算資料表中的資料列數目非常有用。 它對於更複雜的工作也非常實用,例如,根據資料列數目提供分頁符號。 如需詳細資訊,請參閱分頁符號

    您所指定的 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 個資料列就會產生一個分頁符號:

    =Ceiling(RowNumber(Nothing)/25)  
    

    若要允許使用者設定每頁的資料列數值,請建立名為 RowsPerPage 的參數,並以該參數作為群組運算式的基礎,如下列運算式所示:

    =Ceiling(RowNumber(Nothing)/Parameters!RowsPerPage.Value)  
    

    如需為群組設定分頁符號的詳細資訊,請參閱將分頁符號新增至分頁報表 (報表產生器)

屬性

運算式不只是用來顯示文字輸入框中的資料。 運算式也可以用來變更將屬性套用至報表項目的方式。 您可以變更報表項目的樣式資訊,或是變更其可見性。

格式化

  • 下列運算式用於文字輸入框的 Color 屬性時,會根據 Profit 欄位的值變更文字的色彩:

    =Iif(Fields!Profit.Value < 0, "Red", "Black")  
    

    您也可以使用 Visual Basic 物件變數 Me。 這個變數是另一種參考文字方塊值的方式。

    =Iif(Me.Value < 0, "Red", "Black")

  • 下列運算式用於資料區域中報表項目的 BackgroundColor 屬性時,會在淡綠色到白色之間交替每個資料列的背景色彩:

    =Iif(RowNumber(Nothing) Mod 2, "PaleGreen", "White")  
    

    如果將運算式用於指定的範圍,可能必須指出彙總函式的資料集:

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

注意

可用的色彩是來自 .NET Framework KnownColor 列舉。

圖表色彩

若要指定形狀圖的色彩,可以使用自訂程式碼控制色彩對應到資料點值的順序。 此自訂程式碼有助於針對擁有相同類別目錄群組的多個圖表,使用一致的色彩。 如需詳細資訊,請參閱指定分頁報表中多個形狀圖中的一致色彩 (報表產生器)

可見性

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

  • 下列運算式用於群組中詳細資料列的初始可見度時,會顯示 PctQuota 欄位中所有銷售超過 90% 的詳細資料列:

    =Iif(Fields!PctQuota.Value>.9, False, True)  
    
  • 下列運算式在資料表的 Hidden 屬性中設定時,只有在資料表具有超過 12 個資料列時,才會顯示資料表:

    =IIF(CountRows()>12,false,true)  
    
  • 下列運算式設定在資料行的 Hidden 屬性中時,只有在從資料來源擷取資料之後報表資料集中有該欄位,才會顯示該資料行:

    =IIF(Fields!Column_1.IsMissing, true, false)  
    

您可以使用報表資料來自訂 URL,也可以條件式地控制是否要加入 URL 做為文字方塊的動作。

  • 下列運算式用作文字輸入框的動作時,會產生自訂 URL,將資料集欄位 EmployeeID 指定為 URL 參數:

    ="https://contoso/MyInfo?ID=" & Fields!EmployeeID.Value  
    

    如需詳細資訊,請參閱在編頁報表中新增 URL 的超連結 (報表產生器)

  • 下列運算式會條件式地控制是否要在文字方塊中加入 URL。 此運算式會根據名為 IncludeURLs 的參數,讓使用者決定是否要在報表中包含作用中 URL。 這個運算式會設定為文字方塊的動作。 透過將參數設定為 FALSE,然後再檢視報表,可將報表匯出為沒有超連結的 Microsoft Excel 格式:

    =IIF(Parameters!IncludeURLs.Value,"https://contoso.com/productcatalog",Nothing)  
    

報表資料

您可以使用運算式來操作用於報表中的資料。 您可以參考參數和其他的報表資訊。 您甚至可以變更用來擷取報表資料的查詢。

參數

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

  • 使用下列運算式做為參數的預設值時,收集執行報表之人員的使用者識別碼:

    =User!UserID  
    
  • 若要在報表的查詢參數、篩選運算式、文字方塊或其他區域中參考參數,請使用 Parameters 全域集合。 這個範例假設參數的名稱是 Department

    =Parameters!Department.Value  
    
  • 您可以在報表中建立參數,但將其設為隱藏。 當報表在報表伺服器上執行時,參數不會出現在工具列中,且報表讀者無法變更預設值。 您可以使用設為預設值的隱藏參數做為自訂常數。 您可以在任何運算式中使用此值,欄位運算式也在內。 下列運算式會識別由名為 ParameterField之參數的預設參數值所指定的欄位:

    =Fields(Parameters!ParameterField.Value).Value  
    

自訂程式碼

您可以在報表中使用自訂程式碼, 自訂程式碼會內嵌在報表中,或是儲存在用於報表的自訂組件中。 如需自訂程式碼的詳細資訊,請參閱報表設計師的編頁報表中運算式的自訂程式碼及組件參考 (SSRS)

使用群組變數進行自訂彙總

您可以初始化特定群組範圍本機之群組變數的值,然後在運算式中加入該變數的參考。 搭配自訂程式碼使用群組變數的其中一種方式是實作自訂彙總。 如需詳細資訊,請參閱在 Reporting Services 2008 中使用群組變數進行自訂彙總 (英文)。

如需變數的詳細資訊,請參閱編頁報表中的報表和群組變數參考 (報表產生器)

在執行階段隱藏 null 或零值

運算式中有些值可能會在報表處理時評估為 Null 或未定義。 這些值可能會造成執行階段錯誤,導致文字輸入框中顯示 "#Error",而不是評估的運算式。 IIF 函式對於這種行為很敏感, 因為不同於 If-Then-Else 陳述式,IIF 陳述式的每個部分會先經過評估 (包括函式呼叫),再傳遞到測試 TRUE 或 FALSE 的常式。 如果 =IIF(Fields!Sales.Value is NOTHING, 0, Fields!Sales.Value)Nothing 值,陳述式 Fields!Sales.Value 會在轉譯報表中顯示 "#Error"。

若要避免此種狀況,請使用下列其中一種策略:

  • 如果欄位 B 的值為 0 或未定義,則將分子設為 0,分母設為 1; 否則將分子設為欄位 A 的值,分母設為欄位 B 的值。

    =IIF(Field!B.Value=0, 0, Field!A.Value / IIF(Field!B.Value =0, 1, Field!B.Value))  
    
  • 使用自訂程式碼函數來傳回運算式的值。 下列範例會傳回目前值和上一個值之間的百分比差異。 此值可用來計算任兩個連續值之間的差異, 並處理第一個比較的邊緣案例 (沒有上一個值時),以及上一個值或目前值為 null 值 (在 Visual Basic 中為 Nothing) 的案例:

    Public Function GetDeltaPercentage(ByVal PreviousValue, ByVal CurrentValue) As Object  
        If IsNothing(PreviousValue) OR IsNothing(CurrentValue) Then  
            Return Nothing  
        Else if PreviousValue = 0 OR CurrentValue = 0 Then  
            Return Nothing  
        Else   
            Return (CurrentValue - PreviousValue) / CurrentValue  
        End If  
    End Function  
    

    下列運算式顯示如何針對 "ColumnGroupByYear" 容器、群組或資料區域,從文字輸入框呼叫此自訂程式碼:

    =Code.GetDeltaPercentage(Previous(Sum(Fields!Sales.Value),"ColumnGroupByYear"), Sum(Fields!Sales.Value))  
    

    這程式碼有助於避免執行階段例外狀況。 您現在可以在文字方塊的 =IIF(Me.Value < 0, "red", "black") Color 屬性中使用類似 的運算式,以便根據值大於或小於 0,有條件地顯示文字。