private void addDimensionFilterButton_Click(object sender, EventArgs e)
 {
     if (dimensionFilterTextBox.Text == null || dimensionFilterTextBox.Text == "")
     {
         MessageBox.Show("Error - The new filter must contains a criteria.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
     }
     else
     {
         Filter filter = new Filter(dimensionsListBox.SelectedItem as Parameter, dimensionsOperatorComboBox.SelectedItem as Operator, dimensionFilterTextBox.Text);
         Query.Filters.Add(filter);
         filtersListBox.Items.Add(filter);
     }
 }
        private static Query loadXmlQuery(Report report, string queryName)
        {
            XmlDocument doc = init(reportsFilePath);
            // Load metrics
            XmlNodeList xmlNodeList = doc.SelectNodes("/root/Reports/Report[@name='" + report + "']/Queries/Query[@name='"+ queryName + "']/Metrics/Metric");
            List<Metric> metrics = new List<Metric>();
            foreach (XmlNode metricNode in xmlNodeList)
            {
                string metricName = metricNode.Attributes["name"].Value;
                string metricTag = metricNode.Attributes["tag"].Value;
                Metric metric = new Metric(metricName, metricTag);
                metrics.Add(metric);
            }
            // Load dimensions
            xmlNodeList = doc.SelectNodes("/root/Reports/Report[@name='" + report + "']/Queries/Query[@name='" + queryName + "']/Dimensions/Dimension");
            List<Dimension> dimensions = new List<Dimension>();
            foreach (XmlNode dimensionNode in xmlNodeList)
            {
                string dimensionName = dimensionNode.Attributes["name"].Value;
                string dimensionTag = dimensionNode.Attributes["tag"].Value;
                Dimension dimension = new Dimension(dimensionName, dimensionTag);
                dimensions.Add(dimension);
            }

            xmlNodeList = doc.SelectNodes("/root/Reports/Report[@name='" + report + "']/Queries/Query[@name='" + queryName + "']/Filters/Filter");
            // Load filters
            List<Filter> filters = new List<Filter>();
            foreach (XmlNode filterNode in xmlNodeList)
            {
                String parameterTag = filterNode.Attributes["parameter"].Value;
                String expression = filterNode.InnerText;
                Operator op = Operator.GetOperator(filterNode.Attributes["operator"].Value);
                Parameter parameter = new Dimension("", parameterTag);
                Filter filter = new Filter(parameter, op, expression);
                filters.Add(filter);
            }
            XmlNode segmentNode = doc.SelectSingleNode("/root/Reports/Report[@name='" + report + "']/Queries/Query[@name='" + queryName + "']/Segment");
            String segmentName = segmentNode.Attributes["name"].Value;
            String semgentId = segmentNode.Attributes["id"].Value;
            AnaliticsAddIn.XML.Objects.ReportQuery.Filter.Segment segment = new AnaliticsAddIn.XML.Objects.ReportQuery.Filter.Segment(segmentName,semgentId);
            DateTime end = DateTime.Today;
            DateTime start = end;
            TimeUnit unit = report.Unit;
            return new Query(metrics, dimensions, filters, segment, unit, start, end, queryName);
        }