static void Main(string[] args) { Parser.Default.ParseArguments <Options>(args) .WithParsed <Options>(o => { Utils utils = new Utils(); DataTable excel = utils.ImportExceltoDatatable(o.inExcel, "Queries"); DirectoryInfo od = new DirectoryInfo(o.outDir); od.Create(); DataTable dtSummary = new DataTable(); dtSummary.Columns.Add(new DataColumn("SSASModel", typeof(String))); dtSummary.Columns.Add(new DataColumn("TableName", typeof(String))); dtSummary.Columns.Add(new DataColumn("TestResults", typeof(String))); dtSummary.Columns.Add(new DataColumn("TDQueryStartTime", typeof(DateTime))); dtSummary.Columns.Add(new DataColumn("TDQueryEndTime", typeof(DateTime))); dtSummary.Columns.Add(new DataColumn("TDQueryExecutionTime(minutes)", typeof(System.Double))); dtSummary.Columns.Add(new DataColumn("SSASQueryStartTime", typeof(DateTime))); dtSummary.Columns.Add(new DataColumn("SSASQueryEndTime", typeof(DateTime))); dtSummary.Columns.Add(new DataColumn("SSASQueryExecutionTime(minutes)", typeof(System.Double))); dtSummary.Columns.Add(new DataColumn("Exception", typeof(String))); dtSummary.Columns.Add(new DataColumn("TDQuery", typeof(String))); dtSummary.Columns.Add(new DataColumn("DAX", typeof(String))); foreach (DataRow row in excel.Rows) { string ssasModel = row["SSAS_MODEL"].ToString(); string tableName = row["TABLE_NAME"].ToString(); string tdQuery = row["TD_QUERY"].ToString(); string daxQuery = row["DAX"].ToString(); DateTime tdStartTime = DateTime.Now, tdEndTime = DateTime.Now, SSASStartTime = DateTime.Now, SSASEndTime = DateTime.Now; if (tableName.ToString().Equals("")) { continue; } DataRow drSummary = dtSummary.NewRow(); drSummary["SSASModel"] = ssasModel; drSummary["TableName"] = tableName; drSummary["TDQuery"] = tdQuery; drSummary["DAX"] = daxQuery; drSummary["TestResults"] = "Failed"; Console.WriteLine("---------------------------------------------------------------"); Console.WriteLine(ssasModel + " -> " + tableName); using (var workbook = new XLWorkbook()) { try { Console.WriteLine(tdQuery); TdConnection cn = new TdConnection(o.Server); cn.Open(); TdCommand cmd = null; TdDataAdapter adapter = null; DataTable dtt = new DataTable(); tdStartTime = DateTime.Now; try { cmd = new TdCommand(tdQuery, cn); cmd.CommandTimeout = 1200; adapter = new TdDataAdapter(cmd); tdStartTime = DateTime.Now; adapter.Fill(dtt); tdEndTime = DateTime.Now; workbook.Worksheets.Add(dtt, "TD"); cmd.Connection.Close(); cmd.Dispose(); adapter.Dispose(); } catch (Exception e) { tdEndTime = DateTime.Now; cmd.Connection.Close(); cmd.Dispose(); adapter.Dispose(); throw e; } drSummary["TDQueryStartTime"] = tdStartTime; drSummary["TDQueryEndTime"] = tdEndTime; drSummary["TDQueryExecutionTime(minutes)"] = (double)tdEndTime.Subtract(tdStartTime).Seconds / 60; //ADOTabularConnection conx = new ADOTabularConnection(@"Data Source = .; Catalog = AW;", AdomdType.AnalysisServices); System.Data.DataTable dt = new DataTable(); ADOTabularConnection conx = null; try { conx = new ADOTabularConnection(o.SSAS, ADOTabular.Enums.AdomdType.AnalysisServices); if (!ssasModel.Trim().Equals("")) { conx.ChangeDatabase(ssasModel); } Console.WriteLine("--------------------DAX---------------------------"); Console.WriteLine(daxQuery); SSASStartTime = DateTime.Now; drSummary["SSASQueryStartTime"] = SSASStartTime; dt = conx.ExecuteDaxQueryDataTable(daxQuery); SSASEndTime = DateTime.Now; conx.Close(); conx.Dispose(); } catch (Exception e) { SSASEndTime = DateTime.Now; conx.Close(); conx.Dispose(); throw e; } drSummary["SSASQueryEndTime"] = SSASEndTime; drSummary["SSASQueryExecutionTime(minutes)"] = (double)SSASEndTime.Subtract(SSASStartTime).Seconds / 60; int noOfRows = dt.Rows.Count; if (noOfRows > MAX_ROWS) { dt = dt.Rows.Cast <DataRow>().Take(MAX_ROWS).CopyToDataTable(); } workbook.Worksheets.Add(dt, "SSAS"); DataTable ret = utils.getDifferentRecords(dtt, dt); DataTable dtOutput = new DataTable(); dtOutput.Columns.Add(new DataColumn("SSASModel", typeof(String))); dtOutput.Columns.Add(new DataColumn("TableName", typeof(String))); dtOutput.Columns.Add(new DataColumn("TDQuery", typeof(String))); dtOutput.Columns.Add(new DataColumn("DAX", typeof(String))); dtOutput.Columns.Add(new DataColumn("TestResults", typeof(String))); dtOutput.Columns.Add(new DataColumn("TDQueryStartTime", typeof(DateTime))); dtOutput.Columns.Add(new DataColumn("TDQueryEndTime", typeof(DateTime))); dtOutput.Columns.Add(new DataColumn("TDQueryExecutionTime(minutes)", typeof(System.Double))); dtOutput.Columns.Add(new DataColumn("SSASQueryStartTime", typeof(DateTime))); dtOutput.Columns.Add(new DataColumn("SSASQueryEndTime", typeof(DateTime))); dtOutput.Columns.Add(new DataColumn("SSASQueryExecutionTime(minutes)", typeof(System.Double))); DataRow dr = dtOutput.NewRow(); dr["SSASModel"] = ssasModel; dr["TableName"] = tableName; dr["TDQuery"] = tdQuery; dr["DAX"] = daxQuery; dr["TDQueryStartTime"] = tdStartTime; dr["TDQueryEndTime"] = tdEndTime; dr["TDQueryExecutionTime(minutes)"] = (double)tdEndTime.Subtract(tdStartTime).Seconds / 60; dr["SSASQueryStartTime"] = SSASStartTime; dr["SSASQueryEndTime"] = SSASEndTime; dr["SSASQueryExecutionTime(minutes)"] = (double)SSASEndTime.Subtract(SSASStartTime).Seconds / 60; if (noOfRows == 0) { //tableName = tableName + "_NODATA"; dr["TestResults"] = "No data"; drSummary["TestResults"] = "No data"; } else if (ret.Rows.Count > 0) { workbook.Worksheets.Add(ret, "ERRORS"); //tableName = tableName + "_FAILED"; dr["TestResults"] = "Failed"; drSummary["TestResults"] = "Failed"; } else { //tableName = tableName + "_PASSED"; dr["TestResults"] = "Passed"; drSummary["TestResults"] = "Passed"; } dtOutput.Rows.Add(dr); workbook.Worksheets.Add(dtOutput, "TestOutput"); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); tableName = tableName + "_Exception"; DataTable ex = new DataTable("Exception"); ex.Columns.AddRange(new DataColumn[2] { new DataColumn("ERROR1"), new DataColumn("ERROR2") }); drSummary["Exception"] = e.Message; ex.Rows.Add("Failed", e.Message); ex.Rows.Add("", e.StackTrace); workbook.Worksheets.Add(ex, "Exception"); } finally { dtSummary.Rows.Add(drSummary); workbook.SaveAs(od.FullName + "\\" + tableName + ".xlsx"); XLWorkbook summaryworkbook = new XLWorkbook(); summaryworkbook.Worksheets.Add(dtSummary, "TestSummary"); summaryworkbook.SaveAs(od.FullName + "\\TestSummary.xlsx"); } } } }); }