Criando o relatório Sales_Order_Detail_2008R2 (SSRS)
Este tutorial ajuda a criar o relatório Sales_Order_Detail_2008R2 a partir dos relatórios de exemplo AdventureWorks 2008R2.
Este relatório é o relatório detalhado que é o destino da ação de detalhamento no relatório Employee_Sales_Summary_2008R2, para o campo SalesOrderNumber. O relatório exibe o cabeçalho de vendas e os detalhes dos itens de linha de vendas para um intervalo consecutivo de ordens de venda. As informações detalhadas incluem o número da ordem, o nome da loja, os endereços de envio e de cobrança, as informações de contato do vendedor e outros detalhes disponíveis no banco de dados AdventureWorks2008R2. Para obter mais informações sobre o pacote de relatórios e suas relações, consulte Tutoriais: Criando relatórios de exemplo do AdventureWorks 2008R2 (SSRS).
O que você aprenderá
Neste tutorial, você aprenderá a executar as seguintes tarefas:
Adicionar um conjunto de dados e uma consulta que recupera dados detalhados de ordens de venda para um intervalo de ordens de venda.
Configurar os parâmetros de relatório para o primeiro e o último número de ordem de vendas no intervalo.
Adicionar as seguintes informações ao cabeçalho da página:
Nomes das páginas. Se você exportar o relatório para o Excel, o nome da guia de uma planilha será baseado no nome da página.
Números de páginas de todo o relatório.
Números de páginas dentro de cada ordem de vendas.
Instruções para o usuário do relatório sobre como retornar ao relatório principal.
Adicionar um lista com um único grupo de linhas com base em SalesOrderID. Você adicionará o seguinte à lista:
Um Retângulo aninhado como um contêiner para ajudar a controlar o layout do cabeçalho e informações detalhadas de ordens de venda.
Várias caixas de texto para exibir informações de cabeçalho de ordem de vendas.
Um sub-relatório para exibir números de telefone de vários contatos da loja.
Uma tabela para exibir detalhes de cada item de linha em uma ordem de vendas.
Adicionar código personalizado para calcular os totais de páginas para páginas sucessivas.
Definir uma variável de relatório para simplificar a expressão de total.
Definir uma expressão de grupo personalizada nas linhas de detalhes para iniciar uma nova página a cada 25 linhas.
Tempo estimado para concluir este tutorial: 30 minutos.
Requisitos
Para obter informações sobre os requisitos, consulte Pré-requisitos para os relatórios de exemplo AdventureWorks 2008R2 (SSRS).
Este tutorial pressupõe que você tenha concluído Criando o projeto do servidor de relatório o projeto AdventureWorks2008R2_Base (SSRS).
Dicas
O relatório detalhado de ordens de compra é um relatório de forma livre que usa regiões de dados, retângulos, regiões de dados aninhadas e caixas de texto aninhadas para organizar os dados. A hierarquia de confinamento desses itens é importante. Revise as dicas em Dicas de design de relatórios (Construtor de Relatórios 3.0 e SSRS) e, em seguida, use as dicas a seguir para ajudar a criar este relatório:
É recomendável abrir o relatório de exemplo Sales_Order_Detail_2008R2 e o exibi-lo junto com este tutorial. Depois de abrir o Sales_Order_Detail_2008R2, exiba a hierarquia de itens do relatório no painel de Estrutura de Tópicos do Documento. À medida que você criar o relatório, verifique as relações de confinamento entre os itens e os retângulos do relatório tablix.
Observação Para abrir o painel Estrutura de Tópicos do Documento, no menu Exibir, clique em Outras Janelas e clique em Estrutura de Tópicos do Documento.
Uma lista é um layout tablix de forma livre. Por padrão, uma lista contém uma única célula tablix que contém um retângulo. Neste relatório, você adicionará o seguinte:
Um retângulo aninhado adicional para conter o logotipo, o número da ordem de vendas e informações de cabeçalho da ordem de vendas.
Uma tabela para exibir detalhes da ordem de vendas para cada linha.
Você pode achar mais fácil copiar e colar regiões de dados ou contêineres de retângulos entre o relatório original e a sua cópia, em vez de ter o trabalho de criar os itens e o layout do relatório. Você pode copiar e colar itens de relatório entre exibições com guias de relatórios abertos. Depois que você copiar itens de um relatório, clique na guia do relatório para o qual deseja copiar e, em seguida, clique no local onde deseja que os itens sejam colados. A ação de colagem leva em conta o contexto. Por exemplo, você não pode colar uma região de dados em um cabeçalho de página.
Para abrir o projeto e fazer uma cópia de um relatório
No Business Intelligence Development Studio, abra o projeto do Servidor de Relatório AdventureWorks 2008R2.
No Gerenciador de Soluções, proceda da seguinte maneira:
Clique com o botão direito do mouse em AdventureWorks2008R2_Base.rdl e clique em Copiar.
Clique com o botão direito do mouse no nó do projeto e clique em Colar.
Renomeie o relatório copiado para Sales_Order_Detail_2008R2.rdl.
Para criar o conjunto de dados para as vendas individuais
No painel Dados do Relatório, adicione um conjunto de dados inserido denominado SalesOrder. Use a fonte de dados compartilhada AdventureWorks2008R2 e a seguinte consulta:
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))
A consulta do conjunto de dados gera dados para várias ordens de venda em um intervalo.
Para configurar o parâmetro de relatório @SalesOrderIDStart
Abra Propriedades do parâmetro para @SalesOrderIDStart.
Altere Aviso para ID do primeiro pedido?
Altere Tipo de dados para Inteiro.
Em Valores padrão, adicione um valor e defina-o como 57030.
Para configurar o parâmetro de relatório @SalesOrderIDEnd
Abra Propriedades do parâmetro para @SalesOrderIDEnd.
Altere Aviso para ID do Último Pedido?
Altere Tipo de dados para Inteiro.
Em Valores padrão, adicione um valor e defina-o como 57032.
Adicionar nomes e números ao cabeçalho da página
Para adicionar nomes de página
No cabeçalho da página, na caixa de texto que contém [&ReportName], adicione o texto a seguir em uma nova linha: Nome da Página:.
No painel Dados do Relatório, expanda Campos Internos e arraste PageName ao lado do texto que você acabou de adicionar.
Clique no plano de fundo do relatório para exibir Propriedades do Relatório no painel Propriedade.
Em InitialPageName, digite SalesOrder.
No painel Agrupamento, clique no grupo SalesOrderID. Verifique se as propriedades de Membro do Tablix são exibidas no painel Propriedades.
Expanda Grupo, localize PageName e digite =Fields!SalesOrderNumber.Value.
Se você exportar esse arquivo para o Excel, os nomes da guias serão baseados no nome da página.
Para adicionar números de página
No cabeçalho da página, adicione uma caixa de texto com o seguinte texto:
Página Ordem de Venda: [&PageNumber] de [&TotalPages]
Página do Relatório: [&OverallPageNumber] de [&OverallTotalPages]
No painel Agrupamento, clique no grupo SalesOrderID.
No painel Propriedades, verifique se um Membro do Tablix está selecionado. Expanda Grupo, expanda PageBreak e defina ResetPageNumber como true.
Ao paginar o relatório, o número de páginas do grupo e o número de páginas de todo o relatório são exibidos.
Adicionar instruções para o usuário do relatório
Para adicionar instruções para o usuário do relatório sobre como retornar ao relatório principal
Exatamente abaixo do cabeçalho da página, adicione uma caixa de texto de instruções para o usuário final sobre como retornar ao relatório mestre. Adicione o seguinte texto:
Use o botão Voltar do navegador para voltar ao relatório principal.
Formate as caixas de texto como desejar.
Adicionar e configurar uma lista
Para adicionar uma lista com linha de grupo
Abaixo das instruções de texto de alternância de cenário, insira uma Lista.
Por padrão, a lista contém uma única célula de tablix em uma linha de detalhes. Nas etapas 2 a 6, você adicionará uma linha de grupo e removerá a linha de detalhes de forma que a lista contenha uma única célula tablix em uma linha de grupo.
No conjunto de dados SalesOrder, arraste [SalesOrderID] para Grupos de Linhas no painel Agrupamento e arraste-o para cima do grupo de detalhes.
No painel Agrupamento, clique com o botão direito do mouse no Grupo de detalhes e clique em Excluir Grupo.
Na caixa de diálogo Excluir Grupo, clique em Excluir grupo e linhas e colunas relacionadas.
Na lista selecionada, verifique se a alça da linha exibe um único colchete, o que indica um único grupo de linhas.
Clique com o botão direito do mouse na alça da primeira coluna e clique em Excluir Colunas.
Na caixa de diálogo Excluir Colunas, clique em Excluir colunas apenas.
O tablix agora tem uma única célula que contém um retângulo e está agrupado por[SalesOrderID]. Esse retângulo é o contêiner de informações sobre uma única ordem de vendas. Em etapas posteriores, você adicionará cabeçalho da ordem de vendas e detalhes da ordem de vendas a esse contêiner.
Clique com o botão direito do mouse na célula e clique em Propriedades do Retângulo.
Altere o nome para OrderHeader_Contents.
No painel Agrupamento, clique com o botão direito do mouse no grupo SalesOrderID e abra Propriedades do Grupo.
Em Quebras de Página, selecione Entre cada instância de um grupo.
Por design, cada ordem de vendas começa em uma nova página.
Para verificar a configuração da lista
Clique na célula vazia da lista e, na barra de ferramentas, defina a Cor do Plano de Fundo como Platina. Trabalhar com itens aninhados em um retângulo, ajuda a ver o contêiner.
Para verificar a configuração da lista, proceda da seguinte maneira:
No conjunto de dados SalesOrder, arraste SalesOrderID e TotalDue para o retângulo.
Clique com o botão direito do mouse em SalesOrderID, aponte para Resumir por e clique em Primeira.
Como essa é uma linha de grupo, use funções de agregação para campos em uma expressão.
Formate TotalDue como moeda.
Execute o relatório.
Para cada instância de ordem de venda, a lista é exibida em uma nova página e exibe o número da ordem de venda e as vendas totais. Deve haver três páginas, uma para cada ordem de venda: 57030, 57031 e 57032. Ao navegar pelo relatório, os valores de cabeçalho de página se alteram.
Ao usar esse relatório para gerar detalhes de uma única ordem de vendas, você definirá @SalesOrderIDStart e @SalesOrderIDEnd como o mesmo SalesOrderID.
Em Exibição do Design, exclua as caixas de texto da lista.
Criar o layout do cabeçalho da ordem
Você criará o layout do cabeçalho da ordem em dois contêineres de retângulo separados, os combinará e, em seguida, adicionará o retângulo exterior à Lista.
Um contêiner de retângulo pai para o logotipo, o número da ordem e o retângulo de OrderHeaderData.
Um contêiner de retângulo denominado OrderHeaderData para os campos de dados do cabeçalho da ordem. A criação desse layout ajuda a prever as informações nas três seguintes seções horizontais:
As informações de cobrança e de remessa
As informações de contato da loja
As informações restantes: data, vendedor, número da ordem de compra e método de remessa
Para criar o cabeçalho da ordem em um contêiner de retângulo
Fora da lista, insira um Retângulo.
Mova o logotipo do cabeçalho da página para o retângulo.
Insira uma caixa de texto com o seguinte texto:
Ordem de Vendas
Nº da Ordem: [SalesOrderNumber]
Arraste o logotipo para o lado esquerdo do contêiner e a caixa de texto para o lado direito. Formate conforme necessário.
Para adicionar um retângulo para os campos de dados do cabeçalho da ordem
Fora da lista, insira um Retângulo e altere o nome para OrderHeaderData.
Expanda o retângulo pela página para abrir espaço para todas as informações de cabeçalho da ordem de vendas.
A esse retângulo, adicione cada seção de informações horizontais descrita nos próximos procedimentos.
Para criar a seção de informações de cobrança e de remessa
Adicione uma caixa de texto. No modo de edição, digite Cobrar:
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
[Name]
[BillAddress1]
[BillCity], [BillStateProvince] [BillPostalCode]
[BillCountryRegion]
Adicione uma caixa de texto. No modo de edição, digite Enviar para:
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
[Name]
[ShipAddress1]
[ShipCity], [ShipStateProvince] [ShipPostalCode]
[ShipCountryRegion]
Alinhe as partes superiores dessas caixas de texto.
Para criar a seção de informações de contato da loja
Adicione uma caixa de texto. No modo de edição, digite Contato:
Insira um Sub-relatório e proceda da seguinte maneira:
Na página Geral, selecione o sub-relatório Store_Contacts_2008R2.
Na página Parâmetros, adicione um parâmetro.
Defina Nome como StoreID e Valor como [BusinessEntityID].
Alinhe a parte superior da caixa de texto e o sub-relatório.
Para criar a seção de informações restantes
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
Data
Texto do espaço reservado. Defina o rótulo como ProcessedDate e o valor como [&ExecutionTime].
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
Data da Ordem
[OrderDate]
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
Vendedor
[SalesPerson], [JobTitle]
[PhoneNumber]
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
Ordem de compra
[PurchaseOrderNumber]
Adicione uma caixa de texto que exiba as seguintes linhas de texto:
Método de remessa
[ShipMethod]
Alinhe as partes superiores dessas caixas de texto e ajuste sua largura conforme necessário.
Para combinar as informações de cabeçalho da ordem e movê-las para a Lista
Capte o retângulo OrderHeaderData e arraste-o para baixo do logotipo.
Arraste o retângulo de cabeçalho da ordem de vendas para a lista.
O retângulo com o logotipo é expandido para incluir os dados da ordem.
A célula da lista é expandida para incluir as informações de cabeçalho da ordem de vendas.
Criar o layout de detalhes da ordem de vendas
Exiba os itens de linha, inclusive o número de um item de linha, de cada ordem de vendas.
Para adicionar uma tabela para mostrar os itens de linha
Na lista, capte a alça da linha e expanda a altura da linha.
Abaixo do cabeçalho da ordem de vendas no espaço que você acabou de criar, insira uma Tabela.
Na tabela, arraste os seguintes dados do conjunto de dados de SalesOrder para a linha de detalhes:
[OrderQty]
[ProductNumber]
[ProductName]
[CarrierTrackingNumber]
[UnitPrice]
Adicione o texto do espaço reservado. Defina o rótulo como [Subtotal] e o valor da seguinte expressão: =Fields!OrderQty.Value * Fields!UnitPrice.Value
Adicione o texto do espaço reservado. Defina o rótulo como [Desconto] e o valor como a seguinte expressão: =0 - Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value
[LineTotal]
Observação Observe que essa caixa de texto é denominada ItemTotal. Você usará esse nome de caixa de texto posteriormente quando escrever uma expressão para calcular o total para todos os itens da página.
Insira uma coluna no início da tabela.
No cabeçalho da coluna, digite Linha.
Na caixa de texto na linha, digite =RowNum("OrderDetail")
Formate conforme necessário.
Para adicionar uma linha de total
Clique com o botão direito do mouse na célula que contém [Qty] e clique em Adicionar Total.
Na caixa de texto da última linha, na quarta coluna, digite Desconto Total:.
Na caixa de texto adjacente, adicione um texto de espaço reservado.
Defina o rótulo como Desconto Total e o valor como =Sum(Fields!UnitPrice.Value * Fields!OrderQty.Value * Fields!UnitPriceDiscount.Value)
Na caixa de texto da última linha, na oitava coluna, digite Total:.
Na caixa de texto adjacente, adicione um texto de espaço reservado.
Defina o rótulo como Total Geral e o valor como [Sum(LineTotal)]
Formate da maneira que desejar.
Remova todo o espaço adicional entre as caixas de texto, as tabelas e os retângulos.
Defina uma quebra de página a cada 25 linhas na tabela Detalhes da Ordem de Vendas
Para definir uma quebra de página a cada 25 linhas no grupo de detalhes
No painel Agrupamento, clique com o botão direito do mouse em OrderDetails_Details_Group, aponte para Adicionar Grupo e clique em Grupo Pai.
Adicione um grupo e use a seguinte expressão: =Ceiling(RowNumber("OrderDetail")/25)
Na página Quebras de Página, selecione Entre cada instância de um grupo.
Definir uma variável de relatório para RunningTotals
Para adicionar uma variável de relatório
Clique com o botão direito do mouse no plano de fundo do relatório e abra Propriedades do Relatório.
Na página Variáveis, adicione uma variável de relatório denominada RunningTotal.
Defina Valor como =0.0
Definir código personalizado para calcular somas acumuladas
Para adicionar um código personalizado
Clique com o botão direito do mouse no plano de fundo do relatório e abra Propriedades do Relatório.
Na página Código, adicione o seguinte código:
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
Adicionar a descrição
Para adicionar a descrição
Insira um Retângulo no rodapé da página.
Mova a caixa de texto de descrição para dentro do retângulo.
Substitua a descrição pelo seguinte texto:
Objetivo: Relatório detalhado. Exibe detalhes de um intervalo de ordens, sendo um relatório de detalhamento de uma ordem de vendas individual de Employee_Sales_Summary_2008R2. Inclui um layout de formato livre, o tablix usado como lista e tabela, um sub-relatório, variáveis de sessão para calcular somas acumuladas das páginas, código personalizado, imagem, quebras de páginas com base em expressões de acordo com o número de linhas de detalhes, nomes das páginas, numeração de página com relatório e dentro do grupo e texto condicionalmente oculto.
Clique no plano de fundo do relatório para exibir Propriedades do Relatório no painel Propriedades.
Em Descrição, cole o texto da descrição.
Exibir somas acumuladas das páginas no rodapé da página
Para adicionar somas acumuladas das páginas
Adicione uma caixa de texto para o seguinte texto: Total da Página Anterior
Adicione uma caixa de texto adjacente com a seguinte expressão:
=Code.GetOrResetVariable(Variables!RunningTotal, Globals!OverallPageNumber = 1)
Adicione uma caixa de texto para o seguinte texto: Total de Página Atual
Adicione uma caixa de texto adjacente com a seguinte expressão:
=Sum(ReportItems!ItemTotal.Value)
Adicione uma caixa de texto com o seguinte texto: Total acumulado da Página
Adicione uma caixa de texto adjacente com a seguinte expressão:
=Code.AddToVariable(Variables!RunningTotal, Sum(Reportitems!ItemTotal.Value))
Adicionar uma caixa de texto de espaçador
O texto da descrição tem visibilidade condicional. Quando a descrição está ocultada, o texto do total da página é renderizado no lado esquerdo da página. Para manter a posição do texto do total da página na direita, você deve adicionar uma caixa de texto que não tenha visibilidade condicional.
Para adicionar uma caixa de texto de espaçador
Para o retângulo, adicione uma caixa de texto adicional acima da descrição.
Defina a largura da caixa de texto com a mesma largura do retângulo.
A caixa de texto vazia mantém as somas acumuladas no lugar quando a descrição não estiver visível.
Visualizar e verificar
Para implantar e verificar o relatório
Visualize o relatório e verifique o seguinte:
O cabeçalho da loja e as áreas de detalhes são renderizadas conforme esperado.
O sub-relatório exibe informações de contato da loja.
Os totais das páginas são calculados para a página atual e para a página anterior.
Os totais das páginas não renderizados no mesmo local quer a descrição esteja visível ou não.
Próximas etapas
Você concluiu a criação deste relatório. Para criar outros relatórios de exemplo da AdventureWorks, consulte Tutoriais: Criando relatórios de exemplo do AdventureWorks 2008R2 (SSRS).
Histórico de alterações
Conteúdo atualizado |
---|
|