Microsoft SQL Server Microsoft SQL Server
Reporting Services Reporting Services
Doug Nelson Doug Nelson Chief Architect Chief Architect
SynApp north SynApp north
www.synappnorth.com
www.synappnorth.com
Discussion
Discussion Outline Outline
Reporting Services Overview Reporting Services Overview
Creating Reports with Reporting Services Creating Reports with Reporting Services
Managing Reports Managing Reports
Reporting Services Web Service Reporting Services Web Service
Extending Reporting Services Extending Reporting Services
SQL Server Database / SQL Server Agent Shared Components
Data Retrieval Rendering Security Web Service
(IIS / ASP.Net)
http://<server>reportserver
Win32 Service Delivery
Reporting Services Components Reporting Services Components
URL Access SOAP Endpoint
Reportservices.amx WMI
Report Manager http://<server>reports
Web Browser Report Designer Client Utilities
Setup Prerequisites Setup Prerequisites
Web Server
Web Server
Windows 2000 or 2003 ServerWindows 2000 or 2003 Server Internet Information Server Internet Information Server .Net Framework 1.1.Net Framework 1.1
SMTP Server for email delivery SMTP Server for email delivery
Database Server
Database Server
SQL Server 2000 Service Pack 3a or laterSQL Server 2000 Service Pack 3a or later SQL Server AgentSQL Server Agent
Development Workstation
Development Workstation
Visual Studio .Net 2003Visual Studio .Net 2003.Net Framework 1.1 (included) .Net Framework 1.1 (included)
Setup UI assumes you are using the default web site and port and integrated security to access the database. If this is not the case, you will need to use command line setup or configure the server after the setup UI completes.
Report Authoring Demo
Report Authoring Demo
Management APIs Management APIs
Web Service/ SOAP API Web Service/ SOAP API
• Full SOAP API Implementation with complex typesFull SOAP API Implementation with complex types
• Includes WDSLIncludes WDSL
• Add service reference to Visual Studio .NETAdd service reference to Visual Studio .NET
• Supports SSL and scriptingSupports SSL and scripting
WMI WMI
• Used for managing service configurationUsed for managing service configuration
• Enumerate instances of Report ServerEnumerate instances of Report Server
• Works even if the Web Service is not availableWorks even if the Web Service is not available
• No WMI events ( configuration only)No WMI events ( configuration only)
Management Tools Management Tools
Report Manager Report Manager
• Web-based management application Web-based management application
• Built using ASP.net and Web Services Built using ASP.net and Web Services
Client Utilities Client Utilities
• Script Host – rs.exe Script Host – rs.exe
• Server Configuration – Server Configuration –
• Encryption Key Management – Encryption Key Management –
Custom Applications Custom Applications
SQL Server 2005 Management Studio SQL Server 2005 Management Studio
Role-Based Security Model Role-Based Security Model
Tasks Tasks
• Sets of low level operationsSets of low level operations
• Item level ( e.g. create report) or system level (manage jobs)Item level ( e.g. create report) or system level (manage jobs)
• Not customizableNot customizable
Roles Roles
• Sets of tasksSets of tasks
• Default roles installed by default (browser, publisher)Default roles installed by default (browser, publisher)
• Default roles can be customized, new ones createdDefault roles can be customized, new ones created
Groups / Users Groups / Users
• Windows NT / Active DirectoryWindows NT / Active Directory
Role Assignments Role Assignments
• Associates groups / users with rolesAssociates groups / users with roles
• Inherited from the parent namespaceInherited from the parent namespace
Report Properties Report Properties
Metadata is extracted from report definition at publishing Metadata is extracted from report definition at publishing and maintained in the database
and maintained in the database
• NameName
• DescriptionDescription
• HiddenHidden
Report Definition Report Definition
Parameters Parameters
• PromptPrompt
• Prompt StringPrompt String
• Default NamesDefault Names
Data Source Information Data Source Information
Data Source Management Data Source Management
Administrator can set connection type and connection Administrator can set connection type and connection string after publishing
string after publishing
Credential Operations Credential Operations
• Prompt for Windows or database credentialsPrompt for Windows or database credentials
• Securely stored Windows or database credentialsSecurely stored Windows or database credentials
• Integrated Security (Requires Kerberos delegation)Integrated Security (Requires Kerberos delegation)
• None (uses report execution account)None (uses report execution account)
Shared Data Sources Shared Data Sources
• Connection and credential information stored as a secured Connection and credential information stored as a secured object in the namespace
object in the namespace
• Single point of management for multiple reportsSingle point of management for multiple reports
Managing Report Execution Managing Report Execution
Execution Sessions Execution Sessions
• Automatically created for each report executionAutomatically created for each report execution
• Keeps consistency between server round trips (images, paging, Keeps consistency between server round trips (images, paging, exporting)
exporting)
• Session timeout set in server configuration fileSession timeout set in server configuration file
Cache Snapshots Cache Snapshots
• On-demand reports can be cached between usersOn-demand reports can be cached between users
• Cache index is based on parameter valuesCache index is based on parameter values
• Cache valid for a specified time after execution or cleared on Cache valid for a specified time after execution or cleared on schedule
schedule
• Limitations – User-specific expressions (User ID, Language), Limitations – User-specific expressions (User ID, Language), stored credentials
stored credentials
Snapshots and History Snapshots and History
Execution Snapshot Execution Snapshot
• Report execution is scheduled, all users get the same dataReport execution is scheduled, all users get the same data
• Single instance of processed reportSingle instance of processed report
• Limitations: No query parameters or user-specific expressions, Limitations: No query parameters or user-specific expressions, stored credentials
stored credentials
History Snapshots History Snapshots
• Multiple instances of report snapshots for archiving, auditing Multiple instances of report snapshots for archiving, auditing purposes
purposes
• Stored independently of data source, report definitionStored independently of data source, report definition
• System and report-specific retention policySystem and report-specific retention policy
Managing Report Execution Managing Report Execution
Configure cache and snapshots via Report Manager or SQL Configure cache and snapshots via Report Manager or SQL Management Studio
Management Studio
Set execution timeouts on a system-wide or per-report basis Set execution timeouts on a system-wide or per-report basis
Long running reports can be stopped manually Long running reports can be stopped manually
Report execution log enables analysis of server usage Report execution log enables analysis of server usage
• Optionally, executions are logged to Report Server databaseOptionally, executions are logged to Report Server database
• Includes report, format, user, start, end, cache hit, sizeIncludes report, format, user, start, end, cache hit, size
• Setup includes DTS package and sample reportsSetup includes DTS package and sample reports
Scheduling Scheduling
Management events can be scheduled on the report server Management events can be scheduled on the report server
• CachingCaching
• HistoryHistory
• SubscriptionsSubscriptions
Schedules are stored in database and integrated with SQL Schedules are stored in database and integrated with SQL Agent
Agent
• When triggered, Agent adds entry to the queueWhen triggered, Agent adds entry to the queue
Scheduled events are queued in database and polled by NT Scheduled events are queued in database and polled by NT Service
Service
Shared Schedules Shared Schedules
Managed shared schedules independently of reports, Managed shared schedules independently of reports, subscriptions or snapshots
subscriptions or snapshots
Change shared schedule properties Change shared schedule properties
• NameName
• Days, times or frequenciesDays, times or frequencies
• Start and end datesStart and end dates
Pause and resume shared schedule Pause and resume shared schedule
Expire a shared schedule Expire a shared schedule
Delete a shared schedule Delete a shared schedule
Subscriptions Subscriptions
Personal or administrator defined Personal or administrator defined
Subscriptions triggered by an event ( schedule, snapshot Subscriptions triggered by an event ( schedule, snapshot creation, external)
creation, external)
Delivery extension (e-mail, file share) specifies how report Delivery extension (e-mail, file share) specifies how report is delivered
is delivered
• E-mail delivery requires an SMTP serverE-mail delivery requires an SMTP server
• Extensible delivery architectureExtensible delivery architecture
Can specify output format (HTML, XLS) Can specify output format (HTML, XLS)
• Can deliver links as well as rendered reportsCan deliver links as well as rendered reports
Two types of subscriptions Two types of subscriptions
• StandardStandard
• Data DrivenData Driven
Standard Subscriptions Standard Subscriptions
Single report sent to a fixed set of addresses Single report sent to a fixed set of addresses
• End user wants to customize their own report deliveryEnd user wants to customize their own report delivery
How it works How it works
• User creates a standing request to run a report at a specific User creates a standing request to run a report at a specific time and delivered in a certain format
time and delivered in a certain format
• Can be triggered based on a schedule or snapshot generationCan be triggered based on a schedule or snapshot generation
• Specify report, execution conditions, parameters, rendering Specify report, execution conditions, parameters, rendering format, delivery location, etc.
format, delivery location, etc.
Data Driven Subscriptions Data Driven Subscriptions
When to use When to use
• Delivery of a report to a dynamic list of destinations with Delivery of a report to a dynamic list of destinations with customized content for each destination
customized content for each destination
How it works How it works
• Set up by the adminstratorSet up by the adminstrator
• Define delivery queue to return list of destinations and Define delivery queue to return list of destinations and parameters
parameters
• Specify delivery settings and parameter values as a static or Specify delivery settings and parameter values as a static or field from delivery query
field from delivery query
• Set to run according to a defined schedule or trigger from a Set to run according to a defined schedule or trigger from a snapshot
snapshot
Use Null Delivery Provider to deliver reports to cache Use Null Delivery Provider to deliver reports to cache
Automating Repetitive Tasks Automating Repetitive Tasks
Examples Examples
• Duplicate settings between serversDuplicate settings between servers
• Migrate from test to production environmentMigrate from test to production environment
• Change shared data sourcesChange shared data sources
• Cancel running jobsCancel running jobs
Automate web service tasks through Report Server Script Automate web service tasks through Report Server Script host (rs.exe)
host (rs.exe)
• Visual Studio .Net not required for executionVisual Studio .Net not required for execution
Scripting Support Scripting Support
VB .Net Code File VB .Net Code File
• Create with text editor or Visual Studio .NetCreate with text editor or Visual Studio .Net
• Generated in SQL Server 2005 Management StudioGenerated in SQL Server 2005 Management Studio
Unicode or UTF-8 text file with a .rss file extension Unicode or UTF-8 text file with a .rss file extension
Written using generated Web Service proxy Written using generated Web Service proxy
Scripts must have one function with declaration: Scripts must have one function with declaration:
• Public Sub Main()Public Sub Main()
Connection to the report server is made automatically by Connection to the report server is made automatically by the script host
the script host
Server Configuration Files Server Configuration Files
Unique per Report Server – not transferable Unique per Report Server – not transferable
• Exclude from synchronization across web farmExclude from synchronization across web farm
Specific areas of interest Specific areas of interest
• Report Server Database ConnectionReport Server Database Connection
• Report Execution account and passwordReport Execution account and password
• Extension Configuration ( including e-mail delivery)Extension Configuration ( including e-mail delivery)
Use text editor to change ( file monitoring) Use text editor to change ( file monitoring)
Use rsconfig or WMI provider for encrypted settings Use rsconfig or WMI provider for encrypted settings
Code Access Security (CAS) for extensions stored in Code Access Security (CAS) for extensions stored in separate file
separate file
Logging and Monitoring Logging and Monitoring
Performance Monitoring Performance Monitoring
• Counters for performanceCounters for performance
Event Log Integration Event Log Integration
• Critical events and errorsCritical events and errors
Trace Events Trace Events
• Traces all server activities, response times, security eventsTraces all server activities, response times, security events
Data Encryption Data Encryption
When data source credentials are encrypted in the Report When data source credentials are encrypted in the Report Server database
Server database
Stored with symmetric key tied to instance / machine / Stored with symmetric key tied to instance / machine / service account
service account
• Decrypted by both Web Service and NT ServiceDecrypted by both Web Service and NT Service
• Shared by all machines in web farmShared by all machines in web farm
Update when machine name, instance name or service Update when machine name, instance name or service account changes
account changes
Manage keys with rskeymgmt Manage keys with rskeymgmt
• Extract a copy of the encryption keyExtract a copy of the encryption key
• Apply stored encryption keyApply stored encryption key
• Remove encrypted data on machineRemove encrypted data on machine
Using Reporting Services with Applications
Using Reporting Services with Applications
Reporting Platform Integration Reporting Platform Integration
.Net-based solutions (non reporting) with reporting needs .Net-based solutions (non reporting) with reporting needs
Report Authoring and Publishing Tools Report Authoring and Publishing Tools
Delivery, Data and Rendering Extensions (Add-ons) Delivery, Data and Rendering Extensions (Add-ons)
Server Management applications Server Management applications
Portals and Collaboration Applications Portals and Collaboration Applications
Programmatic Interfaces Programmatic Interfaces
Customizable XML report definition Customizable XML report definition
• Open SchemaOpen Schema
Viewing Interfaces Viewing Interfaces
• URL AddressabilityURL Addressability
• Web Service / SOAPWeb Service / SOAP
Management Interfaces Management Interfaces
• Web Service SOAPWeb Service SOAP
• WMI InterfaceWMI Interface
Extension Interfaces Extension Interfaces
• Data, Delivery, Rendering and SecurityData, Delivery, Rendering and Security
Generating Reports Generating Reports
Application specific report authoring requirements Application specific report authoring requirements
Reports are defined in Report Definition Language (RDL) Reports are defined in Report Definition Language (RDL)
• XML formatXML format
Use .Net XML classes to generate report definitions Use .Net XML classes to generate report definitions
• Leverage RDL Schema Description (XSD)Leverage RDL Schema Description (XSD)
URL Addressability URL Addressability
Embed or link to reports via the Report Server URL Embed or link to reports via the Report Server URL
• http://[servername]/ReportServerhttp://[servername]/ReportServer
Supports both GET and POST methods Supports both GET and POST methods
Can return any output in any format Can return any output in any format
Optional HTML Viewer for parameter prompting and Optional HTML Viewer for parameter prompting and navigation
navigation
Fully localized – based on language in the HTTP header Fully localized – based on language in the HTTP header
URL Parameter Directives URL Parameter Directives
Report Parameters Report Parameters
• Parameter names must match report definitionParameter names must match report definition
http://servername/ReportServer/ReportName?CategoryID=1http://servername/ReportServer/ReportName?CategoryID=1
User Credentials (dsu: and dsp:) User Credentials (dsu: and dsp:)
• Credentials for each report data setCredentials for each report data set
https://<>?dsu:DataSet1=MyUserName&dsp:DataSet1=MyPassword https://<>?dsu:DataSet1=MyUserName&dsp:DataSet1=MyPassword
Use Secure Protocols!
Use Secure Protocols!
URL Parameter Directives URL Parameter Directives
Report Server Parameters ( rs: ) Report Server Parameters ( rs: )
• Name/Value pairs specifying server behaviorName/Value pairs specifying server behavior
• Same for all Rendering ExtensionsSame for all Rendering Extensions
• http:<>?rs:ClearSession=Truehttp:<>?rs:ClearSession=True
Rendering Device Info ( rc: ) Rendering Device Info ( rc: )
• Name/Value pairs specifying behavior specific to the format Name/Value pairs specifying behavior specific to the format being rendered to (i.e., FindString, Section, Zoom, etc.)
being rendered to (i.e., FindString, Section, Zoom, etc.)
• Unique per Rendering ExtensionUnique per Rendering Extension
• http:<>?rc:Section=7&rc.HTMLFragment=truehttp:<>?rc:Section=7&rc.HTMLFragment=true
Web Service Interface Web Service Interface
Namespace Management Namespace Management
Scheduling, Subscriptions and Delivery Scheduling, Subscriptions and Delivery
Report Execution, Report History, Linked Reports Report Execution, Report History, Linked Reports
Item Properties, Job Management, Security Management Item Properties, Job Management, Security Management
Report Parameters, Datasource Management Report Parameters, Datasource Management
Getting Started Getting Started
Add a Web Reference to your Visual Studio project Add a Web Reference to your Visual Studio project
• http://[servername]/ReportServer/ReportService.asmxhttp://[servername]/ReportServer/ReportService.asmx
Proxy classes are generated by Visual Studio Proxy classes are generated by Visual Studio
• Complex types defined in WSDLComplex types defined in WSDL
• Synchronous and asynchronous supportSynchronous and asynchronous support
• Update operations may be batchedUpdate operations may be batched
SOAP Headers SOAP Headers
• Session IDSession ID
• Server InfoServer Info
• Batch IDBatch ID
Web Service Authentication Web Service Authentication
Basic Authentication Basic Authentication
• System.Net.NetworkCredentialsSystem.Net.NetworkCredentials
• ReportServer.RSWebSerive rs = new ReportServer.RSWebService();ReportServer.RSWebSerive rs = new ReportServer.RSWebService();
• rs.Credentials = new System.Net.NetworkCredential(“user”,”pwd”,”domain”);rs.Credentials = new System.Net.NetworkCredential(“user”,”pwd”,”domain”);
Integrated Authenication Integrated Authenication
• System.Net.CredentialCacheSystem.Net.CredentialCache
• rs.Credentials = System.Net.CredentialCache.DefaultCredentials;rs.Credentials = System.Net.CredentialCache.DefaultCredentials;
Extending Reporting Services Extending Reporting Services
Security Extensions Security Extensions
Delivery Extensions Delivery Extensions
Rendering Extensions Rendering Extensions
(Only for the very brave)(Only for the very brave)
Data Processing Extensions Data Processing Extensions
Server Extensibility Server Extensibility
Extensions provide a way to extend the Reporting Services Extensions provide a way to extend the Reporting Services platform
platform
• Managed code runs in server processManaged code runs in server process
• Published CLR interfacesPublished CLR interfaces
Extension Types Extension Types
• Data Extensions – Communicates to data sources and returns Data Extensions – Communicates to data sources and returns datadata
• Delivery Extensions – Delivers reports over different protocols Delivery Extensions – Delivers reports over different protocols and to different devices
and to different devices
• Rendering Extensions – Renders to specific formats and Rendering Extensions – Renders to specific formats and devices
devices
• Security Extensions – Authenticates and authorizes non-Security Extensions – Authenticates and authorizes non- Windows users
Windows users
Extending should be seen as a last resort Extending should be seen as a last resort
Rendering Extensions Rendering Extensions
Input: A processed report object model Input: A processed report object model
Output: format-specific output stream Output: format-specific output stream
IRenderingExtension interface IRenderingExtension interface
• Render method responsible for primary output streamRender method responsible for primary output stream
• RenderStream method responsible for returning ancillary RenderStream method responsible for returning ancillary streams (images, etc)
streams (images, etc)
• GetRenderingResource may be used to provide non-report GetRenderingResource may be used to provide non-report specific content
specific content
A rendering extensions are very difficult to write and A rendering extensions are very difficult to write and maintain – consider using Xml output instead.
maintain – consider using Xml output instead.
Delivery Extensions Delivery Extensions
Input: event and specified destinations Input: event and specified destinations
Output: delivered reports or notifications Output: delivered reports or notifications
IDeliveryExtension interface IDeliveryExtension interface
• Deliver method delivers an input notification to a destinationDeliver method delivers an input notification to a destination
• ValidateUserData method verifies a set of delivery information ValidateUserData method verifies a set of delivery information is valid
is valid
• ExtensionSettings property allows delivery extensions to be ExtensionSettings property allows delivery extensions to be self describing
self describing
Can also provide UI to integrate with Report Manager Can also provide UI to integrate with Report Manager
Security Extensions Security Extensions
Input: user credentials, security policies Input: user credentials, security policies
Output: authenticate user credentials and authorize server Output: authenticate user credentials and authorize server operations
operations
IAuthentication interface IAuthentication interface
• LogonUser method authenticates the userLogonUser method authenticates the user
• GetUserInfo retrieves a user’s unique identityGetUserInfo retrieves a user’s unique identity
IAuthorization interface IAuthorization interface
• Provides classes, enumerations, methods for authorizing the Provides classes, enumerations, methods for authorizing the useruser
• Allows creating, verifying security descriptorsAllows creating, verifying security descriptors
Only available in Enterprise Edition Only available in Enterprise Edition
Data Extensions Data Extensions
Input: Connection information, query with optional Input: Connection information, query with optional parameter support
parameter support
Output: DataReader Output: DataReader
Subset of the .Net Managed Data Provider Interface Subset of the .Net Managed Data Provider Interface (System.Data)
(System.Data)
• Any .Net managed provider will workAny .Net managed provider will work
• Required: IDbConnection, IDbCommand, IDbDataParameter, Required: IDbConnection, IDbCommand, IDbDataParameter, IDataReader
IDataReader
• Optional: Extended Data Extension interfacesOptional: Extended Data Extension interfaces
Generic query designer in Report Designer Generic query designer in Report Designer
Introducing Data Processing Extensions
Introducing Data Processing Extensions
Data Extension Process Flow Data Extension Process Flow
1. The report server creates a connection object and passes in the connection string and credentials associated with the report.
2. The command text of the report is used to create a command object. In the process, the data processing extension may include code that parses the command text and creates any parameters for the command.
3. Once the command object and any parameters are processed, a data reader is generated that returns a result set and enables the report server to associate the report data with the report layout.
SynApp Custom Dataset Extension SynApp Custom Dataset Extension
These classes implement the necessary interfaces These classes implement the necessary interfaces
• SynAppConnection : IDbConnectionExtension/IDbConnectionSynAppConnection : IDbConnectionExtension/IDbConnection
• SynAppCommand : IDbCommandSynAppCommand : IDbCommand
• SynAppTransaction : IDbTransactionSynAppTransaction : IDbTransaction
• SynAppDataParameter : IDataParameterSynAppDataParameter : IDataParameter
• SynAppDataParameterCollection : IDataParameterCollectionSynAppDataParameterCollection : IDataParameterCollection
• SynAppDataReader : IDataReaderSynAppDataReader : IDataReader
Need to set a reference to Microsoft.ReportingServices.Interfaces.
This file is located in C:/Program Files/Microsoft SQL Server/MSSQL/Reporting
Services/ReportServer/bin/Microsoft.ReportingServices.Interfaces.dll
Deploying SynAppDataExtension Deploying SynAppDataExtension
Deploying Data Extension to a Report Server Deploying Data Extension to a Report Server
• Copy assembly to bin directory of the Report ServerCopy assembly to bin directory of the Report Server
• Changes required in the RSReportServer.config fileChanges required in the RSReportServer.config file
• Find the existing data extensions and add the new extensionFind the existing data extensions and add the new extension
• <Extension Name="SynAppDS" Type="SynAppDataExtension.SynAppConnection, <Extension Name="SynAppDS" Type="SynAppDataExtension.SynAppConnection, SynAppDataExtension"/>
SynAppDataExtension"/>
• Changes are also required to the rssvpolicy.configChanges are also required to the rssvpolicy.config
<CodeGroup class="UnionCodeGroup”
version="1"
PermissionSetName="FullTrust"
Name="SynAppDataExtension"
Description="Code group for my data processing extension">
<IMembershipCondition class="UrlMembershipCondition“
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\ReportServer\bin\SynAppDataExtension.dll"
/>
</CodeGroup>
Deploying SynAppDataExtension Deploying SynAppDataExtension
Deploying Data Extension to the Report Designer Deploying Data Extension to the Report Designer
• Copy assembly to Report Designer folderCopy assembly to Report Designer folder
• Changes required in the RSReportDesigner.config fileChanges required in the RSReportDesigner.config file
• Find the existing data extensions and add the new extensionFind the existing data extensions and add the new extension
• <Extension Name="SynAppDS" <Extension Name="SynAppDS"
Type="SynAppDataExtension.SynAppConnection, Type="SynAppDataExtension.SynAppConnection, SynAppDataExtension"/>
SynAppDataExtension"/>
• Changes are also required to the rspreviewpolicy.configChanges are also required to the rspreviewpolicy.config
<CodeGroup class="UnionCodeGroup”
version="1"
PermissionSetName="FullTrust"
Name="SynAppDataExtension"
Description="Code group for my data processing extension">
<IMembershipCondition class="UrlMembershipCondition“
version="1"
Url="C:\Program Files\Microsoft SQL Server\80\Tools\Report Designer\ReportServer\bin\SynAppDataExtension.dll"
/>
</CodeGroup>
Additional Resources Additional Resources
Microsoft SQL Reporting Services Microsoft SQL Reporting Services
• www.microsoft.com/sql/reportingwww.microsoft.com/sql/reporting
MSDN Reporting Services Developer CenterMSDN Reporting Services Developer Center
• msdn.microsoft.com/SQL/sqlwarehouse/ReportingServicesmsdn.microsoft.com/SQL/sqlwarehouse/ReportingServices
Reporting Services BlogsReporting Services Blogs
• blogs.msdn.com/tudortrblogs.msdn.com/tudortr
• blogs.sqlxml.org/bryantlikesblogs.sqlxml.org/bryantlikes
• odetocode.comodetocode.com
Recommended Reading Recommended Reading
• Microsoft Reporting Services in Action – Teo LachevMicrosoft Reporting Services in Action – Teo Lachev
• Microsoft SQL Server 2000 Reporting Services – Brian LarsonMicrosoft SQL Server 2000 Reporting Services – Brian Larson
• Hitchhiker’s Guide to SQL Server 2000 Reporting Services – Hitchhiker’s Guide to SQL Server 2000 Reporting Services – Peter Blackburn William Vaughn
Peter Blackburn William Vaughn
Questions?
Questions?
Presenter - Doug Nelson Presenter - Doug Nelson
Company - SynApp north Company - SynApp north
Web Site - www.synappnorth.com Web Site - www.synappnorth.com