public static DataRow[] Convert(AnalyticsDataResponse data) {
     List<DataRow> rows = new List<DataRow>();
     foreach (AnalyticsDataRow row in data.Rows) {
         DataRow temp = new DataRow();
         for (int i = 0; i < data.ColumnHeaders.Length; i++) {
             AnalyticsDataColumnHeader column = data.ColumnHeaders[i];
             string name = column.Name.Substring(3);
             string value = row.Cells[i].Value;
             switch (column.DataType) {
                 case "INTEGER":
                     temp.Cells[name] = Int32.Parse(value);
                     break;
                 case "STRING":
                     temp.Cells[name] = value;
                     break;
                 case "TIME":
                     temp.Cells[name] = Double.Parse(value);
                     break;
                 default:
                     temp.Cells[name] = value + " (" + column.DataType + ")";
                     break;
             }
         }
         rows.Add(temp);
     }
     return rows.ToArray();
 }
        internal object FormatVisitDataDouble(IAnalyticsField field, DataRow row1, DataRow row2) {

            string key = field.Name.Substring(3);

            double valueOld = (row1 == null ? 0 : row1.GetDouble(key));
            double valueNew = (row2 == null ? 0 : row2.GetDouble(key));

            double change = valueNew - valueOld;

            return new OmgDataRow {
                Alias = key,
                Label = Context.Translate(field),
                Value = new { raw = valueNew, text = Context.Format(valueNew) },
                Change = new { raw = change, text = Context.Format(change) },
            };

        }