在 Power BI Report Builder 編頁報告中運算式的自訂程式碼
適用於: Power BI Report Builder Power BI Desktop
您可以新增內嵌在報表中的程式碼。 請將內嵌程式碼用在自訂常數、複雜函數或在單一報表內重複使用的函數上。 自訂程式碼可能會包含新的自訂常數、變數、函數或副程式。 您可以包含內建集合 (例如 Parameters 集合) 的唯讀參考, 但是不能將報表資料值集傳遞至自訂函數 (尤其是不支援自訂彙總)。
注意
Power BI 上的編頁報告不支援自訂組件。 請考慮將邏輯從自訂組件轉換成內嵌程式碼。 如需要考慮的替代項目範例,請檢查組件替代項目。
重要
對於時間緊迫的計算 (在執行階段時會評估一次,而您想在整個報表處理期間維持相同的值),則請考慮是否要使用報表變數或群組變數。 如需詳細資訊,請參閱報表和群組變數集合參考 (Power BI Report Builder)。
包含常用函式的參考
[運算式] 對話方塊可用來檢視報表產生器一般內建函式的分類清單。 當您展開 [一般函式] 並選取類別時,[項目] 窗格就會顯示您包含在運算式中的函式清單。 一般函式包含 .NET Framework Math 與 Convert 命名空間的類別,以及 Visual Basic 執行階段程式庫函式。 為了方便起見,您可以在 [運算式] 對話方塊中檢視最常用的函數,這些函數會依類別目錄列出:文字、日期和時間、數學、檢閱、程式流程、彙總、財務、轉換和其他。 較不常用的函數則不會顯示在清單中,但仍可用於運算式。
若要使用內建函數,請在 [項目] 窗格中的函數名稱上按兩下。 函數的描述會顯示在 [描述] 窗格中,函數呼叫的範例則顯示在 [範例] 窗格中。 當您在程式碼窗格中輸入函數名稱,且其後接著左括號 ( 時,IntelliSense 會協助顯示該函數呼叫的每個有效語法。 例如,若要計算資料表中名為 Quantity
欄位的最大值,請將簡單運算式 =Max(
加入至 [程式碼] 窗格,然後使用智慧標籤來檢視該函數呼叫的所有有效語法。 若要完成此範例,請輸入 =Max(Fields!Quantity.Value)
。
如需每個函數的詳細資訊,請參閱 Math、 Convert以及 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