共用方式為


在 Power BI Report Builder 編頁報告中運算式的自訂程式碼

適用於: Power BI Report Builder Power BI Desktop

您可以新增內嵌在報表中的程式碼。 請將內嵌程式碼用在自訂常數、複雜函數或在單一報表內重複使用的函數上。 自訂程式碼可能會包含新的自訂常數、變數、函數或副程式。 您可以包含內建集合 (例如 Parameters 集合) 的唯讀參考, 但是不能將報表資料值集傳遞至自訂函數 (尤其是不支援自訂彙總)。

注意

Power BI 上的編頁報告不支援自訂組件。 請考慮將邏輯從自訂組件轉換成內嵌程式碼。 如需要考慮的替代項目範例,請檢查組件替代項目

重要

對於時間緊迫的計算 (在執行階段時會評估一次,而您想在整個報表處理期間維持相同的值),則請考慮是否要使用報表變數或群組變數。 如需詳細資訊,請參閱報表和群組變數集合參考 (Power BI Report Builder)

包含常用函式的參考

[運算式] 對話方塊可用來檢視報表產生器一般內建函式的分類清單。 當您展開 [一般函式] 並選取類別時,[項目] 窗格就會顯示您包含在運算式中的函式清單。 一般函式包含 .NET Framework MathConvert 命名空間的類別,以及 Visual Basic 執行階段程式庫函式。 為了方便起見,您可以在 [運算式] 對話方塊中檢視最常用的函數,這些函數會依類別目錄列出:文字、日期和時間、數學、檢閱、程式流程、彙總、財務、轉換和其他。 較不常用的函數則不會顯示在清單中,但仍可用於運算式。

若要使用內建函數,請在 [項目] 窗格中的函數名稱上按兩下。 函數的描述會顯示在 [描述] 窗格中,函數呼叫的範例則顯示在 [範例] 窗格中。 當您在程式碼窗格中輸入函數名稱,且其後接著左括號 ( 時,IntelliSense 會協助顯示該函數呼叫的每個有效語法。 例如,若要計算資料表中名為 Quantity 欄位的最大值,請將簡單運算式 =Max( 加入至 [程式碼] 窗格,然後使用智慧標籤來檢視該函數呼叫的所有有效語法。 若要完成此範例,請輸入 =Max(Fields!Quantity.Value)

如需每個函數的詳細資訊,請參閱 MathConvert以及 MSDN 上的 Visual Basic 執行階段程式庫成員

包含較不常用函式的參考

若要包含其他較少使用之 CLR 命名空間的參考,您必須使用完整的參考,例如, StringBuilder。 在這些較少使用函數的 [運算式] 對話方塊的程式碼窗格中,不支援 IntelliSense。

如需詳細資訊,請參閱 MSDN 上的 Visual Basic 執行階段程式庫成員

包含內嵌程式碼

若要將內嵌程式碼加入至報表,請使用 [報表屬性] 對話方塊的 [程式碼] 索引標籤。 您建立的程式碼區塊可以包含多個方法。 內嵌程式碼中的方法必須用 Microsoft Visual Basic 來撰寫,且必須是以執行個體為基礎。 報表處理器會自動加入 System.Convert 和 System.Math 命名空間的參考。

內嵌程式碼裡的方法,可透過全域定義的 Code 成員使用。 您可藉由參考 Code 成員與方法名稱,來存取這些方法。 下列範例會呼叫 ToUSD方法,這個方法會將 StandardCost 欄位的值轉換成美金值:

=Code.ToUSD(Fields!StandardCost.Value)

若要參考自訂程式碼中的內建集合,請加入內建 Report 物件的參考:

=Report.Parameters!Param1.Value

下列範例顯示定義部分自訂常數及變數的方法。

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

雖然自訂常數不會出現在 [運算式] 對話方塊的 [常數] 類別目錄中 (這個類別目錄只會顯示內建常數),但是您可以從任何運算式加入自訂常數的參考,如下列範例所示。 在運算式中,會將自訂常數視為 Variant

=Code.MyNote
=Code.NCopies
=Code.MyVersion
=Code.MyDoubleVersion

下列範例包含 FixSpelling函數的程式碼參考和程式碼實作,這個函數會將 "Bicycle" 欄位中所有出現的 "Bike" 文字取代成 SubCategory 文字。

=Code.FixSpelling(Fields!SubCategory.Value)

將下列程式碼內嵌在報表定義程式碼區塊之後,會顯示 FixSpelling 方法的實作。 此範例示範如何使用 Microsoft .NET Framework StringBuilder 類別的完整參考。

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")
      Return strBuilder.ToString()
      Else : Return s
   End If
End Function

如需內建物件集合的詳細資訊,請參閱內建全域和使用者參考 (Power BI Report Builder)

包含程式碼中參數的參考

您可以在報表定義的程式碼區塊中,透過自訂程式碼參考全域參數集合。 此參數集合是唯讀的,而且沒有任何公用 Iterator。 您無法使用 Visual Basic For Each 建構來逐步執行此集合。 您必須先知道報表定義中所定義的參數名稱,才可以在程式碼中參考它。 但是,您可以逐一查看多重值參數的所有值。

下表包含從自訂程式碼參考內建 Parameters 集合的範例:

將整個全域參數集合傳遞至自訂程式碼。

這個函式會傳回特定報表參數 MyParameter 的值。

運算式中的參考 =Code.DisplayAParameterValue(Parameters)

自訂程式碼定義

Public Function DisplayAParameterValue(ByVal parameters as Parameters) as Object
Return parameters("MyParameter").Value
End Function

將個別參數傳遞給自訂程式碼。

運算式中的參考 =Code.ShowParametersValues(Parameters!DayOfTheWeek)

這個範例會傳回所傳入的參數值。 如果該參數為多重值參數,則傳回字串會是所有值的串連。

自訂程式碼定義

Public Function ShowParameterValues(ByVal parameter as Parameter)
 as String
   Dim s as String
   If parameter.IsMultiValue then
      s = "Multivalue: "
      For i as integer = 0 to parameter.Count-1
         s = s + CStr(parameter.Value(i)) + " "
      Next
   Else
      s = "Single value: " + CStr(parameter.Value)
   End If
   Return s
End Function

下一步