예제 #1
0
        /// <summary>
        /// Get the datatable for the provided query and substitution variables.  Note that OpenConnections()
        /// should have been run before this is run.
        /// </summary>
        /// <param name="query">The RRQuery object to be executed</param>
        /// <param name="queryVariables">Substitution variables to be used to create the final SQL to be run</param>
        /// <returns></returns>
        private DataTable getQueryDataTable(RRQuery query, List <QueryVariable> queryVariables)
        {
            var querySql = buildQuerySql(queryVariables, query.SQL.Value);

            try
            {
                var dataSet = new DataSet();
                // Get the connection for the query.
                var firstQueryDbConn = openConnections.Single(conn => conn.Key == query.ConnStringName).Value;
                var connType         = firstQueryDbConn.GetType();
                if (connType.Name == "OleDbConnection")
                {
                    // It's an Ole DB connection
                    var firstQueryConn = (OleDbConnection)firstQueryDbConn;
                    using (OleDbCommand command = new OleDbCommand(querySql, firstQueryConn))
                        using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                            adapter.Fill(dataSet);
                }
                return(dataSet.Tables[0]);                /*
                                                           * else
                                                           * {
                                                           * // It's a teradata connection
                                                           * var firstQueryConn = (TdConnection)firstQueryDbConn;
                                                           * using (TdCommand command = new TdCommand(querySql, firstQueryConn))
                                                           * using (TdDataAdapter adapter = new TdDataAdapter(command))
                                                           * adapter.Fill(dataSet);
                                                           * return dataSet.Tables[0];
                                                           * }
                                                           */
            }
            catch (Exception ex)
            {
                CloseConnections();
                throw new Exception(string.Format("Error {0} while running query {0} SQL {1}", getFullErrorMessage(ex), query.Name, querySql));
            }
        }
예제 #2
0
        private void populateSampleReconObjects()
        {
            sampleSources = new Sources();
            sampleRecons = new Recons();
            // Create sample objects to use to populate sample Sources and RRReports XML files
            // for user to use as basis for real recons.

            // Create RRSourcesSample.xml
            // Contains sample connection template, connection, and query objects in SampleRRSources
            // Sample Connection String Templates
            var sqlServerTemplate = new ConnectionStringTemplate();
            sqlServerTemplate.Name = "SQL Server";
            sqlServerTemplate.Template = "Provider=SQLNCLI11;Server=|ServerName|;Database=|DatabaseName|;Trusted_Connection=yes";
            var teradataTemplate = new ConnectionStringTemplate();
            teradataTemplate.Name = "Teradata";
            teradataTemplate.Template = "Data Source=|ServerName|;User ID=|User|;Password=|Password|;Session Mode=TERADATA;";
            var oracleTemplate = new ConnectionStringTemplate();
            oracleTemplate.Name = "Oracle";
            oracleTemplate.Template = "Provider=MSDAORA.1;Data Source=|TNSName|;User Id=|User|;Password=|Password|;Persist Security Info=false;";
            sampleSources.ConnStringTemplates.Add(sqlServerTemplate);
            sampleSources.ConnStringTemplates.Add(teradataTemplate);
            sampleSources.ConnStringTemplates.Add(oracleTemplate);

            // Sample Connection Strings
            var warehouseConnectionString = new RRConnectionString();
            warehouseConnectionString.Name = "DataWarehouse Dev";
            warehouseConnectionString.TemplateName = "SQL Server";
            warehouseConnectionString.DatabaseType = DatabaseType.SQLServer;
            warehouseConnectionString.TemplateVariables = new List<Variable>
            {
                new Variable {SubName="ServerName", SubValue="bos-dbdevwh02"},
                new Variable {SubName="DatabaseName", SubValue="DataWarehouse" }
            };
            var dalUatConnectionString = new RRConnectionString();
            dalUatConnectionString.Name = "Teradata UAT";
            dalUatConnectionString.TemplateName = "Teradata";
            dalUatConnectionString.DatabaseType = DatabaseType.Teradata;
            dalUatConnectionString.TemplateVariables = new List<Variable>
            {
                new Variable {SubName="ServerName", SubValue="tddevbos"},
                new Variable {SubName="User", SubValue="DAL_READ"},
                new Variable {SubName="Password", SubValue="DAL_READ"}
            };

            var edmUatConnectionString = new RRConnectionString();
            edmUatConnectionString.Name = "EDM UAT";
            edmUatConnectionString.TemplateName = "Oracle";
            edmUatConnectionString.DatabaseType = DatabaseType.Oracle;
            edmUatConnectionString.TemplateVariables = new List<Variable>
            {
                new Variable {SubName="TNSName", SubValue="EDM_T"},
                new Variable {SubName="User", SubValue="edm_read"},
                new Variable {SubName="Password", SubValue="edm_read"}
            };
            sampleSources.ConnectionStrings.Add(dalUatConnectionString);
            sampleSources.ConnectionStrings.Add(edmUatConnectionString);
            sampleSources.ConnectionStrings.Add(warehouseConnectionString);

            // Sample Queries
            var doc = new XmlDocument();
            var portGicsSectorDetail = new RRQuery();
            portGicsSectorDetail.Name = "PortGicsSectorDetails";
            portGicsSectorDetail.ConnStringName = "DataWarehouse Dev";
            portGicsSectorDetail.SQL = doc.CreateCDataSection(@"with latestAttrInsEffDate as
                                                            (
                                                                select
                                                                    atins_id,
                                                                    max(effect_date) LatestRowDate
                                                                from warehouse.attr_instrument
                                                                where effect_date <= '|DateWanted|'
                                                                group by atins_id
                                                            ),
                                                            latestAttrIns as
                                                            (
                                                                select
                                                                    laied.atins_id,
                                                                    laied.LatestRowDate,
                                                                    max(ai.atins_release_number) LatestReleaseNumber
                                                                from latestAttrInsEffDate laied
                                                                join warehouse.attr_instrument ai
                                                                on laied.atins_id = ai.atins_id
                                                                and laied.LatestRowDate = ai.effect_date
                                                                group by laied.atins_id, laied.LatestRowDate)
                                                            select
                                                                bigs.atptf_id,
                                                                p.portf_name,
                                                                bigs.calcul_date,
                                                                bigs.atins_id,
                                                                ai.atins_name,
                                                                ai.effect_date,
                                                                ai.end_valid_date,
                                                                ai.atins_release_number
                                                            from warehouse.bisamattributions_gics_sec bigs
                                                            join warehouse.portfolio p
                                                            on  bigs.atptf_id = |PortId|
                                                            and bigs.atins_id <> 0
                                                            and bigs.calcul_date = '|DateWanted|'
                                                            and bigs.dateinactive = '31-dec-9999'
                                                            and bigs.atptf_id = p.portf_id
                                                            join latestAttrIns lai
                                                            on bigs.atins_id = lai.atins_id
                                                            and bigs.atins_release_number = lai.LatestReleaseNumber
                                                            join warehouse.attr_instrument ai
                                                            on lai.atins_id = ai.atins_id
                                                            and lai.LatestRowDate = ai.effect_date
                                                            and lai.LatestReleaseNumber = ai.ATINS_RELEASE_NUMBER
                                                            order by atins_name");
            var portAttribGroupcheck = new RRQuery();
            portAttribGroupcheck.Name = "PortAttribGroupCheck";
            portAttribGroupcheck.ConnStringName = "DataWarehouse Dev";
            portAttribGroupcheck.SQL = doc.CreateCDataSection(@"with portAttributionsRuns as (
                                                            select
                                                                max(checksum(atptf_id, atins_id, atins_release_number, calcul_date, frequency_id, begin_date, portf_config_id)) portAttribRunKey,
                                                                atptf_id,
                                                                atins_id,
                                                                atins_release_number,
                                                                calcul_date,
                                                                frequency_id,
                                                                begin_date,
                                                                portf_config_id,
                                                                user_defined_group_id
                                                            from warehouse.bisamAttributions_|SegmentTableName| bigs
                                                            where atptf_id = |PortId| and atins_id <> 0 and dateinactive = '31-dec-9999'
                                                            group by atptf_id, atins_id, atins_release_number, calcul_date, frequency_id, begin_date, portf_config_id, user_defined_group_id),
                                                        portMultiGroupCount as (
                                                            select
                                                                portAttribRunkey,
                                                                atptf_id,
                                                                atins_id,
                                                                atins_release_number,
                                                                calcul_date,
                                                                frequency_id,
                                                                begin_date,
                                                                portf_config_id
                                                            from portAttributionsRuns
                                                            group by portAttribRunKey, atptf_id, atins_id, atins_release_number, calcul_date, frequency_id, begin_date, portf_config_id
                                                            having count(*) > 1
                                                        )
                                                        select par.*, p.portf_name
                                                        from portAttributionsRuns par
                                                        join portMultiGroupCount pmgc
                                                        on par.portAttribRunKey = pmgc.portAttribRunKey
                                                        join warehouse.portfolio p
                                                        on par.atptf_id = p.portf_id
                                                        order by par.atins_id, par.atins_release_number, par.calcul_date, par.FREQUENCY_ID, par.begin_date, user_defined_group_id");
            var edmQuery = new RRQuery();
            edmQuery.Name = "EdmProductDayPositions";
            edmQuery.ConnStringName = "EDM UAT";
            edmQuery.SQL = doc.CreateCDataSection("select fm.snapshot_id, trim(fm.entity_id) entity_id, pd.security_alias, trim(pd.long_short_indicator) long_short_indicator, pd.market_value_base, pd.market_value_local from datamartdbo.fund_master fm join datamartdbo.position_details pd on fm.entity_id = '|ProductId|' and fm.effective_date = '|EdmDateWanted|' and fm.dmart_fund_id = pd.dmart_fund_id");
            var teraQuery = new RRQuery();
            teraQuery.Name = "DalProductDayPositions";
            teraQuery.ConnStringName = "Teradata UAT";
            teraQuery.SQL = doc.CreateCDataSection("select fp.snapshotid, dp.productid, dp.entitylongname, fp.OrigSecurityId, fp.LongShortIndicator, fp.marketvaluebase, fp.marketvaluelocal from dimproduct dp join factposition fp on dp.productid = '|ProductId|' and dp.dimproductid = fp.dimproductid and fp.dimtimeid = |DalDateWanted|");
            var posFkQuery = new RRQuery();
            posFkQuery.Name = "DalPositionsMissingFk";
            posFkQuery.ConnStringName = "Teradata UAT";
            posFkQuery.SQL = doc.CreateCDataSection("select * from (select dimtimeid,  case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'BOTH' when dimsecurityid = 'UNKNOWN' then 'SECURITY' else 'PRODUCT' end MissingEntity, case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'Security ID: ' || OrigSecurityId || '; Product ID: ' || OrigProductId when dimsecurityid = 'UNKNOWN' then OrigSecurityId else OrigProductId end MissingEntityId from factposition where (dimsecurityid = 'UNKNOWN' or dimproductid = 'UNKNOWN') and dimtimeid >= 1131101) data group by MissingEntity, MissingEntityId, DimTimeId order by MissingEntity, MissingEntityId, DimTimeId");
            sampleSources.Queries.Add(portGicsSectorDetail);
            sampleSources.Queries.Add(portAttribGroupcheck);
            sampleSources.Queries.Add(edmQuery);
            sampleSources.Queries.Add(teraQuery);
            sampleSources.Queries.Add(posFkQuery);

            // Create RRReportsSample.xml
            // Holds sample recon report definitions along with substitution values to use
            // in sample queries.
            // first recon report and write to file to create file to use as basis to create
            // full XML file specifying all the recon reports to run.

            // First two recons are examples of comparing two data sets
            // Acadian-specific example (Note: the actual example is not necessarily useful,
            // it's just being done to show how the process works)
            // This recon uses the same query twice, so the query variables are query specific
            ReconReport warehousePortGicsRecon = new ReconReport();
            warehousePortGicsRecon.Name = "Compare GICS Sec Details for 2 days for 1 portfolio";
            warehousePortGicsRecon.TabLabel = "GICS Sec Changes";
            warehousePortGicsRecon.FirstQueryName = "PortGicsSectorDetails";
            warehousePortGicsRecon.SecondQueryName = "PortGicsSectorDetails";

            QueryColumn portfolioId = new QueryColumn();
            portfolioId.Label = "Portfolio ID";
            portfolioId.Type = ColumnType.number;
            portfolioId.IdentifyingColumn = true;
            portfolioId.AlwaysDisplay = true;
            portfolioId.FirstQueryColName = "atptf_id";
            portfolioId.SecondQueryColName = "atptf_id";

            QueryColumn portfolioName = new QueryColumn();
            portfolioName.Label = "Portfolio Name";
            portfolioName.Type = ColumnType.text;
            portfolioName.IdentifyingColumn = false;
            portfolioName.AlwaysDisplay = true;
            portfolioName.FirstQueryColName = "portf_name";
            portfolioName.SecondQueryColName = "portf_name";

            QueryColumn calcDate = new QueryColumn();
            calcDate.Label = "Calcul Date";
            calcDate.Type = ColumnType.date;
            calcDate.IdentifyingColumn = false;
            calcDate.AlwaysDisplay = true;
            calcDate.FirstQueryColName = "calcul_date";
            calcDate.SecondQueryColName = "calcul_date";

            QueryColumn instrumentId = new QueryColumn();
            instrumentId.Label = "Instrument Id";
            instrumentId.Type = ColumnType.number;
            instrumentId.IdentifyingColumn = true;
            instrumentId.AlwaysDisplay = true;
            instrumentId.FirstQueryColName = "atins_id";
            instrumentId.SecondQueryColName = "atins_id";

            QueryColumn instrumentName = new QueryColumn();
            instrumentName.Label = "Instrument Name";
            instrumentName.Type = ColumnType.text;
            instrumentName.IdentifyingColumn = false;
            instrumentName.AlwaysDisplay = true;
            instrumentName.FirstQueryColName = "atins_name";
            instrumentName.SecondQueryColName = "atins_name";

            QueryColumn instrumentReleaseNum = new QueryColumn();
            instrumentReleaseNum.Label = "Release #";
            instrumentReleaseNum.Type = ColumnType.number;
            instrumentReleaseNum.IdentifyingColumn = false;
            instrumentReleaseNum.AlwaysDisplay = false;
            instrumentReleaseNum.CheckDataMatch = true;
            instrumentReleaseNum.Tolerance = 1;
            instrumentReleaseNum.FirstQueryColName = "atins_release_number";
            instrumentReleaseNum.SecondQueryColName = "atins_release_number";

            warehousePortGicsRecon.Columns.Add(portfolioId);
            warehousePortGicsRecon.Columns.Add(portfolioName);
            warehousePortGicsRecon.Columns.Add(calcDate);
            warehousePortGicsRecon.Columns.Add(instrumentId);
            warehousePortGicsRecon.Columns.Add(instrumentName);
            warehousePortGicsRecon.Columns.Add(instrumentReleaseNum);

            warehousePortGicsRecon.QueryVariables = new List<QueryVariable>
            {
                new QueryVariable { SubName = "PortId", SubValue = "1003022", QuerySpecific=false },
                new QueryVariable { SubName = "DateWanted", SubValue = "30-jul-2015", QuerySpecific=true, QueryNumber=1 },
                new QueryVariable { SubName = "DateWanted", SubValue = "31-jul-2015",QuerySpecific=true, QueryNumber=2 }
            };

            ReconReport instMultGroupsRecon = new ReconReport();
            instMultGroupsRecon.Name = "Instruments with Multiple Attribution Groups for Similar Runs";
            instMultGroupsRecon.TabLabel = "Multi-group Inst";
            instMultGroupsRecon.FirstQueryName = "PortAttribGroupCheck";
            instMultGroupsRecon.SecondQueryName = string.Empty;

            portfolioId = new QueryColumn();
            portfolioId.Label = "Portfolio ID";
            portfolioId.Type = ColumnType.number;
            portfolioId.AlwaysDisplay = true;
            portfolioId.FirstQueryColName = "atptf_id";

            portfolioName = new QueryColumn();
            portfolioName.Label = "Portfolio Name";
            portfolioName.Type = ColumnType.text;
            portfolioName.AlwaysDisplay = true;
            portfolioName.FirstQueryColName = "portf_name";

            instrumentId = new QueryColumn();
            instrumentId.Label = "Instrument Id";
            instrumentId.Type = ColumnType.number;
            instrumentId.AlwaysDisplay = true;
            instrumentId.FirstQueryColName = "atins_id";

            instrumentReleaseNum = new QueryColumn();
            instrumentReleaseNum.Label = "Release #";
            instrumentReleaseNum.Type = ColumnType.number;
            instrumentReleaseNum.AlwaysDisplay = true;
            instrumentReleaseNum.FirstQueryColName = "atins_release_number";

            calcDate = new QueryColumn();
            calcDate.Label = "Calcul Date";
            calcDate.Type = ColumnType.date;
            calcDate.AlwaysDisplay = true;
            calcDate.FirstQueryColName = "calcul_date";

            var frequencyId = new QueryColumn();
            frequencyId.Label = "Freq";
            frequencyId.Type = ColumnType.number;
            frequencyId.AlwaysDisplay = true;
            frequencyId.FirstQueryColName = "frequency_id";

            var beginDate = new QueryColumn();
            beginDate.Label = "Begin Date";
            beginDate.Type = ColumnType.date;
            beginDate.AlwaysDisplay = true;
            beginDate.FirstQueryColName = "begin_date";

            var portfConfigId = new QueryColumn();
            portfConfigId.Label = "Config Id";
            portfConfigId.Type = ColumnType.number;
            portfConfigId.AlwaysDisplay = true;
            portfConfigId.FirstQueryColName = "portf_config_id";

            var udGroupId = new QueryColumn();
            udGroupId.Label = "Group Id";
            udGroupId.Type = ColumnType.number;
            udGroupId.AlwaysDisplay = true;
            udGroupId.FirstQueryColName = "user_defined_group_id";

            instMultGroupsRecon.Columns.Add(portfolioId);
            instMultGroupsRecon.Columns.Add(portfolioName);
            instMultGroupsRecon.Columns.Add(instrumentId);
            instMultGroupsRecon.Columns.Add(instrumentReleaseNum);
            instMultGroupsRecon.Columns.Add(calcDate);
            instMultGroupsRecon.Columns.Add(frequencyId);
            instMultGroupsRecon.Columns.Add(beginDate);
            instMultGroupsRecon.Columns.Add(portfConfigId);
            instMultGroupsRecon.Columns.Add(udGroupId);

            instMultGroupsRecon.QueryVariables = new List<QueryVariable>
            {
                new QueryVariable { SubName = "PortId", SubValue = "1003022" },
                new QueryVariable { SubName = "SegmentTableName", SubValue = "GICS_Sec" }
            };

            sampleRecons.ReconReports.Add(warehousePortGicsRecon);
            sampleRecons.ReconReports.Add(instMultGroupsRecon);

            /*
            // Note that queries running on two separate platforms may still be compared
            ReconReport edmDalPortDayPositionRecon = new ReconReport();
            edmDalPortDayPositionRecon.Name = "EDM to DAL Product's Positions for Day";
            edmDalPortDayPositionRecon.TabLabel = "EDM DAL Prod Pos";
            edmDalPortDayPositionRecon.FirstQueryName = "EdmProductDayPositions";
            edmDalPortDayPositionRecon.SecondQueryName = "DalProductDayPositions";

            QueryColumn productId = new QueryColumn();
            productId.Label = "Product ID";
            productId.Type = ColumnType.text;
            productId.IdentifyingColumn = true;
            productId.AlwaysDisplay = true;
            productId.FirstQueryColName = "entity_id";
            productId.SecondQueryColName = "productid";

            QueryColumn fundName = new QueryColumn();
            fundName.Label = "Product Name";
            fundName.Type = ColumnType.text;
            fundName.AlwaysDisplay = true;
            fundName.FirstQueryColName = null;
            fundName.SecondQueryColName = "EntityLongName";

            QueryColumn snapshotId = new QueryColumn();
            snapshotId.Label = "Snapshot";
            snapshotId.Type = ColumnType.text;
            snapshotId.AlwaysDisplay = true;
            snapshotId.IdentifyingColumn = true;
            snapshotId.FirstQueryColName = "snapshot_id";
            snapshotId.SecondQueryColName = "snapshotid";

            QueryColumn securityId = new QueryColumn();
            securityId.Label = "Security ID";
            securityId.Type = ColumnType.number;
            securityId.IdentifyingColumn = true;
            securityId.AlwaysDisplay = true;
            securityId.FirstQueryColName = "security_alias";
            securityId.SecondQueryColName = "OrigSecurityId";

            QueryColumn longShortIndicator = new QueryColumn();
            longShortIndicator.Label = "Long-Short Indicator";
            longShortIndicator.Type = ColumnType.text;
            longShortIndicator.AlwaysDisplay = true;
            longShortIndicator.IdentifyingColumn = true;
            longShortIndicator.FirstQueryColName = "long_short_indicator";
            longShortIndicator.SecondQueryColName = "LongShortIndicator";

            QueryColumn marketValueBase = new QueryColumn();
            marketValueBase.Label = "Market Value Base";
            marketValueBase.Type = ColumnType.number;
            marketValueBase.CheckDataMatch = true;
            marketValueBase.FirstQueryColName = "market_value_base";
            marketValueBase.SecondQueryColName = "marketvaluebase";
            marketValueBase.Tolerance = 0;

            QueryColumn marketValueLocal = new QueryColumn();
            marketValueLocal.Label = "Market Value Local";
            marketValueLocal.Type = ColumnType.number;
            marketValueLocal.CheckDataMatch = true;
            marketValueLocal.FirstQueryColName = "market_value_local";
            marketValueLocal.SecondQueryColName = "marketvaluelocal";
            marketValueLocal.Tolerance = 0;

            edmDalPortDayPositionRecon.Columns.Add(productId);
            edmDalPortDayPositionRecon.Columns.Add(fundName);
            edmDalPortDayPositionRecon.Columns.Add(snapshotId);
            edmDalPortDayPositionRecon.Columns.Add(securityId);
            edmDalPortDayPositionRecon.Columns.Add(longShortIndicator);
            edmDalPortDayPositionRecon.Columns.Add(marketValueBase);
            edmDalPortDayPositionRecon.Columns.Add(marketValueLocal);

            edmDalPortDayPositionRecon.QueryVariables = new List<QueryVariable>
            {
                new QueryVariable { SubName = "ProductId", SubValue = "EEUB", QuerySpecific=false },
                new QueryVariable { SubName = "EdmDateWanted", SubValue = "01-jul-2014", QuerySpecific=false },
                new QueryVariable { SubName = "DalDateWanted", SubValue = "1140701",QuerySpecific=false }
            };
            sampleRecons.ReconReports.Add(edmDalPortDayPositionRecon);

            // This recon is an example of a recon with just one query, and any rows returned are assumed to
            // indicate an issue and will be reported
            ReconReport positionsMissingFkRecon = new ReconReport();
            positionsMissingFkRecon.Name = "Positions With Unknown Security or Product";
            positionsMissingFkRecon.TabLabel = "Pos Missing FK";
            positionsMissingFkRecon.FirstQueryName = "DalPositionsMissingFk";
            positionsMissingFkRecon.SecondQueryName = string.Empty;

            var dimTimeId = new QueryColumn();
            dimTimeId.Label = "Date";
            dimTimeId.Type = ColumnType.date;
            dimTimeId.FirstQueryColName = "dimtimeid";

            var missingEntity = new QueryColumn();
            missingEntity.Label = "Missing";
            missingEntity.Type = ColumnType.text;
            missingEntity.FirstQueryColName = "MissingEntity";

            var originalEntityId = new QueryColumn();
            originalEntityId.Label = "Entity Id(s)";
            originalEntityId.Type = ColumnType.text;
            originalEntityId.FirstQueryColName = "MissingEntityId";

            positionsMissingFkRecon.Columns.Add(dimTimeId);
            positionsMissingFkRecon.Columns.Add(missingEntity);
            positionsMissingFkRecon.Columns.Add(originalEntityId);

            sampleRecons.ReconReports.Add(positionsMissingFkRecon);
            */
        }
예제 #3
0
        private void populateSampleReconObjects()
        {
            // Create sample objects to use to populate sample RRSources and RRReports XML files
            // for user to use as basis for real recons.

            // Create RRSourcesSample.xml
            // Contains sample connection template, connection, and query objects in SampleRRSources

            // Sample Connection String Templates
            var teradataTemplate = new ConnectionStringTemplate();

            teradataTemplate.Name     = "Teradata";
            teradataTemplate.Template = "Provider=TDOLEDB;Data Source=|ServerName|;Persist Security Info=True;User ID=|User|;Password=|Password|;Session Mode=TERA;";
            var oracleTemplate = new ConnectionStringTemplate();

            oracleTemplate.Name     = "Oracle";
            oracleTemplate.Template = "Data Source=|TNSName|;User Id=|User|;Password=|Password|;Integrated Security=no;";
            var sampleTemplates = new ConnectionStringTemplates();

            sampleTemplates.TemplateList.Add(teradataTemplate);
            sampleTemplates.TemplateList.Add(oracleTemplate);

            // Sample Connection Strings
            var dalUatConnectionString = new RRConnectionString();

            dalUatConnectionString.Name              = "Teradata UAT";
            dalUatConnectionString.Template          = "Teradata";
            dalUatConnectionString.TemplateVariables = new List <Variable> {
                new Variable {
                    SubName = "ServerName", SubValue = "tddevbos"
                },
                new Variable {
                    SubName = "User", SubValue = "DAL_READ"
                },
                new Variable {
                    SubName = "Password", SubValue = "DAL_READ"
                }
            };

            var edmUatConnectionString = new RRConnectionString();

            edmUatConnectionString.Name              = "EDM UAT";
            edmUatConnectionString.Template          = "Oracle";
            edmUatConnectionString.TemplateVariables = new List <Variable> {
                new Variable {
                    SubName = "TNSName", SubValue = "EDM_T"
                },
                new Variable {
                    SubName = "User", SubValue = "edm_read"
                },
                new Variable {
                    SubName = "Password", SubValue = "edm_read"
                }
            };
            var sampleConnStrings = new RRConnectionStrings();

            sampleConnStrings.RRConnStringList.Add(dalUatConnectionString);
            sampleConnStrings.RRConnStringList.Add(edmUatConnectionString);

            // Sample Queries
            var edmQuery = new RRQuery();

            edmQuery.Name = "EdmProductDayPositions";
            edmQuery.RRConnectionString = "EDM UAT";
            edmQuery.SQL = @"select fm.snapshot_id, fm.entity_id, pd.market_value_base, pd.market_value_local from datamartdbo.fund_master fm join datamartdbo.position_details pd on fm.entity_id = '|ProductId|' and fm.effective_date = '|EdmDateWanted|' and fm.dmart_fund_id = pd.dmart_fund_id;";
            var teraQuery = new RRQuery();

            teraQuery.Name = "DalProductDayPositions";
            teraQuery.RRConnectionString = "Teradata UAT";
            teraQuery.SQL = @"select fp.snapshotid, dp.productid, dp.entitylongname, fp.marketvaluebase, fp.marketvaluelocal from dimproduct dp join factposition fp on dp.productid = '|ProductId|' and dp.dimproductid = fp.dimproductid and fp.dimtimeid = |TeraDateWanted|;";
            var posFkQuery = new RRQuery();

            posFkQuery.Name = "DalPositionsMissingFk";
            posFkQuery.RRConnectionString = "Teradata UAT";
            posFkQuery.SQL = @"select * from (select dimtimeid,  case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'BOTH' when dimsecurityid = 'UNKNOWN' then 'SECURITY' else 'PRODUCT' end MissingEntity, case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'Security ID: '' || OrigSecurityId || ''; Product ID: '' || OrigProductId || '''  when dimsecurityid = 'UNKNOWN' then OrigSecurityId else OrigProductId end OriginalEntityId from factposition where (dimsecurityid = 'UNKNOWN' or dimproductid = 'UNKNOWN') and dimtimeid >= 1131101) data group by MissingEntity, OriginalEntityId, DimTimeId order by MissingEntity, OriginalEntityId, DimTimeId;";
            var sampleQueries = new Queries();

            sampleQueries.QueryList.Add(edmQuery);
            sampleQueries.QueryList.Add(teraQuery);
            sampleQueries.QueryList.Add(posFkQuery);

            sampleRRSources = new RRSources();
            sampleRRSources.ConnStringTemplates = sampleTemplates;
            sampleRRSources.ConnectionStrings   = sampleConnStrings;
            sampleRRSources.Queries             = sampleQueries;

            // Create RRReportsSample.xml
            // Holds sample recon report definitions along with substitution values to use
            // in sample queries.
            // first recon report and write to file to create file to use as basis to create
            // full XML file specifying all the recon reports to run.

            /* ****** RESUME TOMORROW: Add collection of VARIABLE values for queries.
             *        Adapt sample recon report to use new RRSources definitions as above
             *        Test creation of sample XML files. */

            // First recon is an example of comparing two data sets from different databases
            ReconReport edmDalPortDayPositionRecon = new ReconReport();

            edmDalPortDayPositionRecon.Name        = "EDM to DAL Product's Positions for Day";
            edmDalPortDayPositionRecon.TabLabel    = "EDM DAL Pros Pos";
            edmDalPortDayPositionRecon.FirstQuery  = "EdmProductDayPositions";
            edmDalPortDayPositionRecon.SecondQuery = "DalProductDayPositions";

            QueryColumn productId = new QueryColumn();

            productId.Label             = "Product ID";
            productId.Type              = ColumnType.text;
            productId.IdentifyingColumn = true;
            productId.AlwaysDisplay     = true;
            productId.FirstQueryName    = "entity_id";
            productId.SecondQueryName   = "productid";

            QueryColumn fundName = new QueryColumn();

            fundName.Label           = "Product Name";
            fundName.Type            = ColumnType.text;
            fundName.AlwaysDisplay   = true;
            fundName.FirstQueryName  = "EntityLongName";
            fundName.SecondQueryName = null;

            QueryColumn snapshotId = new QueryColumn();

            snapshotId.Label             = "Snapshot";
            snapshotId.Type              = ColumnType.text;
            snapshotId.AlwaysDisplay     = true;
            snapshotId.IdentifyingColumn = true;
            snapshotId.FirstQueryName    = "snapshot_id";
            snapshotId.SecondQueryName   = "snapshotid";

            QueryColumn marketValueBase = new QueryColumn();

            marketValueBase.Label           = "Market Value Base";
            marketValueBase.Type            = ColumnType.number;
            marketValueBase.ShouldMatch     = true;
            marketValueBase.FirstQueryName  = "market_value_base";
            marketValueBase.SecondQueryName = "marketvaluebase";

            QueryColumn marketValueLocal = new QueryColumn();

            marketValueLocal.Label           = "Market Value Local";
            marketValueLocal.Type            = ColumnType.number;
            marketValueLocal.ShouldMatch     = true;
            marketValueLocal.FirstQueryName  = "market_value_local";
            marketValueLocal.SecondQueryName = "marketvaluelocal";

            edmDalPortDayPositionRecon.Columns.Add(productId);
            edmDalPortDayPositionRecon.Columns.Add(fundName);
            edmDalPortDayPositionRecon.Columns.Add(snapshotId);
            edmDalPortDayPositionRecon.Columns.Add(marketValueBase);
            edmDalPortDayPositionRecon.Columns.Add(marketValueLocal);

            edmDalPortDayPositionRecon.QueryVariables = new List <Variable> {
                new Variable {
                    SubName = "ProductId", SubValue = "EEUB"
                },
                new Variable {
                    SubName = "EdmDateWanted", SubValue = "01-jul-2014"
                },
                new Variable {
                    SubName = "DalDateWanted", SubValue = "1140701"
                }
            };
            sampleRecons.ReconList.Add(edmDalPortDayPositionRecon);

            // This second recon is an example of a recon with just one query, and any rows returned are assumed to
            // indicate an issue and will be reported
            ReconReport positionsMissingFkRecon = new ReconReport();

            positionsMissingFkRecon.Name        = "Positions With Unknown Security or Product";
            positionsMissingFkRecon.TabLabel    = "Pos Missing FK";
            positionsMissingFkRecon.FirstQuery  = "DalPositionsMissingFk";
            positionsMissingFkRecon.SecondQuery = string.Empty;

            var dimTimeId = new QueryColumn();

            dimTimeId.Label          = "Date";
            dimTimeId.Type           = ColumnType.date;
            dimTimeId.AlwaysDisplay  = true;
            dimTimeId.FirstQueryName = "dimtimeid";

            var date = new QueryColumn();

            date.Label          = "Date";
            date.Type           = ColumnType.date;
            date.AlwaysDisplay  = true;
            date.FirstQueryName = "DimTimeId";

            var missingEntity = new QueryColumn();

            missingEntity.Label          = "Missing";
            missingEntity.Type           = ColumnType.text;
            missingEntity.AlwaysDisplay  = true;
            missingEntity.FirstQueryName = "MissingEntity";

            var originalEntityId = new QueryColumn();

            originalEntityId.Label          = "Entity Id";
            originalEntityId.Type           = ColumnType.text;
            originalEntityId.AlwaysDisplay  = true;
            originalEntityId.FirstQueryName = "OriginalEntityId";

            positionsMissingFkRecon.Columns.Add(dimTimeId);
            positionsMissingFkRecon.Columns.Add(missingEntity);
            positionsMissingFkRecon.Columns.Add(originalEntityId);

            // Don't add single query recon to sample file until supporting logic in controller added
            //sampleRecons.ReconList.Add(positionsMissingFkRecon);
        }
예제 #4
0
        private void populateSampleReconObjects()
        {
            sampleSources = new Sources();
            sampleRecons  = new Recons();
            // Create sample objects to use to populate sample Sources and RRReports XML files
            // for user to use as basis for real recons.

            // Create RRSourcesSample.xml
            // Contains sample connection template, connection, and query objects in SampleRRSources
            // Sample Connection String Templates
            var sqlServerTemplate = new ConnectionStringTemplate();

            sqlServerTemplate.Name     = "SQL Server";
            sqlServerTemplate.Template = "Provider=SQLNCLI11;Server=|ServerName|;Database=|DatabaseName|;Trusted_Connection=yes";
            var teradataTemplate = new ConnectionStringTemplate();

            teradataTemplate.Name     = "Teradata";
            teradataTemplate.Template = "Data Source=|ServerName|;User ID=|User|;Password=|Password|;Session Mode=TERADATA;";
            var oracleTemplate = new ConnectionStringTemplate();

            oracleTemplate.Name     = "Oracle";
            oracleTemplate.Template = "Provider=MSDAORA.1;Data Source=|TNSName|;User Id=|User|;Password=|Password|;Persist Security Info=false;";
            sampleSources.ConnStringTemplates.Add(sqlServerTemplate);
            sampleSources.ConnStringTemplates.Add(teradataTemplate);
            sampleSources.ConnStringTemplates.Add(oracleTemplate);

            // Sample Connection Strings
            var warehouseConnectionString = new RRConnectionString();

            warehouseConnectionString.Name              = "DataWarehouse Dev";
            warehouseConnectionString.TemplateName      = "SQL Server";
            warehouseConnectionString.DatabaseType      = DatabaseType.SQLServer;
            warehouseConnectionString.TemplateVariables = new List <Variable>
            {
                new Variable {
                    SubName = "ServerName", SubValue = "bos-dbdevwh02"
                },
                new Variable {
                    SubName = "DatabaseName", SubValue = "DataWarehouse"
                }
            };
            var dalUatConnectionString = new RRConnectionString();

            dalUatConnectionString.Name              = "Teradata UAT";
            dalUatConnectionString.TemplateName      = "Teradata";
            dalUatConnectionString.DatabaseType      = DatabaseType.Teradata;
            dalUatConnectionString.TemplateVariables = new List <Variable>
            {
                new Variable {
                    SubName = "ServerName", SubValue = "tddevbos"
                },
                new Variable {
                    SubName = "User", SubValue = "DAL_READ"
                },
                new Variable {
                    SubName = "Password", SubValue = "DAL_READ"
                }
            };

            var edmUatConnectionString = new RRConnectionString();

            edmUatConnectionString.Name              = "EDM UAT";
            edmUatConnectionString.TemplateName      = "Oracle";
            edmUatConnectionString.DatabaseType      = DatabaseType.Oracle;
            edmUatConnectionString.TemplateVariables = new List <Variable>
            {
                new Variable {
                    SubName = "TNSName", SubValue = "EDM_T"
                },
                new Variable {
                    SubName = "User", SubValue = "edm_read"
                },
                new Variable {
                    SubName = "Password", SubValue = "edm_read"
                }
            };
            sampleSources.ConnectionStrings.Add(dalUatConnectionString);
            sampleSources.ConnectionStrings.Add(edmUatConnectionString);
            sampleSources.ConnectionStrings.Add(warehouseConnectionString);

            // Sample Queries
            var doc = new XmlDocument();
            var portGicsSectorDetail = new RRQuery();

            portGicsSectorDetail.Name           = "PortGicsSectorDetails";
            portGicsSectorDetail.ConnStringName = "DataWarehouse Dev";
            portGicsSectorDetail.SQL            = doc.CreateCDataSection(@"with latestAttrInsEffDate as 
                                                            (
	                                                            select
		                                                            atins_id,
		                                                            max(effect_date) LatestRowDate
	                                                            from warehouse.attr_instrument
	                                                            where effect_date <= '|DateWanted|'
	                                                            group by atins_id
                                                            ),
                                                            latestAttrIns as
                                                            (
	                                                            select
		                                                            laied.atins_id,
		                                                            laied.LatestRowDate,
		                                                            max(ai.atins_release_number) LatestReleaseNumber
	                                                            from latestAttrInsEffDate laied
	                                                            join warehouse.attr_instrument ai
	                                                            on laied.atins_id = ai.atins_id
	                                                            and laied.LatestRowDate = ai.effect_date
	                                                            group by laied.atins_id, laied.LatestRowDate)
                                                            select 
	                                                            bigs.atptf_id,
	                                                            p.portf_name,
	                                                            bigs.calcul_date,
	                                                            bigs.atins_id,
	                                                            ai.atins_name,
	                                                            ai.effect_date,
	                                                            ai.end_valid_date,
                                                                ai.atins_release_number
                                                            from warehouse.bisamattributions_gics_sec bigs
                                                            join warehouse.portfolio p
                                                            on  bigs.atptf_id = |PortId| 
                                                            and bigs.atins_id <> 0
                                                            and bigs.calcul_date = '|DateWanted|'
                                                            and bigs.dateinactive = '31-dec-9999'
                                                            and bigs.atptf_id = p.portf_id
                                                            join latestAttrIns lai
                                                            on bigs.atins_id = lai.atins_id
															and bigs.atins_release_number = lai.LatestReleaseNumber
                                                            join warehouse.attr_instrument ai
                                                            on lai.atins_id = ai.atins_id
                                                            and lai.LatestRowDate = ai.effect_date
                                                            and lai.LatestReleaseNumber = ai.ATINS_RELEASE_NUMBER
                                                            order by atins_name");
            var portAttribGroupcheck = new RRQuery();

            portAttribGroupcheck.Name           = "PortAttribGroupCheck";
            portAttribGroupcheck.ConnStringName = "DataWarehouse Dev";
            portAttribGroupcheck.SQL            = doc.CreateCDataSection(@"with portAttributionsRuns as (
	                                                        select
		                                                        max(checksum(atptf_id, atins_id, atins_release_number, calcul_date, frequency_id, begin_date, portf_config_id)) portAttribRunKey,
		                                                        atptf_id,
		                                                        atins_id,
		                                                        atins_release_number,
		                                                        calcul_date, 
		                                                        frequency_id, 
		                                                        begin_date,
		                                                        portf_config_id,
		                                                        user_defined_group_id
	                                                        from warehouse.bisamAttributions_|SegmentTableName| bigs
	                                                        where atptf_id = |PortId| and atins_id <> 0 and dateinactive = '31-dec-9999'
	                                                        group by atptf_id, atins_id, atins_release_number, calcul_date, frequency_id, begin_date, portf_config_id, user_defined_group_id),
                                                        portMultiGroupCount as (
	                                                        select
		                                                        portAttribRunkey,
		                                                        atptf_id,
		                                                        atins_id,
		                                                        atins_release_number,
		                                                        calcul_date,
		                                                        frequency_id,
		                                                        begin_date,
		                                                        portf_config_id
	                                                        from portAttributionsRuns
	                                                        group by portAttribRunKey, atptf_id, atins_id, atins_release_number, calcul_date, frequency_id, begin_date, portf_config_id
	                                                        having count(*) > 1
                                                        )
                                                        select par.*, p.portf_name
                                                        from portAttributionsRuns par
                                                        join portMultiGroupCount pmgc
                                                        on par.portAttribRunKey = pmgc.portAttribRunKey
                                                        join warehouse.portfolio p
                                                        on par.atptf_id = p.portf_id
                                                        order by par.atins_id, par.atins_release_number, par.calcul_date, par.FREQUENCY_ID, par.begin_date, user_defined_group_id");
            var edmQuery = new RRQuery();

            edmQuery.Name           = "EdmProductDayPositions";
            edmQuery.ConnStringName = "EDM UAT";
            edmQuery.SQL            = doc.CreateCDataSection("select fm.snapshot_id, trim(fm.entity_id) entity_id, pd.security_alias, trim(pd.long_short_indicator) long_short_indicator, pd.market_value_base, pd.market_value_local from datamartdbo.fund_master fm join datamartdbo.position_details pd on fm.entity_id = '|ProductId|' and fm.effective_date = '|EdmDateWanted|' and fm.dmart_fund_id = pd.dmart_fund_id");
            var teraQuery = new RRQuery();

            teraQuery.Name           = "DalProductDayPositions";
            teraQuery.ConnStringName = "Teradata UAT";
            teraQuery.SQL            = doc.CreateCDataSection("select fp.snapshotid, dp.productid, dp.entitylongname, fp.OrigSecurityId, fp.LongShortIndicator, fp.marketvaluebase, fp.marketvaluelocal from dimproduct dp join factposition fp on dp.productid = '|ProductId|' and dp.dimproductid = fp.dimproductid and fp.dimtimeid = |DalDateWanted|");
            var posFkQuery = new RRQuery();

            posFkQuery.Name           = "DalPositionsMissingFk";
            posFkQuery.ConnStringName = "Teradata UAT";
            posFkQuery.SQL            = doc.CreateCDataSection("select * from (select dimtimeid,  case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'BOTH' when dimsecurityid = 'UNKNOWN' then 'SECURITY' else 'PRODUCT' end MissingEntity, case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'Security ID: ' || OrigSecurityId || '; Product ID: ' || OrigProductId when dimsecurityid = 'UNKNOWN' then OrigSecurityId else OrigProductId end MissingEntityId from factposition where (dimsecurityid = 'UNKNOWN' or dimproductid = 'UNKNOWN') and dimtimeid >= 1131101) data group by MissingEntity, MissingEntityId, DimTimeId order by MissingEntity, MissingEntityId, DimTimeId");
            sampleSources.Queries.Add(portGicsSectorDetail);
            sampleSources.Queries.Add(portAttribGroupcheck);
            sampleSources.Queries.Add(edmQuery);
            sampleSources.Queries.Add(teraQuery);
            sampleSources.Queries.Add(posFkQuery);

            // Create RRReportsSample.xml
            // Holds sample recon report definitions along with substitution values to use
            // in sample queries.
            // first recon report and write to file to create file to use as basis to create
            // full XML file specifying all the recon reports to run.

            // First two recons are examples of comparing two data sets
            // Acadian-specific example (Note: the actual example is not necessarily useful,
            // it's just being done to show how the process works)
            // This recon uses the same query twice, so the query variables are query specific
            ReconReport warehousePortGicsRecon = new ReconReport();

            warehousePortGicsRecon.Name            = "Compare GICS Sec Details for 2 days for 1 portfolio";
            warehousePortGicsRecon.TabLabel        = "GICS Sec Changes";
            warehousePortGicsRecon.FirstQueryName  = "PortGicsSectorDetails";
            warehousePortGicsRecon.SecondQueryName = "PortGicsSectorDetails";

            QueryColumn portfolioId = new QueryColumn();

            portfolioId.Label              = "Portfolio ID";
            portfolioId.Type               = ColumnType.number;
            portfolioId.IdentifyingColumn  = true;
            portfolioId.AlwaysDisplay      = true;
            portfolioId.FirstQueryColName  = "atptf_id";
            portfolioId.SecondQueryColName = "atptf_id";

            QueryColumn portfolioName = new QueryColumn();

            portfolioName.Label              = "Portfolio Name";
            portfolioName.Type               = ColumnType.text;
            portfolioName.IdentifyingColumn  = false;
            portfolioName.AlwaysDisplay      = true;
            portfolioName.FirstQueryColName  = "portf_name";
            portfolioName.SecondQueryColName = "portf_name";

            QueryColumn calcDate = new QueryColumn();

            calcDate.Label              = "Calcul Date";
            calcDate.Type               = ColumnType.date;
            calcDate.IdentifyingColumn  = false;
            calcDate.AlwaysDisplay      = true;
            calcDate.FirstQueryColName  = "calcul_date";
            calcDate.SecondQueryColName = "calcul_date";

            QueryColumn instrumentId = new QueryColumn();

            instrumentId.Label              = "Instrument Id";
            instrumentId.Type               = ColumnType.number;
            instrumentId.IdentifyingColumn  = true;
            instrumentId.AlwaysDisplay      = true;
            instrumentId.FirstQueryColName  = "atins_id";
            instrumentId.SecondQueryColName = "atins_id";

            QueryColumn instrumentName = new QueryColumn();

            instrumentName.Label              = "Instrument Name";
            instrumentName.Type               = ColumnType.text;
            instrumentName.IdentifyingColumn  = false;
            instrumentName.AlwaysDisplay      = true;
            instrumentName.FirstQueryColName  = "atins_name";
            instrumentName.SecondQueryColName = "atins_name";

            QueryColumn instrumentReleaseNum = new QueryColumn();

            instrumentReleaseNum.Label              = "Release #";
            instrumentReleaseNum.Type               = ColumnType.number;
            instrumentReleaseNum.IdentifyingColumn  = false;
            instrumentReleaseNum.AlwaysDisplay      = false;
            instrumentReleaseNum.CheckDataMatch     = true;
            instrumentReleaseNum.Tolerance          = 1;
            instrumentReleaseNum.FirstQueryColName  = "atins_release_number";
            instrumentReleaseNum.SecondQueryColName = "atins_release_number";

            warehousePortGicsRecon.Columns.Add(portfolioId);
            warehousePortGicsRecon.Columns.Add(portfolioName);
            warehousePortGicsRecon.Columns.Add(calcDate);
            warehousePortGicsRecon.Columns.Add(instrumentId);
            warehousePortGicsRecon.Columns.Add(instrumentName);
            warehousePortGicsRecon.Columns.Add(instrumentReleaseNum);

            warehousePortGicsRecon.QueryVariables = new List <QueryVariable>
            {
                new QueryVariable {
                    SubName = "PortId", SubValue = "1003022", QuerySpecific = false
                },
                new QueryVariable {
                    SubName = "DateWanted", SubValue = "30-jul-2015", QuerySpecific = true, QueryNumber = 1
                },
                new QueryVariable {
                    SubName = "DateWanted", SubValue = "31-jul-2015", QuerySpecific = true, QueryNumber = 2
                }
            };

            ReconReport instMultGroupsRecon = new ReconReport();

            instMultGroupsRecon.Name            = "Instruments with Multiple Attribution Groups for Similar Runs";
            instMultGroupsRecon.TabLabel        = "Multi-group Inst";
            instMultGroupsRecon.FirstQueryName  = "PortAttribGroupCheck";
            instMultGroupsRecon.SecondQueryName = string.Empty;

            portfolioId                   = new QueryColumn();
            portfolioId.Label             = "Portfolio ID";
            portfolioId.Type              = ColumnType.number;
            portfolioId.AlwaysDisplay     = true;
            portfolioId.FirstQueryColName = "atptf_id";

            portfolioName                   = new QueryColumn();
            portfolioName.Label             = "Portfolio Name";
            portfolioName.Type              = ColumnType.text;
            portfolioName.AlwaysDisplay     = true;
            portfolioName.FirstQueryColName = "portf_name";

            instrumentId                   = new QueryColumn();
            instrumentId.Label             = "Instrument Id";
            instrumentId.Type              = ColumnType.number;
            instrumentId.AlwaysDisplay     = true;
            instrumentId.FirstQueryColName = "atins_id";

            instrumentReleaseNum                   = new QueryColumn();
            instrumentReleaseNum.Label             = "Release #";
            instrumentReleaseNum.Type              = ColumnType.number;
            instrumentReleaseNum.AlwaysDisplay     = true;
            instrumentReleaseNum.FirstQueryColName = "atins_release_number";

            calcDate                   = new QueryColumn();
            calcDate.Label             = "Calcul Date";
            calcDate.Type              = ColumnType.date;
            calcDate.AlwaysDisplay     = true;
            calcDate.FirstQueryColName = "calcul_date";

            var frequencyId = new QueryColumn();

            frequencyId.Label             = "Freq";
            frequencyId.Type              = ColumnType.number;
            frequencyId.AlwaysDisplay     = true;
            frequencyId.FirstQueryColName = "frequency_id";

            var beginDate = new QueryColumn();

            beginDate.Label             = "Begin Date";
            beginDate.Type              = ColumnType.date;
            beginDate.AlwaysDisplay     = true;
            beginDate.FirstQueryColName = "begin_date";

            var portfConfigId = new QueryColumn();

            portfConfigId.Label             = "Config Id";
            portfConfigId.Type              = ColumnType.number;
            portfConfigId.AlwaysDisplay     = true;
            portfConfigId.FirstQueryColName = "portf_config_id";

            var udGroupId = new QueryColumn();

            udGroupId.Label             = "Group Id";
            udGroupId.Type              = ColumnType.number;
            udGroupId.AlwaysDisplay     = true;
            udGroupId.FirstQueryColName = "user_defined_group_id";

            instMultGroupsRecon.Columns.Add(portfolioId);
            instMultGroupsRecon.Columns.Add(portfolioName);
            instMultGroupsRecon.Columns.Add(instrumentId);
            instMultGroupsRecon.Columns.Add(instrumentReleaseNum);
            instMultGroupsRecon.Columns.Add(calcDate);
            instMultGroupsRecon.Columns.Add(frequencyId);
            instMultGroupsRecon.Columns.Add(beginDate);
            instMultGroupsRecon.Columns.Add(portfConfigId);
            instMultGroupsRecon.Columns.Add(udGroupId);

            instMultGroupsRecon.QueryVariables = new List <QueryVariable>
            {
                new QueryVariable {
                    SubName = "PortId", SubValue = "1003022"
                },
                new QueryVariable {
                    SubName = "SegmentTableName", SubValue = "GICS_Sec"
                }
            };

            sampleRecons.ReconReports.Add(warehousePortGicsRecon);
            sampleRecons.ReconReports.Add(instMultGroupsRecon);

            /*
             * // Note that queries running on two separate platforms may still be compared
             * ReconReport edmDalPortDayPositionRecon = new ReconReport();
             * edmDalPortDayPositionRecon.Name = "EDM to DAL Product's Positions for Day";
             * edmDalPortDayPositionRecon.TabLabel = "EDM DAL Prod Pos";
             * edmDalPortDayPositionRecon.FirstQueryName = "EdmProductDayPositions";
             * edmDalPortDayPositionRecon.SecondQueryName = "DalProductDayPositions";
             *
             * QueryColumn productId = new QueryColumn();
             * productId.Label = "Product ID";
             * productId.Type = ColumnType.text;
             * productId.IdentifyingColumn = true;
             * productId.AlwaysDisplay = true;
             * productId.FirstQueryColName = "entity_id";
             * productId.SecondQueryColName = "productid";
             *
             * QueryColumn fundName = new QueryColumn();
             * fundName.Label = "Product Name";
             * fundName.Type = ColumnType.text;
             * fundName.AlwaysDisplay = true;
             * fundName.FirstQueryColName = null;
             * fundName.SecondQueryColName = "EntityLongName";
             *
             * QueryColumn snapshotId = new QueryColumn();
             * snapshotId.Label = "Snapshot";
             * snapshotId.Type = ColumnType.text;
             * snapshotId.AlwaysDisplay = true;
             * snapshotId.IdentifyingColumn = true;
             * snapshotId.FirstQueryColName = "snapshot_id";
             * snapshotId.SecondQueryColName = "snapshotid";
             *
             * QueryColumn securityId = new QueryColumn();
             * securityId.Label = "Security ID";
             * securityId.Type = ColumnType.number;
             * securityId.IdentifyingColumn = true;
             * securityId.AlwaysDisplay = true;
             * securityId.FirstQueryColName = "security_alias";
             * securityId.SecondQueryColName = "OrigSecurityId";
             *
             * QueryColumn longShortIndicator = new QueryColumn();
             * longShortIndicator.Label = "Long-Short Indicator";
             * longShortIndicator.Type = ColumnType.text;
             * longShortIndicator.AlwaysDisplay = true;
             * longShortIndicator.IdentifyingColumn = true;
             * longShortIndicator.FirstQueryColName = "long_short_indicator";
             * longShortIndicator.SecondQueryColName = "LongShortIndicator";
             *
             * QueryColumn marketValueBase = new QueryColumn();
             * marketValueBase.Label = "Market Value Base";
             * marketValueBase.Type = ColumnType.number;
             * marketValueBase.CheckDataMatch = true;
             * marketValueBase.FirstQueryColName = "market_value_base";
             * marketValueBase.SecondQueryColName = "marketvaluebase";
             * marketValueBase.Tolerance = 0;
             *
             * QueryColumn marketValueLocal = new QueryColumn();
             * marketValueLocal.Label = "Market Value Local";
             * marketValueLocal.Type = ColumnType.number;
             * marketValueLocal.CheckDataMatch = true;
             * marketValueLocal.FirstQueryColName = "market_value_local";
             * marketValueLocal.SecondQueryColName = "marketvaluelocal";
             * marketValueLocal.Tolerance = 0;
             *
             * edmDalPortDayPositionRecon.Columns.Add(productId);
             * edmDalPortDayPositionRecon.Columns.Add(fundName);
             * edmDalPortDayPositionRecon.Columns.Add(snapshotId);
             * edmDalPortDayPositionRecon.Columns.Add(securityId);
             * edmDalPortDayPositionRecon.Columns.Add(longShortIndicator);
             * edmDalPortDayPositionRecon.Columns.Add(marketValueBase);
             * edmDalPortDayPositionRecon.Columns.Add(marketValueLocal);
             *
             * edmDalPortDayPositionRecon.QueryVariables = new List<QueryVariable>
             * {
             *  new QueryVariable { SubName = "ProductId", SubValue = "EEUB", QuerySpecific=false },
             *  new QueryVariable { SubName = "EdmDateWanted", SubValue = "01-jul-2014", QuerySpecific=false },
             *  new QueryVariable { SubName = "DalDateWanted", SubValue = "1140701",QuerySpecific=false }
             * };
             * sampleRecons.ReconReports.Add(edmDalPortDayPositionRecon);
             *
             * // This recon is an example of a recon with just one query, and any rows returned are assumed to
             * // indicate an issue and will be reported
             * ReconReport positionsMissingFkRecon = new ReconReport();
             * positionsMissingFkRecon.Name = "Positions With Unknown Security or Product";
             * positionsMissingFkRecon.TabLabel = "Pos Missing FK";
             * positionsMissingFkRecon.FirstQueryName = "DalPositionsMissingFk";
             * positionsMissingFkRecon.SecondQueryName = string.Empty;
             *
             * var dimTimeId = new QueryColumn();
             * dimTimeId.Label = "Date";
             * dimTimeId.Type = ColumnType.date;
             * dimTimeId.FirstQueryColName = "dimtimeid";
             *
             * var missingEntity = new QueryColumn();
             * missingEntity.Label = "Missing";
             * missingEntity.Type = ColumnType.text;
             * missingEntity.FirstQueryColName = "MissingEntity";
             *
             * var originalEntityId = new QueryColumn();
             * originalEntityId.Label = "Entity Id(s)";
             * originalEntityId.Type = ColumnType.text;
             * originalEntityId.FirstQueryColName = "MissingEntityId";
             *
             * positionsMissingFkRecon.Columns.Add(dimTimeId);
             * positionsMissingFkRecon.Columns.Add(missingEntity);
             * positionsMissingFkRecon.Columns.Add(originalEntityId);
             *
             * sampleRecons.ReconReports.Add(positionsMissingFkRecon);
             */
        }
예제 #5
0
        private void populateSampleReconObjects()
        {
            // Create sample objects to use to populate sample RRSources and RRReports XML files
            // for user to use as basis for real recons.

            // Create RRSourcesSample.xml
            // Contains sample connection template, connection, and query objects in SampleRRSources

            // Sample Connection String Templates
            var teradataTemplate = new ConnectionStringTemplate();
            teradataTemplate.Name = "Teradata";
            teradataTemplate.Template = "Provider=TDOLEDB;Data Source=|ServerName|;Persist Security Info=True;User ID=|User|;Password=|Password|;Session Mode=TERA;";
            var oracleTemplate = new ConnectionStringTemplate();
            oracleTemplate.Name = "Oracle";
            oracleTemplate.Template = "Data Source=|TNSName|;User Id=|User|;Password=|Password|;Integrated Security=no;";
            var sampleTemplates = new ConnectionStringTemplates();
            sampleTemplates.TemplateList.Add(teradataTemplate);
            sampleTemplates.TemplateList.Add(oracleTemplate);

            // Sample Connection Strings
            var dalUatConnectionString = new RRConnectionString();
            dalUatConnectionString.Name = "Teradata UAT";
            dalUatConnectionString.Template = "Teradata";
            dalUatConnectionString.TemplateVariables = new List<Variable>{
                                                                                    new Variable {SubName="ServerName", SubValue="tddevbos"},
                                                                                    new Variable {SubName="User", SubValue="DAL_READ"},
                                                                                    new Variable {SubName="Password", SubValue="DAL_READ"}
                                                                              };

            var edmUatConnectionString = new RRConnectionString();
            edmUatConnectionString.Name = "EDM UAT";
            edmUatConnectionString.Template = "Oracle";
            edmUatConnectionString.TemplateVariables = new List<Variable>{
                                                                            new Variable {SubName="TNSName", SubValue="EDM_T"},
                                                                            new Variable {SubName="User", SubValue="edm_read"},
                                                                            new Variable {SubName="Password", SubValue="edm_read"}
                                                                         };
            var sampleConnStrings = new RRConnectionStrings();
            sampleConnStrings.RRConnStringList.Add(dalUatConnectionString);
            sampleConnStrings.RRConnStringList.Add(edmUatConnectionString);

            // Sample Queries
            var edmQuery = new RRQuery();
            edmQuery.Name = "EdmProductDayPositions";
            edmQuery.RRConnectionString = "EDM UAT";
            edmQuery.SQL = @"select fm.snapshot_id, fm.entity_id, pd.market_value_base, pd.market_value_local from datamartdbo.fund_master fm join datamartdbo.position_details pd on fm.entity_id = '|ProductId|' and fm.effective_date = '|EdmDateWanted|' and fm.dmart_fund_id = pd.dmart_fund_id;";
            var teraQuery = new RRQuery();
            teraQuery.Name = "DalProductDayPositions";
            teraQuery.RRConnectionString = "Teradata UAT";
            teraQuery.SQL = @"select fp.snapshotid, dp.productid, dp.entitylongname, fp.marketvaluebase, fp.marketvaluelocal from dimproduct dp join factposition fp on dp.productid = '|ProductId|' and dp.dimproductid = fp.dimproductid and fp.dimtimeid = |TeraDateWanted|;";
            var posFkQuery = new RRQuery();
            posFkQuery.Name = "DalPositionsMissingFk";
            posFkQuery.RRConnectionString = "Teradata UAT";
            posFkQuery.SQL = @"select * from (select dimtimeid,  case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'BOTH' when dimsecurityid = 'UNKNOWN' then 'SECURITY' else 'PRODUCT' end MissingEntity, case when dimsecurityid = 'UNKNOWN' and dimproductid = 'UNKNOWN' then 'Security ID: '' || OrigSecurityId || ''; Product ID: '' || OrigProductId || '''  when dimsecurityid = 'UNKNOWN' then OrigSecurityId else OrigProductId end OriginalEntityId from factposition where (dimsecurityid = 'UNKNOWN' or dimproductid = 'UNKNOWN') and dimtimeid >= 1131101) data group by MissingEntity, OriginalEntityId, DimTimeId order by MissingEntity, OriginalEntityId, DimTimeId;";
            var sampleQueries = new Queries();
            sampleQueries.QueryList.Add(edmQuery);
            sampleQueries.QueryList.Add(teraQuery);
            sampleQueries.QueryList.Add(posFkQuery);

            sampleRRSources = new RRSources();
            sampleRRSources.ConnStringTemplates = sampleTemplates;
            sampleRRSources.ConnectionStrings = sampleConnStrings;
            sampleRRSources.Queries = sampleQueries;

            // Create RRReportsSample.xml
            // Holds sample recon report definitions along with substitution values to use
            // in sample queries.
            // first recon report and write to file to create file to use as basis to create
            // full XML file specifying all the recon reports to run.

            /* ****** RESUME TOMORROW: Add collection of VARIABLE values for queries.
             *        Adapt sample recon report to use new RRSources definitions as above
             *        Test creation of sample XML files. */

            // First recon is an example of comparing two data sets from different databases
            ReconReport edmDalPortDayPositionRecon = new ReconReport();
            edmDalPortDayPositionRecon.Name = "EDM to DAL Product's Positions for Day";
            edmDalPortDayPositionRecon.TabLabel = "EDM DAL Pros Pos";
            edmDalPortDayPositionRecon.FirstQuery = "EdmProductDayPositions";
            edmDalPortDayPositionRecon.SecondQuery = "DalProductDayPositions";

            QueryColumn productId = new QueryColumn();
            productId.Label = "Product ID";
            productId.Type = ColumnType.text;
            productId.IdentifyingColumn = true;
            productId.AlwaysDisplay = true;
            productId.FirstQueryName = "entity_id";
            productId.SecondQueryName = "productid";

            QueryColumn fundName = new QueryColumn();
            fundName.Label = "Product Name";
            fundName.Type = ColumnType.text;
            fundName.AlwaysDisplay = true;
            fundName.FirstQueryName = "EntityLongName";
            fundName.SecondQueryName = null;

            QueryColumn snapshotId = new QueryColumn();
            snapshotId.Label = "Snapshot";
            snapshotId.Type = ColumnType.text;
            snapshotId.AlwaysDisplay = true;
            snapshotId.IdentifyingColumn = true;
            snapshotId.FirstQueryName = "snapshot_id";
            snapshotId.SecondQueryName = "snapshotid";

            QueryColumn marketValueBase = new QueryColumn();
            marketValueBase.Label = "Market Value Base";
            marketValueBase.Type = ColumnType.number;
            marketValueBase.ShouldMatch = true;
            marketValueBase.FirstQueryName = "market_value_base";
            marketValueBase.SecondQueryName = "marketvaluebase";

            QueryColumn marketValueLocal = new QueryColumn();
            marketValueLocal.Label = "Market Value Local";
            marketValueLocal.Type = ColumnType.number;
            marketValueLocal.ShouldMatch = true;
            marketValueLocal.FirstQueryName = "market_value_local";
            marketValueLocal.SecondQueryName = "marketvaluelocal";

            edmDalPortDayPositionRecon.Columns.Add(productId);
            edmDalPortDayPositionRecon.Columns.Add(fundName);
            edmDalPortDayPositionRecon.Columns.Add(snapshotId);
            edmDalPortDayPositionRecon.Columns.Add(marketValueBase);
            edmDalPortDayPositionRecon.Columns.Add(marketValueLocal);

            edmDalPortDayPositionRecon.QueryVariables = new List<Variable> {
                                                                                new Variable { SubName = "ProductId", SubValue = "EEUB" },
                                                                                new Variable { SubName = "EdmDateWanted", SubValue = "01-jul-2014" },
                                                                                new Variable { SubName = "DalDateWanted", SubValue = "1140701" }                                                                          };
            sampleRecons.ReconList.Add(edmDalPortDayPositionRecon);

            // This second recon is an example of a recon with just one query, and any rows returned are assumed to
            // indicate an issue and will be reported
            ReconReport positionsMissingFkRecon = new ReconReport();
            positionsMissingFkRecon.Name = "Positions With Unknown Security or Product";
            positionsMissingFkRecon.TabLabel = "Pos Missing FK";
            positionsMissingFkRecon.FirstQuery = "DalPositionsMissingFk";
            positionsMissingFkRecon.SecondQuery = string.Empty;

            var dimTimeId = new QueryColumn();
            dimTimeId.Label = "Date";
            dimTimeId.Type = ColumnType.date;
            dimTimeId.AlwaysDisplay = true;
            dimTimeId.FirstQueryName = "dimtimeid";

            var date = new QueryColumn();
            date.Label = "Date";
            date.Type = ColumnType.date;
            date.AlwaysDisplay = true;
            date.FirstQueryName = "DimTimeId";

            var missingEntity = new QueryColumn();
            missingEntity.Label = "Missing";
            missingEntity.Type = ColumnType.text;
            missingEntity.AlwaysDisplay = true;
            missingEntity.FirstQueryName = "MissingEntity";

            var originalEntityId = new QueryColumn();
            originalEntityId.Label = "Entity Id";
            originalEntityId.Type = ColumnType.text;
            originalEntityId.AlwaysDisplay = true;
            originalEntityId.FirstQueryName = "OriginalEntityId";

            positionsMissingFkRecon.Columns.Add(dimTimeId);
            positionsMissingFkRecon.Columns.Add(missingEntity);
            positionsMissingFkRecon.Columns.Add(originalEntityId);

            // Don't add single query recon to sample file until supporting logic in controller added
            //sampleRecons.ReconList.Add(positionsMissingFkRecon);
        }
예제 #6
0
        /// <summary>
        /// Get the datatable for the provided query and substitution variables.  Note that OpenConnections()
        /// should have been run before this is run.
        /// </summary>
        /// <param name="query">The RRQuery object to be executed</param>
        /// <param name="queryVariables">Substitution variables to be used to create the final SQL to be run</param>
        /// <returns></returns>
        private DataTable getQueryDataTable(RRQuery query, List<QueryVariable> queryVariables)
        {
            var querySql = buildQuerySql(queryVariables, query.SQL.Value);
            try
            {
                var dataSet = new DataSet();
                // Get the connection for the query.
                var firstQueryDbConn = openConnections.Single(conn => conn.Key == query.ConnStringName).Value;
                var connType = firstQueryDbConn.GetType();
                if (connType.Name == "OleDbConnection")
                {
                    // It's an Ole DB connection
                    var firstQueryConn = (OleDbConnection)firstQueryDbConn;
                    using (OleDbCommand command = new OleDbCommand(querySql, firstQueryConn))
                    using (OleDbDataAdapter adapter = new OleDbDataAdapter(command))
                        adapter.Fill(dataSet);

                }
                return dataSet.Tables[0];                /*
                else
                {
                    // It's a teradata connection
                    var firstQueryConn = (TdConnection)firstQueryDbConn;
                    using (TdCommand command = new TdCommand(querySql, firstQueryConn))
                    using (TdDataAdapter adapter = new TdDataAdapter(command))
                        adapter.Fill(dataSet);
                    return dataSet.Tables[0];
                }
                */
            }
            catch (Exception ex)
            {
                CloseConnections();
                throw new Exception(string.Format("Error {0} while running query {0} SQL {1}", getFullErrorMessage(ex), query.Name, querySql));
            }
        }