コード例 #1
0
        private static void SetupTrace(xlAmo.Trace trace, List <DaxStudioTraceEventClass> events)
        {
            Log.Debug("{class} {method} {event}", "QueryTraceEngineExcel", "SetupTrace", "enter");
            trace.Events.Clear();
            // Add CommandBegin so we can catch the heartbeat events
            trace.Events.Add(TraceEventFactoryExcel.CreateTrace(xlAmo.TraceEventClass.CommandBegin));
            // Add QueryEnd so we know when to stop the trace
            trace.Events.Add(TraceEventFactoryExcel.CreateTrace(xlAmo.TraceEventClass.QueryEnd));

            // catch the events in the ITraceWatcher
            foreach (DaxStudioTraceEventClass eventClass in events)
            {
                // PowerPivot in Excel does not have direct query events, so skip it if makes it this far
                if (eventClass == DaxStudioTraceEventClass.DirectQueryEnd)
                {
                    continue;
                }

                var amoEventClass = (ExcelAmo.Microsoft.AnalysisServices.TraceEventClass)eventClass;
                if (trace.Events.Find(amoEventClass) != null)
                {
                    continue;
                }

                xlAmo.TraceEvent trcEvent = TraceEventFactoryExcel.CreateTrace(amoEventClass);
                trace.Events.Add(trcEvent);
            }
            trace.Update();
            Log.Debug("{class} {method} {event}", "QueryTraceEngineExcel", "SetupTrace", "exit");
        }
コード例 #2
0
        public static xlAmo.TraceEvent CreateTrace(xlAmo.TraceEventClass eventClass)
        {
            xlAmo.TraceEvent trc = new xlAmo.TraceEvent(eventClass);
            trc.Columns.Add(xlAmo.TraceColumn.EventClass);

            if (eventClass != xlAmo.TraceEventClass.DirectQueryEnd && eventClass != xlAmo.TraceEventClass.Error)
            {
                // DirectQuery doesn't have subclasses
                trc.Columns.Add(xlAmo.TraceColumn.EventSubclass);
            }

            trc.Columns.Add(xlAmo.TraceColumn.TextData);
            trc.Columns.Add(xlAmo.TraceColumn.CurrentTime);
            if (eventClass == xlAmo.TraceEventClass.QueryEnd)
            {
                trc.Columns.Add(xlAmo.TraceColumn.DatabaseName);
                trc.Columns.Add(xlAmo.TraceColumn.EndTime);
                trc.Columns.Add(xlAmo.TraceColumn.NTUserName);
            }
            if (eventClass != xlAmo.TraceEventClass.VertiPaqSEQueryCacheMatch)
            {
                trc.Columns.Add(xlAmo.TraceColumn.StartTime);
            }
            trc.Columns.Add(xlAmo.TraceColumn.Spid);
            trc.Columns.Add(xlAmo.TraceColumn.SessionID);
            // In Excel we do not add ActivityID
            // trc.Columns.Add(xlAmo.TraceColumn.ActivityID);
            switch (eventClass)
            {
            case xlAmo.TraceEventClass.CommandEnd:
            case xlAmo.TraceEventClass.CalculateNonEmptyEnd:
            case xlAmo.TraceEventClass.DirectQueryEnd:
            case xlAmo.TraceEventClass.DiscoverEnd:
            case xlAmo.TraceEventClass.ExecuteMdxScriptEnd:
            case xlAmo.TraceEventClass.FileSaveEnd:
            case xlAmo.TraceEventClass.ProgressReportEnd:
            case xlAmo.TraceEventClass.QueryCubeEnd:
            case xlAmo.TraceEventClass.QueryEnd:
            case xlAmo.TraceEventClass.QuerySubcube:
            case xlAmo.TraceEventClass.QuerySubcubeVerbose:
            case xlAmo.TraceEventClass.VertiPaqSEQueryEnd:
                trc.Columns.Add(xlAmo.TraceColumn.Duration);
                trc.Columns.Add(xlAmo.TraceColumn.CpuTime);
                break;

            case xlAmo.TraceEventClass.Error:
                trc.Columns.Add(xlAmo.TraceColumn.Error);
                break;
            }
            return(trc);
        }
コード例 #3
0
        public static xlAmo.TraceEvent CreateTrace(xlAmo.TraceEventClass eventClass)
        {
            xlAmo.TraceEvent trc = new xlAmo.TraceEvent(eventClass);
            trc.Columns.Add(xlAmo.TraceColumn.EventClass);
            trc.Columns.Add(xlAmo.TraceColumn.EventSubclass);
            trc.Columns.Add(xlAmo.TraceColumn.TextData);
            trc.Columns.Add(xlAmo.TraceColumn.CurrentTime);
            if (eventClass != xlAmo.TraceEventClass.VertiPaqSEQueryCacheMatch)
            {
                trc.Columns.Add(xlAmo.TraceColumn.StartTime);
            }
            trc.Columns.Add(xlAmo.TraceColumn.Spid);
            trc.Columns.Add(xlAmo.TraceColumn.SessionID);
            switch (eventClass)
            {
                case xlAmo.TraceEventClass.CommandEnd:
                case xlAmo.TraceEventClass.CalculateNonEmptyEnd:
                case xlAmo.TraceEventClass.DirectQueryEnd:
                case xlAmo.TraceEventClass.DiscoverEnd:
                case xlAmo.TraceEventClass.ExecuteMdxScriptEnd:
                case xlAmo.TraceEventClass.FileSaveEnd:
                case xlAmo.TraceEventClass.ProgressReportEnd:
                case xlAmo.TraceEventClass.QueryCubeEnd:
                case xlAmo.TraceEventClass.QueryEnd:
                case xlAmo.TraceEventClass.QuerySubcube:
                case xlAmo.TraceEventClass.QuerySubcubeVerbose:
                case xlAmo.TraceEventClass.VertiPaqSEQueryEnd:
                    trc.Columns.Add(xlAmo.TraceColumn.Duration);
                    trc.Columns.Add(xlAmo.TraceColumn.CpuTime);
                    break;
                case xlAmo.TraceEventClass.Error:
                    trc.Columns.Add(xlAmo.TraceColumn.Error);
                    break;

            }
            return trc;
        }