Reporting Services で単一のパラメーターに複数の値を渡す - 区切り文字付きの文字列

2024-04-02

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


SQL Server 2000 で ROWNUMBER() 関数を使って LIMIT 句をエミュレートする方法

MySQL の LIMIT 句は、クエリ結果の行数を制限するために使用されます。一方、Microsoft SQL Server 2000 には LIMIT 句がありません。しかし、いくつかの方法で LIMIT 句の機能をエミュレートすることができます。...


PostgreSQLで列をユニークにする方法

PostgreSQL では、ALTER TABLEコマンドを使用して既存のテーブルを変更できます。このコマンドには、列をユニークにするオプションが含まれています。ユニーク制約を設定すると、その列の値がテーブル内で重複することを防ぐことができます。...


データベースにおけるNULL値の真実:ストレージ使用量とパフォーマンスへの影響

NULL値はストレージスペースを占有します。これは、データベースがNULL値を特別な値として扱い、その存在を記録する必要があるためです。NULL値が使用するストレージ量は、データベースの種類とデータ型によって異なります。SQL Serverの場合、NULL値が使用するストレージ量は次のとおりです。...


SQL SELECT WHERE フィールドに単語が含まれている

CONTAINS 演算子を使用して、フィールドに特定の単語が含まれているかどうかを確認できます。以下は、products テーブルから、name フィールドに "apple" という単語が含まれている製品を取得する例です。上記のクエリは、products テーブルから、name フィールドに "apple" という単語が含まれているすべての製品を返します。...


MySQLでSELECT句で変数を使用する際の注意点:行返却順序と評価順序の違い

MySQL、SQL、MariaDBなどのデータベースシステムにおいて、SELECT句でユーザー定義変数を使用する場合、変数の割り当て評価順序と行の返却順序が異なる場合があることを理解することが重要です。この現象は、予期しない結果を招き、特に複雑なクエリを使用している場合に問題を引き起こす可能性があります。...