Share via


Power BI Report Builder の改ページ対応レポート内の式のカスタム コード

適用対象: Power BI Report Builder Power BI Desktop

レポートに埋め込まれたカスタム コードを追加できます。 カスタム定数、複雑な関数、または 1 レポート内で何度も使用される関数には、埋め込みコードを使用します。 カスタム コードには、新しいカスタム定数、変数、関数、またはサブルーチンを含めることができます。 Parameters コレクションなど、組み込みコレクションへの読み取り専用の参照を含めることが可能です。 ただし、レポート データ値セットをカスタム関数に渡すことはできません。特に、カスタム集計はサポートされていません。

Note

Power BI の改ページ対応レポートでは、カスタム アセンブリはサポートされていません。 ロジックをカスタム アセンブリから埋め込みコードに変換することを検討してください。 考慮すべき代替手段の例として、アセンブリの代替を確認してください。

重要

実行時にいったん評価し、レポート処理全体で同じ値を保持しておく必要のある、タイミングに依存するような計算の場合は、レポート変数とグループ変数のどちらを使用するかを検討してください。 詳細については、レポートおよびグループ変数コレクションの参照 (Power BI Report Builder) に関するページをご覧ください。

使用頻度の高い関数に参照を含める

[式] ダイアログ ボックスを使用すると、レポート ビルダーに組み込まれている共通の関数の一覧がカテゴリ別に表示されます。 [共通の関数] を展開してカテゴリを選択すると、式に含める関数のリストが [項目] ペインに表示されます。 共通の関数には、.NET Framework の MathConvert 名前空間のクラス、および Visual Basic ランタイム ライブラリ関数が含まれます。 便宜上、最もよく使用される関数が [式] ダイアログ ボックスで表示されます。このダイアログ ボックスでは、これらの関数は、テキスト、日付と時刻、数学、検査、プログラム フロー、集計、財務、変換、その他というカテゴリごとに表示されます。 使用頻度の低い関数は、一覧に表示されませんが、式で使用することはできます。

組み込み関数を使用するには、[アイテム] ペインで関数名をダブルクリックします。 関数の説明が説明ペインに表示され、関数呼び出しの例がサンプル ペインに表示されます。 コード ペインで、関数名の後に左かっこ ( を入力すると、IntelliSense により、関数呼び出しの有効な各構文が表示されます。 たとえば、テーブルの Quantity という名前のフィールドの最大値を計算するには、 =Max( という単純な式をコード ペインに追加した後、スマート タグを使用して、関数呼び出しに使用できる有効な構文をすべて表示します。 この例を完成させるには、「 =Max(Fields!Quantity.Value)」と入力します。

各関数の詳細については、MSDN の「 Math」、「 Convert」、および「 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

組み込みのオブジェクト コレクションの詳細については、組み込みの Globals および Users 参照 (Power BI Report Builder) に関するページをご覧ください。

コードからパラメーターへの参照を含める

レポート定義のコード ブロックを使用してグローバル パラメーター コレクションを参照できます。 パラメーター コレクションは読み取り専用で、パブリック反復子がありません。 コレクションのステップ実行に 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

次のステップ