SSIS Analyzer is a Windows desktop tool that loads SSIS projects — from an .ispac file, a standalone .dtsx package, or directly from the SSISDB catalog — and shows every element inside them: control flow, data flow, parameters, connections, expressions. It compares two versions of a project field-by-field, traces data lineage across your whole workspace, and exports the result as self-contained HTML documentation.
Most SSIS estates have no dependency map, no lineage record, and no reliable way to know what changed between the version that was built and the version that's actually deployed in the catalog.
| Without it | With SSIS Analyzer |
|---|---|
| No record of what feeds what across dozens of packages | Cross-project, end-to-end data lineage |
| Deploy first, find out what changed later | Field-by-field project comparison before deployment |
| Reading SSIS packages means opening Visual Studio | A dedicated viewer with syntax-highlighted SQL and search |
| Documentation, if it exists, is stale within a sprint | Self-contained HTML export, regenerated on demand |
| No way to script it into a build pipeline | A command-line mode for CI/CD |
| Operating system | Windows 10, Windows 11, or Windows Server 2019 or later |
| Runtime | Self-contained .NET 8 build (win-x64) — no separate .NET runtime install required |
| SQL Server | 2012 or later, only if you connect to a live SSISDB catalog |
| Memory / disk | 4 GB RAM recommended; ~500 MB disk for the install and working files |
| Dependency | Microsoft.Data.SqlClient — used only for SSISDB catalog connections |
This is a standalone Windows desktop application, not a PowerShell module — it doesn't need dbatools or PowerShell to run. It's built by the same author as the rest of this toolchain and is licensed separately: a full-featured 30-day trial, then either a machine-bound license or continued use with watermarked HTML exports.
| Action | What it does |
|---|---|
| Add | Load one or more .ispac project files |
| DTSX | Load a single .dtsx package, treated as a one-package project |
| SSISDB | Load a deployed project from the SSIS catalog |
| Remove | Remove the selected project from the workspace |
| Refresh | Reload every source from disk or the catalog |
Loading from SSISDB: enter the server, choose Windows or SQL authentication, connect, then pick a folder and project from the catalog tree. The project binary is retrieved through catalog.get_project and parsed exactly like a file — catalog-specific metadata (deployment info, environments, parameter values, references) appears under the project's catalog branch. Passwords are never stored; SQL-authenticated sources ask for the password again the next time you reload.
Expand a project in the tree: Project → Packages → Package. Every package shows:
| Properties | Creator, creation date, protection level, locale, and more |
| Parameters, variables, connections | Connection strings broken down by server, database, and user |
| Expressions | Every SSIS expression in the package, collected in one place |
| Control flow | The executable/container tree in execution order, including nested containers |
| Event handlers | Attached OnError, OnPreExecute, and similar handlers |
| Data flow components | With their input and output columns |
The control-flow panel draws the package or container as boxes and dependency arrows, positioned from the saved layout; clicking a box selects the matching node in the tree. The search box (2+ characters) highlights and expands matches, Enter jumps to the next one, and the match count shows in the status bar. Execute SQL Tasks display their connection, parameter/result bindings, and the SQL itself — automatically formatted and syntax-highlighted.
File → Compare projects… — pick project A (old) and B (new) from anything already loaded, in any mix of file and SSISDB sources. A common use: load the .ispac build output alongside the deployed SSISDB project, and compare before the deployment goes out.
SQL changes are shown as a line-by-line diff. Two toggles cut the noise: Differences only, and Hide deployment-only (suppresses fields that only ever differ between a file and a deployed catalog copy, such as ProtectionLevel or the version GUID). Export as HTML… writes the comparison out as a standalone report.
File → Lineage builds lineage across every loaded project at once — cross-project, end to end. Four tabs:
| Table flow | Source table → target table edges, each labeled with the package/task that creates it |
| Table explorer | Pick a table to see its upstream sources and downstream targets (transitively), plus the packages affected by a change to it |
| Package call graph | Which package calls which, built from Execute Package Tasks |
| Column links | Source column → target column mappings within each data flow |
Column-level lineage is reliable within a single data flow, built from the SSIS lineageId. Table-level lineage sourced from Execute SQL Tasks is heuristic — it's parsed from the SQL text itself, not from a guaranteed metadata source. Export as HTML… from the lineage view produces a report that includes a drawn package-flow diagram.
File → Export HTML…, then choose a folder. This generates:
index.html | An overview of every loaded project, linking to the workspace-wide lineage report |
| One page per project | Every element as tables and forms, formatted/highlighted SQL, an embedded control-flow diagram per package, and an expressions table |
lineage.html | The workspace-wide lineage report |
No external dependencies — open index.html in any browser, on any machine, with no server involved.
File → Save workspace as… saves the current set of loaded sources to a .ssisws file; File → Open workspace… loads one back. Useful for keeping separate sets — DEV, PROD, a handover package — and the current workspace is also persisted automatically between sessions.
The same engine that drives the GUI is available from the command line, for use in build processes and CI/CD pipelines.
SsisAnalyzer.exe --dump <project.ispac> # Console summary of the parse SsisAnalyzer.exe --export <project.ispac> [outDir] # Write the HTML documentation SsisAnalyzer.exe --compare <a.ispac> <b.ispac> [out.html] # Write a comparison report SsisAnalyzer.exe --lineage <project.ispac> # Lineage summary + lineage.html
| Trial | 30 days from first launch, no features disabled |
| Status & activation | Help → About / License… shows license status and a Machine ID, with an Install license… button |
| Getting a license | Send the Machine ID shown in that dialog to get a machine-bound .lic file, then install it from the same dialog |
| After the trial, unlicensed | The app keeps working, but HTML exports carry an "UNLICENSED EVALUATION COPY" watermark |
A Visual Studio-style dark theme runs throughout — title bar, menus, toolbar, tree, tabs, and the control-flow diagram — with monochrome toolbar icons. The main window is a project/package tree on the left, the control-flow diagram top-right, and a read-only, syntax-highlighted details pane bottom-right.
.ispac files and deployed SSISDB projects are read through the same parser, so a file and its deployed counterpart can be compared like-for-like. SSISDB access uses a single dependency, Microsoft.Data.SqlClient, and nothing else — no PowerShell, no dbatools, no external CLR requirement.
Passwords for SQL-authenticated SSISDB sources are never written to disk; they're re-entered on each session that needs them. Licenses are RSA-signed and verified against an embedded public key — the private signing key never ships with the product.
SSIS Analyzer reads an SSISDB catalog — it doesn't create one. These are the natural steps before and after using it.
Invoke-sqmSSISConfiguration
Creates the catalog and folder, and applies permissions and the execution policy — do this on the SQL Server side before connecting SSIS Analyzer to it.
A self-contained Windows executable with a full-featured 30-day trial included — no installer, no separate .NET runtime.
Machine-bound licenses beyond the trial period — get in touch for details.