Reporting Services で単一のパラメーターに複数の値を渡す - 区切り文字付きの文字列
Reporting Services で単一のパラメーターに複数の値を渡す方法
このチュートリアルでは、Reporting Services で単一のパラメーターに複数の値を渡すための 3 つの方法を紹介します。
方法 1: 区切り文字付きの文字列
最も簡単な方法は、複数の値を区切り文字で連結した文字列をパラメーターとして渡す方法です。例えば、カンマ区切りの文字列であれば、以下のようにパラメーターを設定できます。
パラメーター名: Values
値: 1,2,3
レポート側では、Parameters!Values.Value
を使ってパラメーター値を取得できます。そして、Split()
関数を使って文字列を分割し、個々の値を取り出すことができます。
=Split(Parameters!Values.Value, ",")
この方法はシンプルですが、値の数が多くなると管理が煩雑になる可能性があります。
方法 2: 配列
複数の値を配列として渡す方法もあります。配列は、複数の値をまとめて格納できるデータ型です。
パラメーター名: Values
データ型: Array
値: {1, 2, 3}
For Each value In Parameters!Values.Value
...
Next
この方法は、値の数が多くなっても管理がしやすいです。
方法 3: データセット
複数の値をデータセットとして渡す方法もあります。データセットは、テーブル形式でデータを格納できます。
データセット名: Values
データ型: Table
列:
- ID (Int)
- Value (Text)
データ:
- {ID: 1, Value: "A"}
- {ID: 2, Value: "B"}
- {ID: 3, Value: "C"}
=Parameters!Values.Value.DataSet.Tables["Values"]
この方法は、値に複雑な構造がある場合に有効です。
Reporting Services で単一のパラメーターに複数の値を渡す方法は、いくつかあります。それぞれの方法にはメリットとデメリットがあるので、状況に合わせて最適な方法を選択する必要があります。
方法 1: 区切り文字付きの文字列
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/2005/01/reportdefinition" xmlns:cl="http://schemas.microsoft.com/SQLServer/reporting/2008/01/reportdefinition/cl">
<DataSets>
<DataSet Name="MyDataSet">
<Query>
SELECT *
FROM AdventureWorks2019.Person.Address
</Query>
</DataSet>
</DataSets>
<Parameters>
<Parameter Name="StateProvinceID">
<DataType>Int32</DataType>
<AllowNull>True</AllowNull>
</Parameter>
</Parameters>
<Body>
<ReportItems>
<Table Name="Table1">
<DataSetName>MyDataSet</DataSetName>
<Filters>
<Filter>
<Expression>StateProvinceID IN (@StateProvinceID)</Expression>
</Filter>
</Filters>
<Columns>
<Column>
<Name>AddressLine1</Name>
</Column>
<Column>
<Name>City</Name>
</Column>
<Column>
<Name>StateProvinceName</Name>
</Column>
</Columns>
</Table>
</ReportItems>
</Body>
</Report>
レポートパラメーター
- パラメーター名: StateProvinceID
- 値: 1,2,3
結果
このレポートは、StateProvinceID
パラメーターで指定された州の住所を表示します。
方法 2: 配列
レポート (.rdl)
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/2005/01/reportdefinition" xmlns:cl="http://schemas.microsoft.com/SQLServer/reporting/2008/01/reportdefinition/cl">
<DataSets>
<DataSet Name="MyDataSet">
<Query>
SELECT *
FROM AdventureWorks2019.Person.Address
</Query>
</DataSet>
</DataSets>
<Parameters>
<Parameter Name="StateProvinceIDs">
<DataType>Array</DataType>
<AllowNull>True</AllowNull>
<DefaultValue>
<Value>1</Value>
<Value>2</Value>
<Value>3</Value>
</DefaultValue>
</Parameter>
</Parameters>
<Body>
<ReportItems>
<Table Name="Table1">
<DataSetName>MyDataSet</DataSetName>
<Filters>
<Filter>
<Expression>StateProvinceID IN (@StateProvinceIDs)</Expression>
</Filter>
</Filters>
<Columns>
<Column>
<Name>AddressLine1</Name>
</Column>
<Column>
<Name>City</Name>
</Column>
<Column>
<Name>StateProvinceName</Name>
</Column>
</Columns>
</Table>
</ReportItems>
</Body>
</Report>
方法 3: データセット
<Report xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/2005/01/reportdefinition" xmlns:cl="http://schemas.microsoft.com/SQLServer/reporting/2008/01/reportdefinition/cl">
<DataSets>
<DataSet Name="MyDataSet">
<Query>
SELECT *
FROM AdventureWorks2019.Person.Address
</Query>
</DataSet>
<DataSet Name="StateProvinces">
<Query>
SELECT StateProvinceID, StateProvinceName
FROM AdventureWorks2019.Person.StateProvince
</Query>
</DataSet>
</DataSets>
<Parameters>
<Parameter Name="
Reporting Services で単一のパラメーターに複数の値を渡す方法
方法 4: URL パラメーター
レポートを URL から実行する場合、URL パラメーターを使ってパラメーター値を渡すことができます。URL パラメーターは、?
記号の後に parameterName=value
の形式で指定します。
例:
http://localhost/ReportServer/Pages/ReportViewer.aspx?reportPath=/MyReport&StateProvinceID=1,2,3
方法 5: カスタム コード
レポート コードを使用して、パラメーター値を動的に設定することができます。
public void InitializeReport(Report report)
{
// パラメーター値を取得
var stateProvinceIDs = Request.QueryString["StateProvinceID"];
// パラメーターを設定
report.SetParameters(new ReportParameter("StateProvinceIDs", stateProvinceIDs));
}
方法 6: サブレポート
サブレポートのパラメーターを使って、親レポートから値を渡すことができます。
- 親レポート:
<Report>
<SubReports>
<SubReport>
<ReportPath>MySubReport.rdl</ReportPath>
<Parameters>
<Parameter Name="StateProvinceID">
<Value>@StateProvinceID</Value>
</Parameter>
</Parameters>
</SubReport>
</SubReports>
</Report>
<Report>
<DataSets>
<DataSet Name="MyDataSet">
<Query>
SELECT *
FROM AdventureWorks2019.Person.Address
WHERE StateProvinceID = @StateProvinceID
</Query>
</DataSet>
</DataSets>
<Body>
<Table Name="Table1">
<DataSetName>MyDataSet</DataSetName>
<Columns>
<Column>
<Name>AddressLine1</Name>
</Column>
<Column>
<Name>City</Name>
</Column>
<Column>
<Name>StateProvinceName</Name>
</Column>
sql reporting-services parameters