Search code examples
c#mysqlcsvssisdynamics-crm

How can I remove duplicates before calling create in Dynamics CRM?


I am doing this to become better with SSIS and Microsoft Dynamics CRM. First, I'll give some background:

  • Adding records to Dynamics CRM is very slow.
  • Enabling duplicate detection on this makes adding records even slower.
  • Retrieving data from the source doesn't take nearly as long as creating.

What I'd like to do is take every Account record with sample in the name, for example, A. Datum (sample), and create as many iterations as possible, without duplicates, until Microsoft shuts down my online trial org. Below is the Nameing convention for these Accounts:

  • A. Datum (sample), A. Datum (sample)1, A.Datum (sample)2, ... A.Datum (sample)?

I have already created Script Components to create 10 iterations of every original sample Account and every sample Account in the data flow that ends with 0. This data flow is then placed inside a looping container. I am allowing this to loop until failure, more on that later.

Yes, this is silly. However, it poses some really important challenges. For example, this challenge will require creating millions of records, so I need to do this efficiently. I have already:

  • Increased the batch size as much as possible.
  • Limited the number of attributes being added as much as I possibly could.

Now, all I think I have to do is prevent duplicates from returning to the Dynamics CRM Destination (currently a Flat File). The program runs fine the first time, but the second run results in this. I'd like to remove all the records that have either a !IsNull(accountid) or have a record with the same name that has a !IsNull(accountid). See the records below:

"accountnumber","name","ownerid","owneridtype","accountid","ErrorColumn","CrmErrorMessage"
"buubblee","A. Datum Corporation (sample)","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{3A32DC19-9456-E711-80E2-3863BB368DE0}","",""
"buubblee","A. Datum Corporation (sample)1","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{C3964ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)1","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)10","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{F3964ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)10","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)11","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)12","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)13","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)14","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)15","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)16","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)17","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)18","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)19","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)2","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{04974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)2","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)20","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)3","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{13974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)3","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)4","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{26974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)4","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)5","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{38974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)5","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)6","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{4C974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)6","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)7","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{57974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)7","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)8","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{62974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)8","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"buubblee","A. Datum Corporation (sample)9","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{72974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"buubblee","A. Datum Corporation (sample)9","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{2E32DC19-9456-E711-80E2-3863BB368DE0}","",""
"ABC28UU7","Adventure Works (sample)1","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{7D974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)1","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)10","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{92974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)10","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)11","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)12","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)13","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)14","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)15","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)16","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)17","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)18","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)19","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)2","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{9D974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)2","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)20","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)3","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{A3974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)3","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)4","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{AA974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)4","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)5","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{B1974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)5","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)6","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{B7974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)6","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)7","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{BE974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)7","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)8","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{C5974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)8","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"ABC28UU7","Adventure Works (sample)9","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","{CB974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"ABC28UU7","Adventure Works (sample)9","{31EAF056-9756-E711-80E1-3863BB35DE20}","systemuser","","",""
"","custom","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{61AD988F-7D5B-E711-80E4-ECB1D78B6B00}","",""
"","Test (sample)","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{81073B99-7D5B-E711-80E4-ECB1D78B6B00}","",""
"","Test (sample)1","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{D2974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)1","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)10","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{DA974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)10","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)11","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)12","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)13","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)14","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)15","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)16","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)17","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)18","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)19","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)2","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{E1974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)2","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)20","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)3","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{E8974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)3","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)4","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{EE974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)4","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)5","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{F4974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)5","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)6","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{FC974ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)6","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)7","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{03984ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)7","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)8","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{09984ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)8","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""
"","Test (sample)9","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","{11984ECD-E05C-E711-80E5-ECB1D78B6B00}","",""
"","Test (sample)9","{FD1AEC8D-025A-45B8-9206-A200680865E4}","systemuser","","",""

When complete, I will place this data flow into a For Loop Container, set EvalExpression to true, and wait for Microsoft to send me a cease and desist. (The actual result will probably be much less spectacular.)

I've already tried sorting via name, accountid, visa versa, then sorting by accountid again and removing duplicates but the Sort Component does not consistently remove the duplicates that I want. I am looking for an alternative. Here is proof that I tried:

Data Flow

I will be very happy to consider different approaches to this entire exercise. As a summary, I'd like to create millions of uniquely named iterations of sample Account records a day without using Dynamics CRM duplicate detection. I'd also like to do this with one Control Flow. On the other hand, all I believe I need is one more Script Component.


Solution

  • I solved this problem. I added a Script Component and modified the Input0_ProcessInputRow method. See below:

    #region Help:  Introduction to the Script Component
    /* The Script Component allows you to perform virtually any operation that can be accomplished in
     * a .Net application within the context of an Integration Services data flow.
     *
     * Expand the other regions which have "Help" prefixes for examples of specific ways to use
     * Integration Services features within this script component. */
    #endregion
    
    #region Namespaces
    using System;
    using System.Data;
    using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
    using Microsoft.SqlServer.Dts.Runtime.Wrapper;
    using System.Text.RegularExpressions;
    #endregion
    
    /// <summary>
    /// This is the class to which to add your code.  Do not change the name, attributes, or parent
    /// of this class.
    /// </summary>
    [Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
    public class ScriptMain : UserComponent
    {
        #region Help:  Using Integration Services variables and parameters
        /* To use a variable in this script, first ensure that the variable has been added to
         * either the list contained in the ReadOnlyVariables property or the list contained in
         * the ReadWriteVariables property of this script component, according to whether or not your
         * code needs to write into the variable.  To do so, save this script, close this instance of
         * Visual Studio, and update the ReadOnlyVariables and ReadWriteVariables properties in the
         * Script Transformation Editor window.
         * To use a parameter in this script, follow the same steps. Parameters are always read-only.
         *
         * Example of reading from a variable or parameter:
         *  DateTime startTime = Variables.MyStartTime;
         *
         * Example of writing to a variable:
         *  Variables.myStringVariable = "new value";
         */
        #endregion
    
        #region Help:  Using Integration Services Connnection Managers
        /* Some types of connection managers can be used in this script component.  See the help topic
         * "Working with Connection Managers Programatically" for details.
         *
         * To use a connection manager in this script, first ensure that the connection manager has
         * been added to either the list of connection managers on the Connection Managers page of the
         * script component editor.  To add the connection manager, save this script, close this instance of
         * Visual Studio, and add the Connection Manager to the list.
         *
         * If the component needs to hold a connection open while processing rows, override the
         * AcquireConnections and ReleaseConnections methods.
         * 
         * Example of using an ADO.Net connection manager to acquire a SqlConnection:
         *  object rawConnection = Connections.SalesDB.AcquireConnection(transaction);
         *  SqlConnection salesDBConn = (SqlConnection)rawConnection;
         *
         * Example of using a File connection manager to acquire a file path:
         *  object rawConnection = Connections.Prices_zip.AcquireConnection(transaction);
         *  string filePath = (string)rawConnection;
         *
         * Example of releasing a connection manager:
         *  Connections.SalesDB.ReleaseConnection(rawConnection);
         */
        #endregion
    
        #region Help:  Firing Integration Services Events
        /* This script component can fire events.
         *
         * Example of firing an error event:
         *  ComponentMetaData.FireError(10, "Process Values", "Bad value", "", 0, out cancel);
         *
         * Example of firing an information event:
         *  ComponentMetaData.FireInformation(10, "Process Values", "Processing has started", "", 0, fireAgain);
         *
         * Example of firing a warning event:
         *  ComponentMetaData.FireWarning(10, "Process Values", "No rows were received", "", 0);
         */
        #endregion
    
        /// <summary>
        /// This method is called once, before rows begin to be processed in the data flow.
        ///
        /// You can remove this method if you don't need to do anything here.
        /// </summary>
        public override void PreExecute()
        {
            base.PreExecute();
            /*
             * Add your code here
             */
        }
    
        /// <summary>
        /// This method is called after all the rows have passed through this component.
        ///
        /// You can delete this method if you don't need to do anything here.
        /// </summary>
        public override void PostExecute()
        {
            base.PostExecute();
            /*
             * Add your code here
             */
        }
    
        /// <summary>
        /// This method is called once for every row that passes through the component from Input0.
        ///
        /// Example of reading a value from a column in the the row:
        ///  string zipCode = Row.ZipCode
        ///
        /// Example of writing a value to a column in the row:
        ///  Row.ZipCode = zipCode
        /// </summary>
        /// <param name="Row">The row that is currently passing through the component</param>
        public override void Input0_ProcessInputRow(Input0Buffer Row)
        {
            if (Row.name.EndsWith("(sample)"))
            {
                //ignore
            }
            else if(Row.name.Contains("(sample)"))
            {
                string previousAccountnumber = Row.accountnumber;
                string previousName = Row.name;
                Guid previousOwnerid = Row.ownerid;
                string previousOwnertype = Row.ownertype;
                Row.NextRow();
                string accountnumber = Row.accountnumber;
                string name = Row.name;
                Guid ownerid = Row.ownerid;
                string ownertype = Row.ownertype;
                if (previousName.Equals(name))
                {
                    //ignore both
                }
                else
                {
                    int number = Int32.Parse(Regex.Match(previousName, @"\d+$").Value);
                    int number2 = Int32.Parse(Regex.Match(name, @"\d+$").Value);
                    if (number + 1 == number2)
                    {
                        //add both
                        addRow(previousAccountnumber, previousName, previousOwnerid, previousOwnertype);
                        addRow(accountnumber, name, ownerid, ownertype);
                    }
                    else if (number > number2)
                    {
                        //add previous
                        addRow(previousAccountnumber, previousName, previousOwnerid, previousOwnertype);
                    }
                    else
                    {
                        //add current
                        addRow(accountnumber, name, ownerid, ownertype);
                    }
                }
            }
    
        }
        private void addRow(string accountnumber, string name, Guid ownerid, string ownertype)
        {
            Output0Buffer.AddRow();
            Output0Buffer.accountnumber = accountnumber;
            Output0Buffer.name = name;
            Output0Buffer.ownerid = ownerid;
            Output0Buffer.ownertype = ownertype;
        }
    }
    

    I now have the output that I wanted! See below:

    systemuser,A. Datum Corporation (sample)11,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)12,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)13,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)14,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)15,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)16,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)17,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)18,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)19,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,A. Datum Corporation (sample)20,{FD1AEC8D-025A-45B8-9206-A200680865E4},buubblee
    systemuser,Adventure Works (sample)11,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)12,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)13,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)14,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)15,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)16,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)17,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)18,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)19,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Adventure Works (sample)20,{31EAF056-9756-E711-80E1-3863BB35DE20},ABC28UU7
    systemuser,Test (sample)11,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)12,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)13,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)14,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)15,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)16,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)17,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)18,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)19,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    systemuser,Test (sample)20,{FD1AEC8D-025A-45B8-9206-A200680865E4},
    

    Here is my updated Data Flow: enter image description here

    I'm well on my way to achieving my goal. Thank you all who looked at my question!