Sales_Order_Detail_2008R2 レポートの作成 (SSRS)

このチュートリアルでは、AdventureWorks 2008R2 サンプル レポートから Sales_Order_Detail_2008R2 レポートを作成できます。

このレポートは、Employee_Sales_Summary_2008R2 レポートのドリルスルー アクションの対象となる、SalesOrderNumber フィールドの詳細レポートです。レポートには、一連の連続する販売注文についての販売ヘッダーと販売行アイテムの詳細が表示されます。詳細情報には、注文番号、店舗名、請求先住所と出荷先住所、販売員の連絡先情報、および AdventureWorks2008R2 データベースから入手できるその他の詳細が含まれます。レポート一式とそのリレーションシップの詳細については、「チュートリアル: AdventureWorks 2008R2 サンプル レポートの作成 (SSRS)」を参照してください。

学習する内容

このチュートリアルでは、次のタスクを実行します。

  • 特定の範囲内にある販売注文についての販売注文の詳細データを取得するデータセットとクエリを追加します。

  • 範囲内の最初と最後の販売注文番号に対するレポート パラメーターを構成します。

  • ページ ヘッダーに次の情報を追加します。

    • ページ名。レポートを Excel にエクスポートした場合、ワークシートのタブ名はページ名に基づきます。

    • レポート全体のページ数。

    • 各販売注文内のページ番号。

    • レポート ユーザー向けのメイン レポートに戻る方法の説明。

  • SalesOrderID に基づく単一の行グループを含む一覧を追加します。一覧には次の情報を追加します。

    • 販売注文ヘッダーと詳細情報のレイアウトを制御する入れ子になった四角形のコンテナー。

    • 販売注文ヘッダー情報を表示する複数のテキスト ボックス。

    • 複数の店舗連絡先の電話番号を表示するサブレポート。

    • 販売注文の各行アイテムの詳細を表示するテーブル。

  • 連続するページのページ合計と集計途中経過を計算するカスタム コードを追加します。

  • 集計途中経過の式を簡略化するためにレポート変数を定義します。

  • 25 行ごとに新しいページを開始するように詳細行のカスタム グループ式を定義します。

このチュートリアルの推定所要時間: 30 分

必要条件

必要条件については、「AdventureWorks 2008R2 サンプル レポートの前提条件 (SSRS)」を参照してください。

このチュートリアルでは、「レポート サーバー プロジェクトと AdventureWorks2008R2_Base レポートの作成 (SSRS)」が完了していることを前提としています。

ヒント

販売注文詳細レポートは、データ領域、四角形、入れ子になったデータ領域、および入れ子になったテキスト ボックスを使用してデータを編成する自由形式のレポートです。これらのアイテムの包含階層は重要です。このレポートを作成する際は、「レポート デザインに関するヒント (レポート ビルダー 3.0 および SSRS)」のヒントのほか、次のヒントも参考にしてください。

  • サンプル レポート Sales_Order_Detail_2008R2 を開いて、このチュートリアルに従ってレポートを表示することをお勧めします。Sales_Order_Detail_2008R2 を開いたら、ドキュメント アウトライン ペインでレポート アイテムの階層を表示します。レポートを作成する際は、Tablix レポート アイテムと四角形の包含関係を確認してください。

    注意

    ドキュメント アウトライン ペインを開くには、[表示] メニューの [その他のウィンドウ] をクリックし、[ドキュメント アウトライン] をクリックします。

  • 一覧は、Tablix の自由形式のレイアウトです。既定では、四角形を含む単一の Tablix セルが一覧に含まれます。このレポートでは、次のものを追加します。

    • ロゴ、販売注文番号、および販売注文ヘッダー情報を格納する入れ子になった追加の四角形。

    • 各行の販売注文の詳細を表示するテーブル。

  • レポート アイテムとレイアウトを作成する作業をすべて行うよりも、元のレポートとコピーとの間でデータ領域や四角形のコンテナーをコピーして貼り付ける方が簡単な場合があります。開いているレポートのタブ付きのビューの間では、レポート アイテムをコピーして貼り付けることができます。あるレポートからアイテムをコピーしたら、コピー先のレポートのタブをクリックし、アイテムを貼り付ける場所をクリックします。貼り付け操作は状況依存です。たとえば、データ領域をページ ヘッダーに貼り付けることはできません。

プロジェクトを開いてレポートをコピーするには

  1. Business Intelligence Development Studio で、レポート サーバー プロジェクト AdventureWorks 2008R2 を開きます。

  2. ソリューション エクスプローラーで、次の手順を実行します。

    1. レポート AdventureWorks2008R2_Base.rdl を右クリックし、[コピー] をクリックします。

    2. このプロジェクトのノードを右クリックし、[貼り付け] をクリックします。

    3. コピーしたレポートの名前を Sales_Order_Detail_2008R2.rdl に変更します。

個人顧客に関する売上のデータセットを作成するには

  • レポート データ ペインで、SalesOrder という名前の埋め込みデータセットを追加します。AdventureWorks2008R2 共有データ ソースと次のクエリを使用します。

    SELECT SOH.SalesOrderNumber, S.BusinessEntityID, S.Name, 
      SOH.SalesOrderID, SOH.SalesPersonID, SOH.TotalDue,
      SOH.OrderDate, SOH.PurchaseOrderNumber,
      SOH.BillToAddressID, SOH.ShipToAddressID, SOH.ShipMethodID,
      SM.Name AS ShipMethod, BA.AddressLine1 AS BillAddress1, BA.City AS BillCity, 
      BA.PostalCode AS BillPostalCode, BSP.Name AS BillStateProvince, 
      BCR.Name AS BillCountryRegion, 
      SA.AddressLine1 AS ShipAddress1,SA.City AS ShipCity, SA.PostalCode AS ShipPostalCode, 
      SSP.Name AS ShipStateProvince, SCR.Name AS ShipCountryRegion,
      e.JobTitle, per.[FirstName] + N' ' + per.[LastName] AS [SalesPerson], 
      ph.PhoneNumber,
      SD.SalesOrderDetailID, SD.OrderQty, SD.UnitPrice, 
      CASE WHEN SD.UnitPriceDiscount IS NULL THEN 0 ELSE SD.UnitPriceDiscount END 
         AS UnitPriceDiscount, 
      SD.LineTotal, SD.CarrierTrackingNumber, P.Name as ProductName, P.ProductNumber
      FROM [Sales].[SalesOrderHeader] SOH 
        INNER JOIN Sales.Customer C ON SOH.CustomerID = C.CustomerID
        INNER JOIN Sales.Store S ON C.StoreID = S.BusinessEntityID
        INNER JOIN Person.Address SA ON SA.AddressID = SOH.ShipToAddressID -- Shipping address
        INNER JOIN Person.StateProvince SSP ON SA.StateProvinceID = SSP.StateProvinceID 
        INNER JOIN Person.CountryRegion SCR ON SSP.CountryRegionCode = SCR.CountryRegionCode 
        INNER JOIN Person.Address BA ON SOH.BillToAddressID = BA.AddressID -- Billing Address
        INNER JOIN Person.StateProvince BSP ON BA.StateProvinceID = BSP.StateProvinceID 
        INNER JOIN Person.CountryRegion BCR ON BSP.CountryRegionCode = BCR.CountryRegionCode 
        INNER JOIN Purchasing.ShipMethod SM ON SOH.ShipMethodID = SM.ShipMethodID 
        INNER JOIN [Sales].[SalesPerson] sp ON sp.[BusinessEntityID] = SOH.[SalesPersonID]  
        INNER JOIN [HumanResources].[Employee] e ON SOH.[SalesPersonID] = e.[BusinessEntityID] 
        INNER JOIN [Person].[Person] per ON per.[BusinessEntityID] = sp.[BusinessEntityID]
        INNER JOIN Person.PersonPhone ph ON per.[BusinessEntityID] = ph.[BusinessEntityID]
        INNER JOIN Sales.SalesOrderDetail SD ON SD.SalesOrderID = SOH.SalesOrderID
        INNER JOIN Production.Product P ON SD.ProductID = P.ProductID 
    WHERE (SOH.SalesOrderID BETWEEN (@SalesOrderIDStart) AND (@SalesOrderIDEnd))
    

データセット クエリから、範囲内にある複数の販売注文のデータが返されます。

レポート パラメーター @SalesOrderIDStart を構成するには

  1. @SalesOrderIDStart[パラメーターのプロパティ] を開きます。

  2. [プロンプト] を "最初の注文 ID は?" に変更します。

  3. [データ型][整数] に変更します。

  4. [既定値] で、値を追加して「57030」に設定します。

レポート パラメーター @SalesOrderIDEnd を構成するには

  1. @SalesOrderIDEnd[パラメーターのプロパティ] を開きます。

  2. [プロンプト] を "最後の注文 ID は?" に変更します。

  3. [データ型][整数] に変更します。

  4. [既定値] で、値を追加して「57032」に設定します。

ページ ヘッダーへの名前および番号の追加

ページ名を追加するには

  1. ページ ヘッダーで、[&ReportName] が含まれているテキスト ボックスの新しい行に、「Page Name:」と追加します。

  2. レポート データ ペインで、[組み込みフィールド] を展開し、追加したテキストの横に [PageName] をドラッグします。

  3. レポートの背景をクリックし、プロパティ ペインに [レポートのプロパティ] を表示します。

  4. [InitialPageName] に「SalesOrder」と入力します。

  5. グループ化ペインで、SalesOrderID グループをクリックします。[Tablix メンバー] のプロパティがプロパティ ペインに表示されていることを確認します。

  6. [グループ] を展開し、[PageName] を探して「=Fields!SalesOrderNumber.Value」と入力します。

このファイルを Excel にエクスポートした場合、タブ名はページ名に基づきます。

ページ番号を追加するには

  1. ページ ヘッダーで、テキスト ボックスを追加して次のテキストを入力します。

    • Sales Order Page: [&PageNumber]/[&TotalPages]

    • Report Page: [&OverallPageNumber]/[&OverallTotalPages]

  2. グループ化ペインで、SalesOrderID グループをクリックします。

  3. プロパティ ペインで、[Tablix メンバー] が選択されていることを確認します。[グループ][PageBreak] の順に展開し、ResetPageNumber を true に設定します。

レポート内でページを移動すると、グループのページ番号とレポート全体のページ番号の両方が表示されます。

レポート ユーザー向けの説明の追加

レポート ユーザー向けのメイン レポートに戻る方法の説明を追加するには

  1. ページ ヘッダーのすぐ下に、マスター レポートに戻る方法をエンド ユーザーに示すためのテキスト ボックスを追加します。次のテキストを追加します。

    メイン レポートに戻るには、ブラウザーの [戻る] ボタンを使用してください。

  2. 必要に応じて、テキスト ボックスの書式を設定します。

一覧の追加と構成

グループ行を含む一覧を追加するには

  1. シナリオの切り替え付きのテキストの説明の下に一覧を挿入します。

    既定では、一覧の詳細行に単一の Tablix セルが含まれています。手順 2. ~ 6. で、一覧のグループ行に単一の Tablix セルが含まれるように、グループ行を追加して詳細行を削除します。

  2. SalesOrder データセットからグループ化ペインの行グループに [SalesOrderID] をドラッグし、詳細グループの上にドロップします。

  3. グループ化ペインで、詳細グループを右クリックし、[グループの削除] をクリックします。

  4. [グループの削除] ダイアログ ボックスで、[グループおよび関連する行と列の削除] をクリックします。

  5. 選択した一覧で、単一の行グループであることを示す単一の角かっこが行ハンドルに表示されることを確認します。

  6. 最初の列の列ハンドルを右クリックし、[列の削除] をクリックします。

  7. [列の削除] ダイアログ ボックスで、[列のみの削除] をクリックします。

    Tablix に含まれるセルが、四角形を含み [SalesOrderID] でグループ化された単一のセルだけになります。この四角形は、単一の販売注文に関する情報のコンテナーになります。この後の手順で、このコンテナーに販売注文ヘッダーと販売注文の詳細を追加します。

  8. セルを右クリックし、[四角形のプロパティ] をクリックします。

  9. 名前を「OrderHeader_Contents」に変更します。

  10. グループ化ペインで、SalesOrderID グループを右クリックし、[グループ プロパティ] を開きます。

  11. [改ページ] で、[グループの各インスタンスの間] を選択します。

  12. 仕様上、各販売注文は新しいページに表示されます。

一覧の構成を確認するには

  1. 一覧の空のセルをクリックし、ツール バーで、[背景色][ホワイト スモーク] に設定します。四角形で入れ子になったアイテムを操作するときに、コンテナーがわかりやすくなります。

  2. 一覧の構成を確認するには、次の手順を実行します。

    1. データセット SalesOrder の SalesOrderID および TotalDue を四角形にドラッグします。

    2. SalesOrderID を右クリックし、[集計の方法] をポイントして、[第 1] をクリックします。

      これはグループ行であるため、式の中のフィールドには集計関数を使用します。

    3. TotalDue の書式を通貨に設定します。

    4. レポートを実行します。

    販売注文インスタンスごとに、販売注文番号と売上合計が表示される一覧が新しいページに表示されます。3 ページあり、各ページはそれぞれ、販売注文 57030、57031、および 57032 に対応しています。レポート内でページを移動すると、ページ ヘッダーの値が変わります。

    このレポートを使用して 1 つの販売注文の詳細を表示する場合は、@SalesOrderIDStart および @SalesOrderIDEnd に同じ SalesOrderID を設定します。

  3. デザイン ビューで、一覧からテキスト ボックスを削除します。

注文ヘッダーのレイアウトの作成

注文ヘッダーのレイアウトを 2 つの四角形のコンテナーに分けて作成し、それらを結合して、外側の四角形を一覧に追加します。

  1. ロゴ、注文番号、および OrderHeaderData の四角形を含む親の四角形のコンテナー。

  2. 注文ヘッダーのデータ フィールドを含む OrderHeaderData という名前の四角形のコンテナー。このレイアウトを作成すると、次の 3 つの横長のセクションの情報をまとめやすくなります。

    1. 請求先と出荷先の情報

    2. 店舗の連絡先の情報

    3. その他の情報: 日付、販売員、発注番号、および配送方法

四角形のコンテナーで注文ヘッダーを作成するには

  1. 一覧の外に、四角形を挿入します。

  2. ページ ヘッダーから四角形にロゴを移動します。

  3. テキスト ボックスを挿入して、次のテキストを入力します。

    1. Sales Order

    2. Order #: [SalesOrderNumber]

  4. コンテナーの左側にロゴをドラッグし、右側にテキスト ボックスをドラッグします。必要に応じて書式を設定します。

注文ヘッダーのデータ フィールド用の四角形を追加するには

  1. 一覧の外に四角形を挿入し、名前を「OrderHeaderData」に変更します。

  2. すべての販売注文ヘッダー情報を格納できる領域を確保するために、四角形を横方向に拡大します。

この四角形に、この後の手順で説明する横長の情報セクションをそれぞれ追加します。

請求先と出荷先の情報のセクションを作成するには

  1. テキスト ボックスを追加します。編集モードで、「Bill to:」と入力します。

  2. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. [Name]

    2. [BillAddress1]

    3. [BillCity], [BillStateProvince] [BillPostalCode]

    4. [BillCountryRegion]

  3. テキスト ボックスを追加します。編集モードで、「Ship to:」と入力します。

  4. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. [Name]

    2. [ShipAddress1]

    3. [ShipCity], [ShipStateProvince] [ShipPostalCode]

    4. [ShipCountryRegion]

  5. これらのテキスト ボックスの上部を揃えます。

店舗の連絡先の情報のセクションを作成するには

  1. テキスト ボックスを追加します。編集モードで、「Contact:」と入力します。

  2. サブレポートを挿入し、次の手順を実行します。

    1. [全般] ページで、サブレポート Store_Contacts_2008R2 を選択します。

    2. [パラメーター] ページで、パラメーターを追加します。

    3. [名前] に StoreID を設定し、[値] に [BusinessEntityID] を設定します。

  3. テキスト ボックスとサブレポートの上部を揃えます。

その他の情報のセクションを作成するには

  1. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. Date

    2. プレースホルダー テキスト。ラベルを ProcessedDateに設定し、値を [&ExecutionTime] に設定します。

  2. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. Order Date

    2. [OrderDate]

  3. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. Sales Person

    2. [SalesPerson], [JobTitle]

    3. [PhoneNumber]

  4. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. Purchase Order

    2. [PurchaseOrderNumber]

  5. 次のテキスト行を表示するテキスト ボックスを追加します。

    1. Shipment Method

    2. [ShipMethod]

  6. これらのテキスト ボックスの上部を揃え、必要に応じて幅を調整します。

注文ヘッダー情報を結合して一覧に移動するには

  1. OrderHeaderData の四角形をクリックし、ロゴの下にドラッグします。

  2. 販売注文ヘッダーの四角形を一覧にドラッグします。

  3. ロゴが含まれている四角形は、注文データを含むように拡大されます。

    一覧のセルは、販売注文ヘッダー情報を含むように拡大されます。

Sales Order Detail のレイアウトの作成

販売注文ごとに行アイテム (行アイテム番号など) を表示します。

行アイテムを表示するテーブルを追加するには

  1. 一覧で、行ハンドルをクリックしてドラッグすることにより、行の高さを拡大します。

  2. 作成した販売注文ヘッダーの下の領域にテーブルを挿入します。

  3. テーブルで、SalesOrder データセットから詳細行に次のデータをドラッグします。

    1. [OrderQty]

    2. [ProductNumber]

    3. [ProductName]

    4. [CarrierTrackingNumber]

    5. [UnitPrice]

    6. プレースホルダー テキストを追加します。ラベルを [Subtotal] に設定し、値を式 =Fields!OrderQty.Value * Fields!UnitPrice.Value に設定します。

    7. プレースホルダー テキストを追加します。ラベルを [Discount] に設定し、値には式 =0 - Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value を設定します。

    8. [LineTotal]

      注意

      このテキスト ボックスの名前が ItemTotal であることに注意してください。このテキスト ボックスは、後の手順で、ページ上のすべてのアイテムの合計を計算する式を記述するときに使用します。

  4. テーブルの先頭に列を挿入します。

  5. 列ヘッダーに「Line」と入力します。

  6. 行のテキスト ボックスに「=RowNum("OrderDetail")」と入力します。

  7. 必要に応じて書式を設定します。

合計行を追加するには

  1. [Qty] が含まれるセルを右クリックし、[合計の追加] をクリックします。

  2. 最終行の 4 列目のテキスト ボックスに、「Total Discount:」と入力します。

  3. 隣接するテキスト ボックスに、プレースホルダー テキストを追加します。

  4. ラベルを「Total Discount」に設定し、値を「=Sum(Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value)」に設定します。

  5. 最終行の 8 列目のテキスト ボックスに、「合計:」と入力します。

  6. 隣接するテキスト ボックスに、プレースホルダー テキストを追加します。

  7. ラベルを「Grand Total」に設定し、値を「[Sum(LineTotal)]」に設定します。

  8. 必要に応じて書式を設定します。

  9. テキスト ボックス、テーブル、および四角形の間の余白をすべて削除します。

Sales Order Detail テーブルの 25 行ごとの改ページの定義

詳細グループに対して 25 行ごとに改ページを設定するには

  1. グループ化ペインで、OrderDetails_Details_Group を右クリックし、[グループの追加] をポイントして [親グループ] をクリックします。

  2. グループを追加して、式 =Ceiling(RowNumber("OrderDetail")/25) を使用します。

  3. [改ページ] ページで、[グループの各インスタンスの間] を選択します。

集計途中経過のレポート変数の定義

レポート変数を追加するには

  1. レポートの背景を右クリックし、[レポートのプロパティ] を開きます。

  2. [変数] ページで、RunningTotal という名前のレポート変数を追加します。

  3. [値] を =0.0 に設定します。

集計途中経過を計算するカスタム コードの定義

カスタム コードを追加するには

  1. レポートの背景を右クリックし、[レポートのプロパティ] を開きます。

  2. [コード] ページで、次のコードを追加します。

    Public Function AddToVariable(var As Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable, ByVal increment As Double) As Double 
       var.Value = var.Value + increment
       return var.Value
    End Function 
    
    Public Function GetOrResetVariable(var As Microsoft.ReportingServices.ReportProcessing.OnDemandReportObjectModel.Variable, ByVal executeReset As Boolean) 
       if executeReset then
           var.Value = 0
       end if 
       return var.Value
    End Function
    

説明の追加

説明を追加するには

  1. ページ フッターに四角形を挿入します。

  2. 説明のテキスト ボックスを四角形に移動します。

  3. 説明を次のテキストに置き換えます。

    目的: 詳細レポート。ある範囲の注文の詳細が表示される、Employee_Sales_Summary_2008R2 にある個々の販売注文のドリルスルー レポートです。自由形式のレイアウト、一覧とテーブルとして使用される Tablix、サブレポート、ページの集計途中経過を計算するためのセッション変数、カスタム コード、画像、詳細行の数に基づく式ベースの改ページ、ページ名、レポート全体とグループ内でのページ番号割り当て、および条件に応じて非表示になるテキストが含まれます。

  4. レポートの背景をクリックし、プロパティ ペインに [レポートのプロパティ] を表示します。

  5. [説明] に、説明のテキストを貼り付けます。

ページ フッターへのページの集計途中経過の表示

ページの集計途中経過を追加するには

  1. 「Previous Page Total」と入力するためのテキスト ボックスを追加します。

  2. 隣に、次の式を表示するテキスト ボックスを追加します。

    =Code.GetOrResetVariable(Variables!RunningTotal, Globals!OverallPageNumber = 1)

  3. テキスト "現在のページの集計" を表示するテキスト ボックスを追加します。

  4. 隣にテキスト ボックスを追加し、次の式を入力します。

    =Sum(ReportItems!ItemTotal.Value)

  5. テキスト ボックスを追加して、「Running Page Total」と入力します。

  6. 隣にテキスト ボックスを追加し、次の式を入力します。

  7. =Code.AddToVariable(Variables!RunningTotal, Sum(Reportitems!ItemTotal.Value))

余白用のテキスト ボックスの追加

説明のテキストは条件に応じて表示されます。説明が非表示の場合、ページ合計のテキストがページの左側に表示されます。この場合もページ合計のテキストが右側に表示されるようにするには、条件付き表示が設定されていないテキスト ボックスを追加する必要があります。

余白用のテキスト ボックスを追加するには

  1. 四角形内の説明の上に、さらにテキスト ボックスを追加します。

  2. テキスト ボックスの幅を四角形と同じ幅に設定します。

この空のテキスト ボックスにより、説明が非表示の場合も、集計途中経過が定位置に表示されます。

プレビューと確認

レポートを配置して確認するには

  • レポートをプレビューし、次の点を確認します。

    1. 店舗のヘッダー領域および詳細領域が正しく表示されていること。

    2. サブレポートに店舗の連絡先情報が表示されていること。

    3. 現在のページと前のページのページ合計が計算されていること。

    4. 説明が表示されているか表示されていないかに関係なく、ページ合計が同じ位置に表示されること。

次の手順

これで、このレポートの作成が完了しました。他の AdventureWorks サンプル レポートを作成するには、「チュートリアル: AdventureWorks 2008R2 サンプル レポートの作成 (SSRS)」を参照してください。

関連項目

その他の技術情報

変更履歴

変更内容

  • レポートが、AdventureWorks2008R2_Base.rdl に基づくレポートに変更されました。