Поделиться через


Создание отчета Sales_Order_Detail_2008R2 (SSRS)

Этот учебник поможет в построении отчета Sales_Order_Detail_2008R2 из образцов отчетов AdventureWorks 2008R2.

Этот отчет является подробным отчетом, целевым для действия детализации поля SalesOrderNumber в отчете Employee_Sales_Summary_2008R2. В отчете отображаются подробные сведения о заголовках и элементах строк для последовательного диапазона заказов на продажу. Подробные сведения включают номер заказа, название магазина, адреса выставления счета и поставки, контактные данные продавца и другую информацию, доступную в базе данных 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 просмотрите иерархию элементов отчета на панели структуры документа. При построении отчета проверьте связи вложения между элементами отчета табликса и прямоугольниками.

    ПримечаниеПримечание

    Чтобы открыть панель структуры документа, войдите в меню Вид, наведите курсор на Другие окна и нажмите кнопку Структура документа.

  • На список не распространяется макет табликса. По умолчанию список содержит одну ячейку табликса, которая содержит прямоугольник. В этот отчет добавьте следующие элементы:

    • Дополнительный вложенный прямоугольник для эмблемы, номер заказа на продажу и информация в заголовке заказа на продажу.

    • Таблица с подробностями по каждой строке в заказе на продажу.

  • Копирование областей данных или прямоугольных контейнеров из исходного отчета и вставка их в текущий отчет могут производиться быстрее, чем выполнение всех действий по созданию элементов отчета и макета. Элементы отчета можно копировать и вставлять на вкладках с открытыми отчетами. После копирования элементов одного отчета перейдите на вкладку отчета, в который нужно произвести вставку, и щелкните место, в которое должны быть вставлены элементы. Действие вставки зависит от контекста. Например, нельзя вставить область данных в верхний колонтитул страницы.

Открытие проекта и создание копии отчета

  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. Замените Запрос на Укажите идентификатор первого заказа.

  3. Измените Тип данных на Integer.

  4. В области Значения по умолчанию добавьте значение 57030.

Настройка параметра отчета @SalesOrderIDEnd

  1. Откройте Свойства параметра для параметра @SalesOrderIDEnd.

  2. Замените Запрос на Укажите идентификатор последнего заказа.

  3. Измените Тип данных на Integer.

  4. В области Значения по умолчанию добавьте значение 57032.

Добавьте в заголовок страницы имена и числа

Добавление имен страниц

  1. Внесите на страницу заголовка, в текстовое поле, содержащее [&ReportName], следующий текст на новой строке: Имя страницы:.

  2. В области «Данные отчета» разверните узел Встроенные поля и перетащите PageName к только что добавленному тексту.

  3. Щелкните фон отчета, чтобы отобразить Свойства отчета на панели свойств.

  4. В поле InitialPageName введите SalesOrder.

  5. На панели группирования выберите группу SalesOrderID. Убедитесь в том, что на панели «Свойства» отображаются свойства элемента табликса.

  6. Разверните узел Группа, найдите PageName и введите =Fields!SalesOrderNumber.Value.

Если файл экспортируется в Excel, имена вкладок основываются на имени страницы.

Добавление номеров страниц

  1. В заголовке страницы добавьте текстовое поле со следующим текстом:

    • Страница заказов на продажу: [&PageNumber] из [&TotalPages]

    • Страница отчета: [&OverallPageNumber] из [&OverallTotalPages]

  2. В области группирования выберите группу SalesOrderID.

  3. Убедитесь в том, что на панели «Свойства» выбрано Элемент табликса. Разверните узел Группа, разверните узел PageBreak и задайте для параметра ResetPageNumber значение true.

При перелистывании отчета будут отображаться и номера страниц для группы, и номера страниц для всего отчета.

Добавление указаний для пользователя отчета

Добавление указаний по возвращению к главному отчету для пользователя отчета.

  1. Прямо под заголовком страницы вставьте текстовое поле, содержащее указания для конечного пользователя по возврату к главному отчету. Добавьте следующий текст:

    Для возврата к главному отчету используйте кнопку «Назад» браузера.

  2. Отформатируйте текстовые поля.

Добавление и настройка списка

Добавление списка со строкой группы

  1. Прямо под переключателем текста сценария вставьте Список.

    По умолчанию список содержит в строке сведений одну ячейку табликса. В шагах 2-6 добавьте строку группы и удалите строку подробностей, чтобы в списке на строку группы приходилось по одной ячейке табликса.

  2. Из набора данных SalesOrder перетащите идентификатор [SalesOrderID] в группы строк на панель группирования и поместите его над группой подробностей.

  3. В области группирования щелкните правой кнопкой мыши группу подробностей и выберите команду Удалить группу.

  4. В диалоговом окне Удаление группы выберите Удалить группу и связанные строки и столбцы.

  5. Убедитесь, что в выбранном списке у маркера строки отображается одна квадратная скобка, обозначающая одну группу строк.

  6. Щелкните правой кнопкой мыши маркер первого столбца и выберите команду Удалить столбцы.

  7. В диалоговом окне Удаление столбцов выберите Удалить только столбцы.

    Теперь в табликсе имеется одна ячейка, которая содержит прямоугольник и сгруппирована по идентификатору [SalesOrderID]. Прямоугольник служит контейнером для информации об отдельном заказе на продажу. В последующих шагах добавьте в этот контейнер заголовок для заказа на продажу и подробности по этому заказу.

  8. Щелкните правой кнопкой мыши ячейку и выберите пункт Свойства прямоугольника.

  9. Смените имя на OrderHeader_Contents.

  10. В области группирования щелкните правой кнопкой мыши группу SalesOrderID и откройте окно Свойство группы.

  11. На вкладке Разрывы страниц выберите Между всеми экземплярами группы.

  12. По умолчанию каждый заказ на продажу начинается с новой страницы.

Проверка конфигурации списка

  1. Щелкните пустую ячейку в списке и на панели инструментов задайте для параметра Цвет фона значение Белый дым. Более удобно, если при работе с элементами, вложенными в прямоугольник, виден контейнер.

  2. Порядок проверки конфигурации списка:

    1. Из набора данных SalesOrder перетащите поля SalesOrderID и TotalDue в прямоугольник.

    2. Щелкните правой кнопкой мыши SalesOrderID, укажите Суммировать по, затем выберите Первый.

      Поскольку это строка группы, используйте агрегатные функции для полей в выражении.

    3. Форматирование значения TotalDue в качестве валюты

    4. Запустите отчет.

    Для каждого экземпляра заказа на продажу на новой странице отображается список, а также номер заказа на продажу и суммарный объем продаж. Должны отобразиться три страницы, по одной для заказов на продажу 57 030, 57 031 и 57 032. При пролистывании отчета значения в заголовке страницы меняются.

    Если этот отчет используется для предоставления сведений по одному заказу на продажу, задайте для параметров @SalesOrderIDStart и @SalesOrderIDEnd одинаковое значение SalesOrderID.

  3. Перейдите в режим конструктора и удалите из списка текстовые поля.

Конструирование макета заголовка заказа

Сконструируйте макет заголовка заказа в двух отдельных прямоугольниках, объедините их и добавьте в список внешний прямоугольник.

  1. Родительский прямоугольный контейнер для эмблемы, номера заказа и прямоугольника для данных OrderHeaderData.

  2. Прямоугольный контейнер с именем OrderHeaderData для полей данных заголовка. При конструировании макета рекомендуется представить информацию в следующих трех горизонтальных разделах.

    1. Сведения о выставлении счетов и отправке.

    2. Контактные данные магазина.

    3. Прочая информация: даты, менеджеры по продажам, номера заказов на покупку и методы отгрузки

Создание заголовка заказа в прямоугольном контейнере

  1. Вне списка вставьте Прямоугольник.

  2. Переместите эмблему из заголовка страницы в прямоугольник.

  3. Вставьте текстовое поле со следующим текстом:

    1. Заказ на продажу

    2. Номер заказа [SalesOrderNumber]

  4. Перетащите эмблему в левую часть контейнера, а текстовое поле — в правую часть. Примените требуемое форматирование.

Добавление прямоугольника для полей данных заголовка заказа

  1. Вне списка вставьте Прямоугольник и переименуйте его в OrderHeaderData.

  2. Растяните прямоугольник по всей странице, чтобы хватило места на всю информацию заголовка заказа на продажу.

Внесите в этот прямоугольник все горизонтальные разделы, описанные в следующих процедурах.

Создание раздела информации о выставлении счетов и отправке.

  1. Добавьте текстовое поле. В режиме изменения введите Кому выставить счет:

  2. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. [Name]

    2. [BillAddress1]

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

    4. [BillCountryRegion]

  3. Добавьте текстовое поле. В режиме изменения введите Кому доставить:

  4. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. [Name]

    2. [ShipAddress1]

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

    4. [ShipCountryRegion]

  5. Выровняйте верхние края этих текстовых полей.

Создание раздела контактной информации магазина

  1. Добавьте текстовое поле. В режиме изменения введите Контактное лицо:

  2. Вставьте Вложенный отчет и выполните следующие действия.

    1. На странице Общие выберите вложенный отчет Store_Contacts_2008R2.

    2. На странице Параметры добавьте параметр.

    3. Задайте полю Name значение StoreID, а полю Value — [BusinessEntityID].

  3. Выровняйте верхние края текстового поля и вложенного отчета.

Создание раздела прочей информации

  1. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. Date

    2. Текст заполнителя. Задайте для метки значение ProcessedDate и установите значение в [&ExecutionTime].

  2. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. Дата заказа

    2. [OrderDate]

  3. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. Менеджер по продажам

    2. [SalesPerson], [JobTitle]

    3. [PhoneNumber]

  4. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. Заказ на покупку

    2. [PurchaseOrderNumber]

  5. Добавьте текстовое поле, в котором отображаются следующие текстовые строки:

    1. Метод доставки

    2. [ShipMethod]

  6. Выровняйте верхние края этих текстовых полей и настройте их ширину.

Объединение информации в заголовке заказа и перемещение ее в список

  1. Захватите прямоугольник OrderHeaderData и перетащите его под эмблему.

  2. Перетащите прямоугольник заголовка заказа на продажу в список.

  3. Прямоугольник с эмблемой расширится, чтобы включить данные заказа.

    Ячейка списка увеличится, чтобы вместить данные заголовка заказов на продажу.

Конструирование макета подробностей заказа на продажу

Отображение элементов строк для каждого заказа на продажу, включая число элементов строк.

Добавление таблицы для отображения элементов строк

  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. В заголовке столбца введите Строка.

  6. В текстовом поле в строке введите =RowNum("OrderDetail").

  7. Примените требуемое форматирование.

Добавление строки итога

  1. Щелкните правой кнопкой мыши ячейку, которая содержит поле [Qty], а затем выберите Добавить итог.

  2. В текстовом поле последней строки в четвертом столбце введите Общая скидка:.

  3. В смежное текстовое поле добавьте текст заполнителя.

  4. Установите метку в Общая скидка, а значение — в =Sum(Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value).

  5. В текстовом поле последней строки, в восьмом столбце введите Итог:.

  6. В смежное текстовое поле добавьте текст заполнителя.

  7. Установите метку в Общий итог, а значение — в [Sum(LineTotal)].

  8. Примените требуемое форматирование.

  9. Удалите все лишние промежутки между текстовыми полями, таблицами и прямоугольниками.

В таблице подробностей заказа на продажу установите разрыв страницы через каждые 25 строк.

Настройка разрыва страницы через каждые 25 строк для группы сведений

  1. В области группирования щелкните правой кнопкой мыши поле OrderDetails_Details_Group, укажите Добавить группу, затем Родительская группа.

  2. Добавьте группу и используйте следующее выражение: =Ceiling(RowNumber("OrderDetail")/25)

  3. На вкладке Разрывы страниц выберите Между всеми экземплярами группы.

Задайте переменную отчета для RunningTotal.

Добавление переменной отчета

  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. Включает произвольный макет, табликс, используемый в качестве списка и таблицы, вложенный отчет, переменные сеанса для вычисления нарастающих сумм для страниц, пользовательский код, изображение, разрывы страниц, основанные на выражении с учетом количества строк сведений, имена страниц, нумерацию страниц в отчете и внутри группы, а также скрываемый по условию текст.

  4. Щелкните фон отчета, чтобы отобразить область Свойства отчета на панели свойств.

  5. В поле Описание вставьте текст описания.

Отображение промежуточных итогов для страницы в нижнем колонтитуле

Добавление промежуточных итогов для страниц

  1. Добавьте текстовое поле со следующим текстом: Предыдущий промежуточный итог для страницы

  2. Добавьте рядом текстовое поле со следующим выражением:

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

  3. Добавьте текстовое поле со следующим текстом: Текущий промежуточный итог для страницы

  4. Добавьте рядом текстовое поле со следующим выражением:

    =Sum(ReportItems!ItemTotal.Value)

  5. Добавьте текстовое поле со следующим текстом: Промежуточный итог для страницы

  6. Добавьте рядом текстовое поле со следующим выражением:

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

Добавление текстового поля разделителя

Текст описания имеет условную видимость. Когда описание скрыто, полный текст страницы подготавливается к просмотру в левой части страницы. Чтобы поддерживать положение полного текста страницы на тестовой платформе, необходимо добавить текстовое поле без условной видимости.

Добавление текстового поля разделителя

  1. Добавьте в прямоугольник дополнительное текстовое поле над описанием.

  2. Задайте ширину текстового поля равной ширине прямоугольника.

При пустом текстовом поле, если описание не видимо, промежуточные итоги остаются на месте.

Предварительный просмотр и проверка

Развертывание и проверка отчета

  • Просмотрите отчет и убедитесь в следующем.

    1. Области с названием магазина и сведениями отображаются, как и ожидалось.

    2. Во вложенном отчете отображаются контактные данные магазина.

    3. Промежуточные итоги вычисляются для текущей и предыдущей страниц.

    4. Итоги страницы подготавливаются к просмотру в одном и том же месте, независимо от видимости текста описания.

Следующие шаги

Построение отчета завершено. Сведения о построении других образцов отчетов AdventureWorks см. в разделе Учебники. Создание образцов отчетов AdventureWorks 2008R2 (SSRS).

См. также

Другие ресурсы

Журнал изменений

Обновленное содержимое

  • Измененный отчет будет основан на файле AdventureWorks2008R2_Base.rdl