Thursday, 20 December 2012

SSIS Tutorial:how to create sql integration sevice in reporitng

SSIS Tutorial: The Import and Export Wizard

Though SSIS is almost infinitely customizable, Microsoft has produced a simple wizard to handle some of the most common ETL tasks: importing data to or exporting data from a SQL Server database. The Import and Export Wizard protects you from the complexity of SSIS while allowing you to move data between any of these data sources:
  • SQL Server databases
  • Flat files
  • Microsoft Access databases
  • Microsoft Excel worksheets
  • Other OLE DB providers
You can launch the Import and Export wizard from the Tasks entry on the shortcut menu of any database in the Object Explorer window of SQL Server Management Studio.
Try It!
To import some data using the Import and Export Wizard, follow these steps:
  1. Launch SQL Server Management Studio and log in to your test server.
  2. Open a new query window.
  3. Select the master database from the Available Databases combo box on the toolbar.
  4. Enter this text into the query window:
  5. CREATE DATABASE Chapter16
  6. Click the Execute toolbar button to create a new database.
  7. Expand the Databases node in Object Explorer
  8. Right-click on the Chapter16 database and select Tasks > Import Data.
  9. Read the first page of the Import and Export Wizard and click Next.
  10. Select SQL Native Client for the data source and provide login information for your test server.
  11. Select the AdventureWorks database as the source of the data to import.
  12. Click Next.
  13. Because you're importing data, the next page of the wizard will default to connection information for the Chapter16 database. Click Next.
  14. Select Copy Data From One or More Tables or Views and click Next. Note that if you only want to import part of a table you can use a query as the data source instead.
  15. Select the HumanResources.Department, HumanResources.Employee, HumanResources.EmployeeAddress, HumanResources.EmployeeDepartmentHistory, and HumanResources.EmployeePayHistory tables, as show in Figure 16-1. As you select tables, the wizard will automatically assign names for the target tables.
    Figure 16-1: Selecting tables to import
    Figure 16-1: Selecting tables to import


  16. Click the Edit button in the Mapping column for the HumanResources.Department table.
  17. The Column Mappings dialog box lets you change the name, data type, and other properties of the destination table columns. You can also set other options here, such as whether to overwrite or append data when importing data to an existing table. Click Cancel when you're done inspecting the options.
  18. Click Next.
  19. Check Execute Immediately and click Next.
  20. Click Finish to perform the import. SQL Server will display progress as it performs the import, as shown in Figure 16-2.
    Figure 16-2: Import Wizard results
    Figure 16-2: Import Wizard results


  21. Click Close to dismiss the report.
  22. Expand the Tables node of the Chapter16 database to verify that the import succeeded.
In addition to executing its operations immediately, the Import and Export Wizard can also save a package for later execution. You'll learn more about packages in the remainder of this chapter.

SSIS Tutorial: Creating a Package

The Import and Export Wizard is easy to use, but it only taps a small part of the functionality of SSIS. To really appreciate the full power of SSIS, you'll need to use BIDS to build an SSIS package. A package is a collection of SSIS objects including:
  • Connections to data sources.
  • Data flows, which include the sources and destinations that extract and load data, the transformations that modify and extend data, and the paths that link sources, transformations, and destinations.
  • Control flows, which include tasks and containers that execute when the package runs. You can organize tasks in sequences and in loops.
  • Event handlers, which are workflows that runs in response to the events raised by a package, task, or container.
You'll see how to build each of these components of a package in later sections of the chapter, but first, let's fire up BIDS and create a new SSIS package.
Try It!
To create a new SSIS package, follow these steps:
  1. Launch Business Intelligence Development Studio.
  2. Select File > New > Project.
  3. Select the Business Intelligence Projects project type.
  4. Select the Integration Services Project template.
  5. Select a convenient location.
  6. Name the new project ISProject1 and click OK.
Figure 16-3 shows the new, empty package.
Figure 16-3: Empty SSIS package
Figure 16-3: Empty SSIS package

SSIS Tutorial: Working with Connection Managers

SSIS uses connection managers to integrate different data sources into packages. SSIS includes a wide variety of different connection managers that allow you to move data around from place to place. Table 16-1 lists the available connection managers.
Connection Manager Handles
ADO Connection Manager Connecting to ADO objects such as a Recordset.
ADO.NET Connection Manager Connecting to data sources through an ADO.NET provider.
Analysis Services Connection Manager Connecting to an Analysis Services database or cube.
Excel Connection Manager Connecting to an Excel worksheet.
File Connection Manager Connecting to a file or folder.
Flat File Connection Manager Connecting to delimited or fixed width flat files.
FTP Connection Manager Connecting to an FTP data source.
HTTP Connection Manager Connecting to an HTTP data source.
MSMQ Connection Manager Connecting to a Microsoft Message Queue.
Multiple Files Connection Manager Connecting to a set of files, such as all text files on a particular hard drive.
Multiple Flat Files Connection Manager Connecting to a set of flat files.
ODBC Connection Manager Connecting to an ODBC data source.
OLE DB Connection Manager Connecting to an OLE DB data source.
SMO Connection Manager Connecting to a server via SMO.
SMTP Connection Manager Connecting to a Simple Mail Transfer Protocol server.
SQL Server Mobile Connection Manager Connecting to a SQL Server Mobile database.
WMI Connection Manager Connecting to Windows Management Instrumentation data.
Table 16-1: Available Connection Managers
To create a Connection Manager, you right-click anywhere in the Connection Managers area of a package in BIDS and choose the appropriate shortcut from the shortcut menu. Each Connection Manager has its own custom configuration dialog box with specific options that you need to fill out.
Try It!
To add some connection managers to your package, follow these steps:
  1. Right-click in the Connection Managers area of your new package and select New OLE DB Connection.
  2. Note that the configuration dialog box will show the data connections that you created in Chapter 15; data connections are shared across Analysis Services and Integration Services projects. Click New to create a new data connection.
  3. In the Connection Manager dialog box, select the SQL Native Client provider.
  4. Select your test server and provide login information.
  5. Select the Chapter16 database.
  6. Click OK.
  7. In the Configure OLE DB Connection Manager dialog box, click OK.
  8. Right-click in the Connection Managers area of your new package and select New Flat File Connection.
  9. Enter DepartmentList as the Connection Manager Name.
  10. Enter C:\Departments.txt as the File Name (this file will be supplied by your instructor).
  11. Check the Column Names in the First Data Row checkbox. Figure 16-4 shows the completed General page of the dialog box.
    Figure 16-4: Defining a Flat File Connection Manager

  12. Figure 16-4: Defining a Flat File Connection Manager


  13. Click the Advanced icon to move to the Advanced page of the dialog box
  14. Click the New button.
  15. Change the Name of the new column to DepartmentName.
  16. Click OK.
  17. Right-click the DepartmentList Connection Manager and select Copy.
  18. Right-click in the Connection Managers area and select Paste.
  19. Click on the new DepartmentList 1 connection to select it.
  20. Use the Properties Window to change properties of the new connection. Change the Name property to DepartmentListBackup. Change the ConnectionString property to C:\DepartmentsBackup.txt.
Figure 16-5 shows the SSIS package with the three Connection Managers defined.
Figure 16-5: An SSIS package with two Connection Managers
Figure 16-5: An SSIS package with two Connection Managers

SSIS Tutorial: Building Control Flows

The Control Flow tab of the Package Designer is where you tell SSIS what the package will do. You create your control flow by dragging and dropping items from the toolbox to the surface, and then dragging and dropping connections between the objects. The objects you can drop here break up into four different groups:
  • Tasks are things that SSIS can do, such as execute SQL statements or transfer objects from one SQL Server to another. Table 16-2 lists the available tasks.
  • Maintenance Plan tasks are a special group of tasks that handle jobs such as checking database integrity and rebuilding indexes. Table 16-3 lists the maintenance plan tasks.
  • The Data Flow Task is a general purpose task for ETL (extract, transform, and load) operations on data. There's a separate design tab for building the details of a Data Flow Task.
  • Containers are objects that can hold a group of tasks. Table 16-4 lists the available containers.
Task Purpose
ActiveX Script Execute an ActiveX Script
Analysis Services Execute DDL Execute DDL query statements against an Analysis Services server
Analysis Services Processing Process an Analysis Services cube
Bulk Insert Insert data from a file into a database
Data Mining Query Execute a data mining query
Execute DTS 2000 Package Execute a Data Transformation Services Package (DTS was the SQL Server 2000 version of SSIS)
Execute Package Execute an SSIS package
Execute Process Shell out to a Windows application
Execute SQL Run a SQL query
File System Perform file system operations such as copy or delete
FTP Perform FTP operations
Message Queue Send or receive messages via MSMQ
Script Execute a custom task
Send Mail Send e-mail
Transfer Database Transfer an entire database between two SQL Servers
Transfer Error Messages Transfer custom error messages between two SQL Servers
Transfer Jobs Transfer jobs between two SQL Servers
Transfer Logins Transfer logins between two SQL Servers
Transfer Master Stored Procedures Transfer stored procedures from the master database on one SQL Server to the master database on another SQL Server
Transfer SQL Server Objects Transfer objects between two SQL Servers
Web Service Execute a SOAP Web method
WMI Data Reader Read data via WMI
WMI Event Watcher Wait for a WMI event
XML Perform operations on XML data
Table 16-2: SSIS control flow tasks
Task Purpose
Back Up Database Back up an entire database to file or tape
Check Database Integrity Perform database consistency checks
Execute SQL Server Agent Job Run a job
Execute T-SQL Statement Run any T-SQL script
History Cleanup Clean out history tables for other maintenance tasks
Maintenance Cleanup Clean up files left by other maintenance tasks
Notify Operator Send e-mail to SQL Server operators
Rebuild Index Rebuild a SQL Server index
Reorganize Index Compacts and defragments an index
Shrink Database Shrinks a database
Update Statistics Update statistics used to calculate query plans
Table 16-3: SSIS maintenance plan tasks
Container Purpose
For Loop Repeat a task a fixed number of times
Foreach Repeat a task by enumerating over a group of objects
Sequence Group multiple tasks into a single unit for easier management
Table 16-4: SSIS containers
Try It!
To add control flows to the package you've been building, follow these steps:
  1. If the Toolbox isn't visible already, hover your mouse over the Toolbox tab until it slides out from the side of the BIDS window. Use the pushpin button in the Toolbox title bar to keep the Toolbox visible.
  2. Make sure the Control Flow tab is selected in the Package Designer.
  3. Drag a File System Task from the Toolbox and drop it on the Package Designer.
  4. Drag a Data Flow Task from the Toolbox and drop it on the Package Designer, somewhere below the File System task.
  5. Click on the File System Task on the Package Designer to select it.
  6. Drag the green arrow from the bottom of the File System Task and drop it on top of the Data Flow Task. This tells SSIS the order of tasks when the File System Task succeeds.
  7. Double-click the connection between the two tasks to open the Precedence Constraint Editor.
  8. Change the Value from Success to Completion, because you want the Data Flow Task to execute whether the File System Task succeeds or not.
  9. Click OK.
  10. Select the File System task in the designer. Use the Properties Window to set properties of the File System Task. Set the Source property to DepartmentList. Set the Destination property to DepartmentListBackup. Set the OverwriteDestinationFile property to True.
Figure 16-6 shows the completed set of control flows.
Figure 16-6: Adding control flows
Figure 16-6: Adding control flows
As it stands, this package uses the file system task to copy the file specified by the DepartmentList connection to the file specified by the DepartmentListBackup connection, overwriting any target file that already exists. It then executes the data flow task. In the next section, you'll see how to configure the data flow task.

SSIS Tutorial: Building Data Flows

The Data Flow tab of the Package Designer is where you specify the details of any Data Flow tasks that you've added on the Control Flow tab. Data Flows are made up of various objects that you drag and drop from the Toolbox:
  • Data Flow Sources are ways that data gets into the system. Table 16-5 lists the available data flow sources.
  • Data Flow Transformations let you alter and manipulate the data in various ways. Table 16-6 lists the available data flow transformations.
  • Data Flow Destinations are the places that you can send the transformed data. Table 16-7 lists the available data flow destinations.
Source Use
DataReader Extracts data from a database using a .NET DataReader
Excel Extracts data from an Excel workbook
Flat File Extracts data from a flat file
OLE DB Extracts data from a database using an OLE DB provider
Raw File Extracts data from a raw file
XML Extracts data from an XML file
Table 16-5: Data flow sources
Transformation Effect
Aggregate Aggregates and groups values in a dataset
Audit Adds audit information to a dataset
Character Map Applies string operations to character data
Conditional Split Evaluates and splits up rows in a dataset
Copy Column Copies a column of data
Data Conversion Converts data to a different datatype
Data Mining Query Runs a data mining query
Derived Column Calculates a new column from existing data
Export Column Exports data from a column to a file
Fuzzy Grouping Groups rows that contain similar values
Fuzzy Lookup Looks up values using fuzzy matching
Import Column Imports data from a file to a column
Lookup Looks up values in a reference dataset
Merge Merges two sorted datasets
Merge Join Merges data from two datasets by using a join
Multicast Creates copies of a dataset
OLE DB Command Executes a SQL command on each row in a dataset
Percentage Sampling Extracts a subset of rows from a dataset
Pivot Builds a pivot table from a dataset
Row Count Counts the rows of a dataset
Row Sampling Extracts a sample of rows from a dataset
Script Component Executes a custom script
Slowly Changing Dimension Updates a slowly changing dimension in a cube
Sort Sorts data
Term Extraction Extracts data from a column
Term Lookup Looks up the frequency of a term in a column
Union All Merges multiple datasets
Unpivot Normalizes a pivot table
Table 16-6: Data Flow Transformations
Destination Use
Data Mining Model Training Sends data to an Analysis Services data mining model
DataReader Sends data to an in-memory ADO.NET DataReader
Dimension Processing Processes a cube dimension
Excel Sends data to an Excel worksheet
Flat File Sends data to a flat file
OLE DB Sends data to an OLE DB database
Partition Processing Processes an Analysis Services partition
Raw File Sends data to a raw file
Recordset Sends data to an in-memory ADO Recordset
SQL Server Sends data to a SQL Server database
SQL Server Mobile Sends data to a SQL Server Mobile database
Table 16-7: Data Flow Destinations
Try It!
To customize the data flow task in the package you're building, follow these steps:
  1. Select the Data Flow tab in the Package Designer. The single Data Flow Task in the package will automatically be selected in the combo box.
  2. Drag an OLE DB Source from the Toolbox and drop it on the Package Designer.
  3. Drag a Character Map Transformation from the Toolbox and drop it on the Package Designer.
  4. Drag a Flat File Destination from the Toolbox and drop it on the Package Designer.
  5. Click on the OLE DB Source on the Package Designer to select it.
  6. Drag the green arrow from the bottom of the OLE DB Source and drop it on top of the Character Map Transformation.
  7. Click on the Character Map Transformation on the Package Designer to select it.
  8. Drag the green arrow from the bottom of the Character Map Transformation and drop it on top of the Flat File Destination.
  9. Double-click the OLE DB Source to open the OLE DB Source Editor.
  10. Select the HumanResources.Department view. Figure 16-7 shows the completed OLE DB Source Editor.

  11. Figure 16-7: Setting up the OLE DB Source

    Figure 16-7: Setting up the OLE DB Source

  12. Click OK.
  13. Double-click the Character Map Transformation.
  14. Check the Name column.
  15. Select In-Place Change in the Destination column.
  16. Select the Uppercase operation. Figure 16-8 shows the completed Character Map Transformation Editor.

  17. Figure 16-8: Setting up the Character Map Transformation

    Figure 16-8: Setting up the Character Map Transformation

  18. Click OK.
  19. Double-click the Flat File Destination.
  20. Select the DepartmentList Flat File Connection Manager.
  21. Select the Mappings page of the dialog box.
  22. Drag the Name column from the Available Input Columns list and drop it on top of the DepartmentName column in the Available Destination Columns list. Figure 16-9 shows the completed Mappings page.

  23. Figure 16-9: Configuring the Flat File Destination

    Figure 16-9: Configuring the Flat File Destination

  24. Click OK.
Figure 16-10 shows the completed set of data flows.
Figure 16-10: Adding data flows
Figure 16-10: Adding data flows
The data flows in this package take a table from the Chapter16 database, transform one of the columns in that table to all uppercase characters, and then write that transformed column out to a flat file.

SSIS Tutorial: Creating Event Handlers

SSIS packages also support a complete event system. You can attach event handlers to a variety of events for the package itself or for the individual tasks within a package. Events within a package “bubble up.” That is, suppose an error occurs within a task inside of a package. If you've defined an OnError event handler for the task, then that event handler is called. Otherwise, an OnError event handler for the package itself is called. If no event handler is defined for the package either, the event is ignored.
Event handlers are defined on the Event Handlers tab of the Package Designer. When you create an event handler, you handle the event by building an entire secondary SSIS package, and you have access to the full complement of data flows, control flows, and event handlers to deal with the original event.
By adding event handlers to the OnError event that call the Send Mail task, you can notify operators by e-mail if anything goes wrong in the course of running an SSIS package.
Try It!
To add an event handler to the package we've been building, follow these steps:
  1. Open SQL Server Management Studio and connect to your test server.
  2. Create a new query and select the Chapter16 database in the available databases list on the toolbar.
  3. Enter this text into a query window:
    CREATE TABLE DepartmentExports(
        ExportID int IDENTITY(1,1) NOT NULL,
        ExportTime datetime NOT NULL
        CONSTRAINT DF_DepartmentExports_ExportTime DEFAULT (GETDATE()),
        CONSTRAINT PK_DepartmentExports PRIMARY KEY CLUSTERED
            (
                ExportID ASC
            )

  4. Click the Execute toolbar button to create the table.
  5. Switch back to the Package Designer in BIDS.
  6. Select the Event Handlers tab.
  7. Expand the Package and then the Executables node.
  8. Select the Data Flow Task in the Executable dropdown list.
  9. Select the OnPostExecute event handler.
  10. Click the hyperlink on the design surface to create the event handler.
  11. Drag an Execute SQL task from the Toolbox and drop it on the Package Designer.
  12. Double-click the Execute SQL task to open the Execute SQL Task Editor.
  13. Select the OLE DB connection manager as the task's connection.
  14. Set the SQL Statement property to INSERT INTO DepartmentExports (ExportTime) VALUES (GETDATE()).
  15. Click OK to create the event handler.
This event handler will be called when the Data Flow Task finishes executing, and will insert one new row into the tracking table when it is called.

SSIS Tutorial: Saving and Running Packages

Now that you've created an entire SSIS package, you're probably ready to run it and see what it does. But first, let's look at the options for saving SSIS packages. When you work in BIDS, your SSIS package is saved as an XML file (with the extension dtsx) directly in the normal Windows file system. But that's not the only option. Packages can also be saved in the msdb database in SQL Server itself, or in a special area of the file system called the Package Store.
Storing SSIS packages in the Package Store or the msdb database makes it easier to access and manage them from SQL Server's administrative and command-line tools without needing to have any knowledge of the physical layout of the server's hard drive.
Saving Packages to Alternate Locations
To save a package to the msdb database or the Package Store, you use the File > Save Package As menu item within BIDS.
Try It!
To store copies of the package you've developed, follow these steps.
  1. Select File > Save Copy of Package.dtsx As from the BIDS menus.
  2. Select SSIS Package Store as the Package Location.
  3. Select the name of your test server.
  4. Enter /File System/ExportDepartments as the package path.
  5. Click OK.
  6. Select File > Save Copy of Package.dtsx As from the BIDS menus.
  7. Select SQL Server as the Package Location.
  8. Select the name of your test server and fill in your authentication information.
  9. Enter ExportDepartments as the package path.
  10. Click OK.
Running a Package
You can run the final package from either BIDS or SQL Server Management Studio. When you're developing a package, it's convenient to run it directly from BIDS. When the package has been deployed to a production server (and saved to the msdb database or the Package Store) you'll probably want to run it from SQL Server Management Studio.
SQL Server also includes a command-line utility, dtsexec, that lets you run packages from batch files.
Running a Package from BIDS
With the package open in BIDS, you can run it using the standard Visual Studio tools for running a project. Choose any of these options:
  • Right-click the package in Solution Explorer and select Execute Package.
  • Click the Start Debugging toolbar button.
  • Press F5.
Try It!
To run the package that you have loaded in BIDS, follow these steps:
  1. Click the Start Debugging toolbar button. SSIS will execute the package, highlighting the steps in the package as they are completed. You can select any tab to watch what's going on. For example, if you select the Control Flow tab, you'll see tasks highlighted, as shown in Figure 16-11.

  2. Figure 16-11: Executing a package in the debugger

    Figure 16-11: Executing a package in the debugger

  3. When the package finishes executing, click the hyperlink underneath the Connection Managers pane to stop the debugger.
  4. Click the Execution Results tab to see detailed information on the package, as shown in Figure 16-12.

  5. Figure 16-12: Information on package execution

    Figure 16-12: Information on package execution
All of the events you see in the Execution Results pane are things that you can create event handlers to react to within the package. As you can see, DTS issues a quite a number of events, from progress events to warnings about extra columns of data that we retrieved but never used.
Running a Package from SQL Server Management Studio
To run a package from SQL Server Management Studio, you need to connect Object Browser to SSIS.
Try It!
  1. In SQL Server Management Studio, click the Connect button at the top of the Object Explorer window.
  2. Select Integration Services.
  3. Choose the server with Integration Services installed and click Connect. This will add an Integration Services node at the bottom of Object Explorer.
  4. Expand the Stored Packages node. You'll see that you can drill down into the File System node to find packages in the Package Store, or the MSDB node to find packages stored in the msdb database.
  5. Expand the File System node.
  6. Right-click on the ExportDepartments package and select Run Package. This will open the Execute Package utility, shown in Figure 16-13.

  7. Figure 16-13: Executing a package from SQL Server Management Studio

    Figure 16-13: Executing a package from SQL Server Management Studio

  8. Click Execute.
  9. Click Close twice to dismiss the progress dialog box and the Execute Package Utility.
  10. Enter this text into a query window with the Chapter16 database selected:    SELECT * FROM DepartmentExports
  11. Click the Execute toolbar button to verify that the package was run. You should see one entry for when the package was run from BIDS and one from when you ran it from SQL Server Management Studio.

SSIS Tutorial: Exercises

One common use of SSIS is in data warehousing - collecting data from a variety of different sources into a single database that can be used for unified reporting. In this exercise you'll use SSIS to perform a simple data warehousing task.
Use SSIS to create a text file, c:\EmployeeList.txt, containing the last names and network logins of the AdventureWorks employees. Retrieve the last names from the Person.Contact table in the AdventureWorks database. Retrieve the logins from the HumanResources.Employee table in the Chapter16 database.
You can use the Merge Join data flow transformation to join data from two sources. One tip: the inputs to this transformation need to be sorted on the joining column.
Solutions to Exercises
  1. Launch Business Intelligence Development Studio
  2. Select File > New > Project.
  3. Select the Business Intelligence Projects project type.
  4. Select the Integration Services Project template.
  5. Select a convenient location.
  6. Name the new project ISProject2 and click OK.
  7. Right-click in the Connection Managers area of your new package and select New OLE DB Connection.
  8. Click New to create a new data connection.
  9. In the Connection Manager dialog box, select the SQL Native Client provider.
  10. Select your test server and provide login information.
  11. Select the AdventureWorks database.
  12. Click OK.
  13. Right-click in the Connection Managers area of your new package and select New OLE DB Connection.
  14. Select the existing connection to the Chapter16 database and click OK.
  15. Right-click in the Connection Managers area of your new package and select New Flat File Connection.
  16. Enter EmployeeList as the Connection Manager Name.
  17. Enter C:\Employees.txt as the File Name.
  18. Check the Column Names in the First Data Row checkbox.
  19. Click the Advanced icon to move to the Advanced page of the dialog box.
  20. Click the New button.
  21. Change the Name of the new column to LastName.
  22. Click the New button.
  23. Change the Name of the new column to Login.
  24. Click OK.
  25. Select the Control Flow tab in the Package Designer.
  26. Drag a Data Flow Task from the Toolbox and drop it on the Package Designer.
  27. Select the Data Flow tab in the Package Designer. The single Data Flow Task in the package will automatically be selected in the combo box.
  28. Drag an OLE DB Source from the Toolbox and drop it on the Package Designer.
  29. Drag a second OLE DB Source from the Toolbox and drop it on the Package Designer.
  30. Drag a Sort Transformation from the Toolbox and drop it on the Package Designer.
  31. Drag a second Sort Transformation from the Toolbox and drop it on the Package Designer.
  32. Drag a Merge Join Transformation from the Toolbox and drop it on the Package Designer.
  33. Drag a Flat File Destination from the Toolbox and drop it on the Package Designer.
  34. Click on the first OLE DB Source on the Package Designer to select it.
  35. Drag the green arrow from the bottom of the first OLE DB Source and drop it on top of the first Sort Transformation.
  36. Click on the second OLE DB Source on the Package Designer to select it.
  37. Drag the green arrow from the bottom of the second OLE DB Source and drop it on top of the second Sort Transformation.
  38. Click on the first Sort Transformation on the Package Designer to select it.
  39. Drag the green arrow from the bottom of the first Sort Transformation and drop it on top of the Merge Join Transformation.
  40. In the Input Output Selection dialog box, select the Merge Join Left Input.
  41. Click OK.
  42. Click on the second Sort Transformation on the Package Designer to select it.
  43. Drag the green arrow from the bottom of the second Sort Transformation and drop it on top of the Merge Join Transformation.
  44. Click on the Merge Join Transformation on the Package Designer to select it.
  45. Drag the green arrow from the bottom of the Merge Join Transformation and drop it on top of the Flat File Destination. Figure 16-14 shows the Data Flow tab with the connections between tasks.
    Figure 16-14: Data flows to merge two sources

  46. Figure 16-14: Data flows to merge two sources

  47. Double-click the first OLE DB Source to open the OLE DB Source Editor.
  48. Select the connection to the AdventureWorks database.
  49. Select the Person.Contact view.
  50. Click OK.
  51. Double-click the second OLE DB Source to open the OLE DB Source Editor.
  52. Select the connection to the Chapter16 database.
  53. Select the HumanResources.Employee view.
  54. Click OK.
  55. Double-click the first Sort Transformation.
  56. Check the ContactID column.
  57. Click OK
  58. Double-click the second Sort Transformation.
  59. Check the ContactID column.
  60. Click OK
  61. Double-click the Merge Join Transformation.
  62. Check the Join Key checkbox for the ContactID column in both tables.
  63. Check the selection checkbox for the LastName column in the left-hand table and the ContactID and LoginID columns in the right-hand table. Figure 16-15 shows the completed Merge Join Transformation Editor.
  64. Figure 16-15: Setting up a Merge Join

    Figure 16-15: Setting up a Merge Join

  65. Click OK.
  66. Double-click the Flat File Destination.
  67. Select the EmployeeList Flat File Connection Manager.
  68. Select the Mappings page of the dialog box.
  69. The LastName columns will be automatically mapped. Drag the LoginID column from the Available Input Columns list and drop it on top of the Login column in the Available Destination Columns list.
  70. Click OK.
  71. Right-click the package in Solution Explorer and select Execute Package.
  72. Stop debugging when the package is finished executing.
  73. Open the c:\Employees.txt file to inspect the results.

Tuesday, 18 December 2012

SQL Server 2005 Reporting Services Part 1

Beginning SQL Server 2005 Reporting Services Part 1


Building and deploying basic reports

If ever there was job for "real" developers to shuffle to their juniors, it is building reports. It's not real development anyway; it's more like glorified formatting. Besides, the esoteric tools that you use to build reports try to provide an abstraction layer, which often prevents you from having any real control over the report. I've heard all these arguments before. If this sounds like a conversation you've had by the water cooler, then I invite you to take a closer look at SQL Server 2005 Reporting Services (SSRS).
SSRS 2005 is the latest version of SQL Reporting Services, and ships with all versions of SQL Server 2005. SSRS allows you to quickly and easily create reports from multiple database sources. The finished reports can be presented directly from the reporting services website, or they can be displayed in your web- or Windows-based applications. Reports can be exported to multiple formats, including comma delimited text, XML, portable document format (pdf) and Microsoft Excel.
This article is the first of four parts, which will provide in-depth coverage of SQL Server 2005 Reporting Services:
  • Part 1 covers the basics of the SSRS. It demonstrates how to build quick, simple reports and will familiarize you with the basic Report Designer environment
  • Part 2 will cover use of custom functions, aggregate functions, sub-reporting, the matrix control, drill-downs, and sorting.
  • Part 3 will take an in-depth look at the charting control
  • Part 4 digs into the actual Report Definition Language (RDL) and the new Report Builder tool.

Installing and configuring Reporting Services

After much debate, we decided that full installation and configuration details were outside the scope of an article focused on how to build basic reports using SSRS, especially as there are already several online resources that treat this area in detail. See, for example:
and
Well worth reviewing are the details in the latter on the need to install SSL on any machine hosting SSRS.
---Editor's installation notes---In order to test the reports in this article, I went through a single-machine installation on Windows XP (meaning that SQL Server 2005, Reporting Services, and much more, are all installed on my poor laptop). Since I didn't install SSRS when I installed SQL Server 2005 (I didn't have IIS installed at the time), I had to first install IIS 5.1, and then Reporting Services (from the SS2005 disks). I then jumped immediately into Reporting Services Configuration Manager tool (All Programs ¬ SQL Server 2005 ¬ Configuration tools). The left panel acts as a sort of checklist of items to configure:
All went well until the Database Setup. Because I had not installed SSRS at the same time that I installed SQL Server, the ReportServer and ReportServerTempDB were not created by default. These databases hold all the report definitions and reporting server configuration information. Connecting to SQL Server using Service Credentials, the databases appeared to be created, but I received an error suggesting that I didn't have permissions to perform the requested task, and a red cross remained next to the Database Setup icon. This had me stumped for a while – eventually I appeared to solve it by hopping to the Server Status section, stopping the Report Server, opening SSMS and deleting both the ReportServer and ReportServerTempDB databases, and then restarting the Report Server and trying again! Even though I swear this didn't work the first time I tried it, it seemed to do the trick the second time (while I was on the phone moaning to Steve that I couldn't get it to work!). However, I'm still not clear why I had the problem in the first place – or why it suddenly went away.
This wasn't quite the end of my problems. Installing SSRS creates two new virtual directories under the default website on IIS. By default, they are named Reports and ReportServer. The ReportServer site hosts a web service for running and managing reports. The Reports site allows you upload reports from a browser and run reports over the web. When I tried to navigate to http://localhost/ReportServer I received the following error: "Failed to access IIS metabase". Fortunately, the information on the error page is quite useful (for a change) and this, coupled with a quick Google search, led me to grant access to the metabase to the ASPNET user account by executing the following from the directory housing the aspnet_regiis executable (WINDOWS\Microsoft.NET\Framework\v2.0.50727, in my case):
spnet_regiis -ga ASPNET

This did the trick, and I was up and running. I received some raised eyebrows here when I proposed to install SSRS. It made my long-suffering sys admin team particularly nervous. The 2000 version of SSRS seems to have a very bad reputation among the Red Gate team, both as a performance nightmare, and in one case for "completely annihilating" a developer's machine. However, the above slight quirks aside, the SSRS 2005 experience seems pretty smooth and I've had no real performance, or other, issues. So far.
-----End of Editor's note----
Once you've completed the installation and configuration process, the first thing to do is download the code file for this article (see the Code Download link in the speech bubble to the right of the article title). The code file contains a sample Visual Studio project and a SQL Script for creating the ReportDemo database. You will need this database if you want to follow the examples in this series of articles so go ahead and create the database using the ReportingDemoDatabaseScript.sql script or, alternatively, by restoring the provided ReportingDemo.bak file.
If you are using SQL Server Authentication on your SQL Server you will also need to set up a login with permissions to the ReportDemo database (for the examples, I set up a login called DemoUser as a DBO on my ReportDemo database).

Using the Report Wizard

There are two ways to create SSRS Reports. You can build the report manually, or you can use the Report Wizard to give yourself a head start. For this first report, we are going to take advantage of the wizard. Start a new Business Intelligence project in Visual Studio 2005. Then, from the menu, select Project > Add New Item. Select the Report Wizard option and call the file "FirstReportWZ.rdl". Click Add. Click Next on the Welcome screen and this will bring you to the Select the Data Source screen:
Select the New data source radio button and give the data source a name. Select Microsoft SQL Server as the type.
Note:Use of the Shared data source option is actually a better option in most cases but, for the sake of this example, we will just create a new data source. We're going to set up a shared data source later in this article.
Click the Edit button to bring up the Connection Properties dialog:
Enter or select a server name. The default is to log on using Windows Authentication. If you are using SQL Server Authentication, choose that setting, and enter the username and password. Finally, select a database, in this caseReportingDemo. Make sure you test the connection before you click OK.
Next up is the Design the Query screen. You can use the Query Builder by clicking the button at the top left, but in this case simply enter "Select * From Customer" into the Query string text box and click Next. On the Select the Report Type simply select the type you prefer (tabular or matrix) and hit Next.
This brings up the Design the Table screen:
Select State in the Available fields box and click the Group button. This will group the data in the result set by State. Select Next. On the Choose the Table Layout page, select the Stepped option and check the Enable Drilldowncheckbox. On the next screen, choose a style for your report (I chose Ocean) and click Next.
This brings up the final screen, Completing the Wizard:
It shows a summary of your report options, and gives you an opportunity to rename the report and to preview it. Click Finish to end the wizard.
You should be shown the report in the standard Report Designer:
There are three tabs: Data, Layout and Preview. You should be on the Layout tab. Click on the Preview tab to view the report. Since this report doesn't take any arguments, it will run as soon as you click on the tab.
Use the +/- symbols next to the State abbreviations to expand and collapse the grouping of the report.

Manual report creation

The previous section, while perhaps overly simplistic, does show you how to get a report up and running with zero code and zero property setting. Obviously, such reports will not meet most development requirements, but do not discount this option as a starting point for more complicated reports. Once you've created a report with the Report Wizard, you are free to make any modifications to it.
In this section, we are going to create a more realistic report from scratch, including how to create and use a shared data source object, stored procedures, and how to format your report, set report properties and use report parameters.

Creating a shared data source

Before we start the report, we are going to build a shared data source i.e. a data source that is common to, and can be used by, all of the reports on a reporting server. While each report can contain its own connection information, it is good practice to use shared data sources, as it will save you a lot time and headaches. This way, you only have to set the connection information once. For example, let's say your company has Development, Test and Production environments. If you put the connection information into each report, you will have to change it each time when you publish to Development, Test and Production. If you use a shared data source, you still have to set up a data source object for each of three environments, but you can simply publish the report to each environment, and they will automatically use the connection information associated with that environment.
From the menu select Project > Add New Item > Select Data Source. On the General tab, call the data source "ReportsDB". Leave the Type as Microsoft SQL Server. Click the Edit button on the right, and enter the connection information for Reporting Demo, as before. Click OK on the Shared Data Source screen and the data source is done.

Add a new report

From the menu select Project > Add New Item. Select Report and name it "FirstReportMan.rdl". A new report will be added to the project, and the Report Designer will open at the Data tab. At this point, let's take a closer look at the Report Designer tool. At the top of the Report Designer window are three tabs: Data, Layout and Preview. TheData tab is used to build data sources for your report. The Layout tab is the physical report designer where you set up the header, the footer and the data presentation of the report. The Preview tab allows you to actually run the report from Visual Studio 2005, without having to publish it to a report server first. If your report takes parameters, the Preview tab will ask you to fill them out before it runs the report.
The first thing we need to do is get data into our report. At the top of the Data tab choose  from the dropdown list:
The Dataset dialog opens:
Name the dataset "ReportData", and select the ReportsDB data source from the dropdown. SelectStoredProcedure as the command type, and enter "spr_CustomerSelectAll" in the query string box. Click OK to close the dialog.
Note:
spr_CustomerSelectAll is a very simple, parameter-less stored procedure that selects all of the columns from the Customer table. The source code is included in the ReportingDemoDatabaseScript.sql script with the code download.
Test the dataset by clicking on the big red exclamation point at the top of the report designer. This executes the query and displays the results. You can repeat these steps if you wish to add multiple datasets to your report.

Setting up the report display

Next, switch to the Layout tab. This is where you actually build the report display. Start by dragging a table from the Toolbox, onto the Body section of the report. By default, the table shows a header row at the top, a detail row in the middle and a footer row at the bottom. You can add additional columns to the table by right-clicking on one of the columns and selecting one of the two Insert Column options.
Click on the Datasets tab under Toolbox on the left-hand side of the Visual Studio environment. You should see theReportData dataset. Expand it, select FirstName and drag it to the first cell of the body row of the table. This will display the First Name field in the first column. Now put the LastName in the second column, and theCustomerStatus in the third:
Note that, when you drag the column FirstName into the body row of the table, SSRS make a guess as to what to call the row. It calls it "First Name". You can click on the Preview tab to view the report.

Adding formatting

OK, so we have a basic, very plain, report. Let's add some formatting to make it look good. Let's add theDateOfBirth column to the table. You can expand and shrink the size of the columns by highlighting and dragging:
If you wish to get rid of the footer row of the table and then click on any field in the table. You will see a grey box surround the table. Right-click on the icon at the beginning of the body row and then click the Table Footer option to deselect it.
The table header is next. To format all the cells in the header in the same way, click and drag over all the cells to select them. Open the Properties window and set background color, font, and so on.
Note, however, that if you wish to change the justification of the text or the size, then you do so using the main menu at the top, not via the properties window. Again, you can click on the Preview tab to view the report.

Add a report header

The table already has a header, but the report can also have a header and footer. Report headers and footers appear on every page of the report. Put the Report Designer in Layout mode and select Report > Page Headerfrom the menu. A new band labeled Page Header appears on the report above the body. Drag a text box onto the header and click directly on it. Type "My First Report", not in the Properties window, but right on the control.
To adjust the text style and size of your heading, highlight the text box and use the option from the top menu.

Formatting

Each field can have formatting. Let's deal with that ugly Date of Birth field. The time information is superfluous, so let's format the date properly. Right-click on the cell that contains the date of birth, and choose Properties. Next, select the Format tab.
Click on the second button (labeled "…") to the right of the Format code field. When the dialog opens, use the standard options. Select Date in the list on the left, then choose the sample date format you want on the right. ClickOK to close the dialog.
Click OK to close the Properties window and then click on the Preview tab to view the report.

Setting report properties

To access the report properties, you need to be on the Layout tab of the Report Designer. When you click on this tab, a new menu item, Report, activates. This menu gives you options for turning on and off the report header and footer sections (as we have seen), adding embedded images, setting report properties, and setting report parameters.
Setting up the report print settings is not intuitive, compared to other products. In the report Layout tab you see your report with a ruler across the top. That ruler is set up in inches. A standard sheet of paper is 8.5 x 11 inches. The default setting in SSRS is to have a 1-inch margin all the way around the content area. So, at 8.5 inches wide with a 1-inch margin on the left and another on the right, you have 6.5 inches for content. Any more, and the content beyond the 6.5 inches will spill over onto a second sheet of paper when printed. It will not automatically shift to Landscape.
To get Landscape reports, you have to make the proper report settings. Navigate to the Layout tab of the Report Designer. From the Report menu select Report Properties. Switch to the Layout tab of the dialog box. To switch to Landscape printing, you need to change Page width to 11in and the Page height to 8.5in.
On the same Layout tab, you can also get up your report to display the data in multiple columns, and you can control the margins. By default, all the margins are set at 1 inch. Remember, if your report width, plus the right and left margins, is greater than the width of the printer, you will get spill-over when you print out your report.

Using parameters

There are two ways to add parameters to your reports. The first is to use parameters in the queries in your data sources. The second is to set up parameters through the Report Parameters dialog box. We will do both.
Query parameters
First, we will set up parameters using a data source query. Navigate to the Data tab, and click the "…" button right next the Dataset dropdown box. The Dataset dialog box opens and allows you to edit the query for the dataset. Change the Query string from "spr_CustomerSelectAll" to "spr_CustomerSelectByState".
Note:spr_CustomerSelectByState accepts a parameter called StateCD that allows us to filter the data from the Customer table by State. Again, the source code is included in the ReportingDemoDatabaseScript.sql script with the code download.
Click OK and then run the query by clicking the red exclamation point (!) on the Data tab toolbar. You will be prompted to enter a parameter value for StateCD (the State code). Enter "CA" and click OK. The query should return all the customers that live in California.
Switch to the Preview tab. Instead of the report just running, there should be a place for you to enter a value for the "StateCD" and run the report. Enter "CA" and click the View Report button. You should see your report filtered by state.
To edit the parameters, or to add new ones, switch to the Layout tab of the Report Designer and open the Report Parameters dialog from the Report menu. First, we are going to make the "State code" prompt a little more friendly. Select StateCD in the Parameters list box then, in the Parameters Properties box, change the prompt to read "State". In the Available values section enter "California" and "CA" on the first line. Enter "Louisiana" and "LA" on the second line.
This will make the prompt for "State value" into a dropdown. You can also build additional datasets into your report, and use the values in those datasets as criteria for dropdowns.
Report parameters
Now let's add a parameter that is not used in a query. Click the Add button in the Report Parameters dialog from the Report menu. Give the new parameter the name "ReportTitle". Its Data type should be String. Set the Prompt to "Report Title". Click OK and close the dialog box.
Drag a new text box onto the report header area. Right-click on it and choose the Expression option. In the Edit Expression dialog select Parameters. Double-click on the ReportTitle parameter. This text box will now display the value you pass to the Report Title parameter.
Switch to the Preview tab and try it out.

Publishing your reports

Up to now, you have been running your reports in the Visual Studio 2005 environment but, to make them useful, you must publish them to a report server. The easiest way to do this is to have Visual Studio publish your reports.
Start by right-clicking on Project in the Project Explorer and choose Properties.
Set TargetServerURL to the URL of your report server. Use the TargetReportFolder property to set up a folder for your reports. If the folder does not exist, the Publisher will create it for you. The other key thing to pay attention to here is the OverwriteDataSources property. When this property is set to "True", it will automatically copy over all your data source objects when you publish. When set to "False", it will copy any new data source objects, but it will not overwrite existing ones. This is important when dealing with development, test and production servers. You can publish a set of data source objects to each server, pointed at the correct database, and never have to worry about what database your reports are hitting in each environment.
From the Build menu select Deploy Solution. This will publish the project to the selected folder on your report server. You can also deploy individual reports by right-clicking on the file in the Solution explorer and selectingDeploy.
Once your report has been published, you can access and run it on your server through the browser athttp:///. From the Home page, you should be able to find the folder you published to, with the reports in it. Select a report to run. At the top of the page you can enter any values for report parameters, and then run the report. From here, you can also print or export the report.