The migration report
Every import writes ssis-migration-report.md into the output folder. It is built from what that
import did, so it cannot claim more than the importer did. The report uses the words of all the
importers: a job is an SSIS package, a component is a task, a container, or a data flow
component.
Sections
| Section | What it holds |
|---|---|
| Totals | Packages, components, and the count per status; the number of components flagged for review |
| Per job | For each package: its components and how many are flagged |
| Most frequent source components | Each SSIS class (Microsoft.DerivedColumn, STOCK:FOREACHLOOP, …), how often it occurs, how often it is flagged |
| Needs review | Every flagged component: package, class, name, status, and the reason |
| Scope of this report | What the statuses do and do not claim |
| Packages that failed to import | Packages that could not be read or converted and have no workflow, with the error; only when there are any |
| Database connections | The Hop connections written and where; for each, the connection manager it came from and what to check: the password variable to set, Windows authentication, a new name, a Generic connection to complete. Says so when the folder is not in a Hop project, as Hop GUI then does not find the connections |
| Project parameters | The environment configuration file written for each project with parameters; only when there are any |
| Hop settings | HOP_EMPTY_STRING_DIFFERS_FROM_NULL=Y, and how Slowly Changing Dimensions match business keys (SSIS_KEYS_IGNORE_CASE) |
From a real report: three of the four rows in the Needs review section of the flight operations warehouse, a public SSIS project of three packages under the MIT licence:
| Job | Component | Name | Status | Why |
|---|---|---|---|---|
| Flight_Load_DW | Microsoft.Package | Package1 | PARTIAL | Variables [CurrentDate] are computed when the workflow starts. SSIS evaluates them each time they are read: if a task changes a variable they depend on, set them again after it. (+1 more) |
| Flight_Load_DW | Microsoft.SCD | Load DimPassenger (SCD) | PARTIAL | A row whose fixed attribute changed goes to the Fixed Attribute Output and not to the Changing Attribute Updates Output; check that this matches SSIS for your rows. |
| Update_Fact_Completion | Microsoft.FlatFileSource | Load FactCompletionUpdates csv | PARTIAL | Date and time columns are read as strings: SSIS parses them with the locale, whose format is not in the package. Convert them with a Select Values and a format. |
How a component's status is decided
The status starts from the component's converter, as listed in the component mapping. What happened during the import can then change it:
| What happened | Reported as |
|---|---|
| The converter carried the settings across | AUTO |
| The converter carried it across, but a known part of the behaviour is not: an error output not routed, SQL parameters substituted as text, a fuzzy match whose scores differ | PARTIAL |
| A part needs a person: a Script Task, a Script Component that was not translated, an expression the translator does not support, an event handler Hop has no event for | MANUAL |
| The converter threw an error; the component is a Dummy with the error in its description | UNSUPPORTED |
| No converter for the component; it is a Dummy that keeps its name, position and hops | UNSUPPORTED |
Always flagged
Some components are flagged whatever else happened, because they always need a person to look:
- every Script Task and Script Component: their code is listed with the file it was written to; a Script Component translated by a language model is flagged as "Machine-translated script", with the model and any doubts left;
- Execute SQL Tasks and database sources whose
?parameters became${variables}: Hop substitutes them as text; - Fuzzy Lookups, Cache Transforms and Excel Destinations, which behave differently in a known way;
- Merge Joins after a Sort with comparison flags, whose result in SSIS depends on row order;
- Join actions in a workflow, as Hop can start a Join twice when its branches finish at the same moment;
- Execute Package Tasks that run a package file rather than a package of the project;
- package and container event handlers, sensitive parameters, and variables computed by expressions.
Richer reports
An add-on that implements the importer's IImportReportProvider interface replaces the first five
sections with its own. Nothing in the importer depends on one being installed.