这一切都源于查询Google Analytics数据。对于基本查询,更改的主要因素是维度和指标。返回的对象是一个名为GaData的类型,您需要的实际结果驻留在GaData.Rows中。
GaData.Rows的格式如下所示:
每个维度首先会有一行,在此示例中,“新访问者”有一行,“返回访问者”有第二行。在这些行中,将包含另一组包含Dimension值的行,然后是您指定的每个指标(我只询问了一个指标)。
到目前为止,我的课程设置如下:
public class Results
{
public List<Dimension> Dimensions { get; set; }
}
public class Dimension
{
public string Value { get; set; }
public List<Metric> Metrics { get; set; }
}
public class Metric
{
public int Value { get; set; }
}
最后,也许它已经很晚了,我的大脑功能不好,但是我将这些数据转换为Results
类型有点困难,我认为是因为多层。有什么帮助吗?
修改
我在下面添加了一个答案,说明我最终如何完成它,如果有人有更简洁的例子让我知道!
答案 0 :(得分:1)
好吧,我不知道Rows
里面Ga
是什么,但也许这会指向正确的方向。
var results
= GaData.Rows.Select(x => x.Rows.Select(y =>
new Dimension { Value = y.Value, Metrics = new List<Metric> {innerRow.Metric}}));
答案 1 :(得分:1)
我最终为GaData创建了一个名为ToDimensionResults()的扩展方法。我不确定我是否能够使用LINQ完成此操作,因为我需要知道某些行的索引(如Dimension Value)。所以我选择循环遍历维度和指标,并手动创建类。注意:如果您在查询中未包含维度,则结果不包含维度值,只包含指标列表,因此这可以适应这种可能性。
public static Results ToDimensionResults(this GaData ga)
{
var results = new Results();
var dimensions = new List<Dimension>();
List<Metric> metrics;
var value = "";
var metricStartIndex = 1;
for (var i = 0; i < ga.Rows.Count; i++)
{
//accomodate data without dimensions
if (!string.IsNullOrEmpty(ga.Query.Dimensions))
{
value = ga.Rows[i][0].ToString();
}
else
{
value = "";
metricStartIndex = 0;
}
metrics = new List<Metric>();
for (var x = metricStartIndex; x < ga.Rows[i].Count; x++)
{
metrics.Add(new Metric
{
Value = Convert.ToInt32(ga.Rows[i][x])
});
}
dimensions.Add(new Dimension
{
Value = value,
Metrics = metrics
});
}
results.Dimensions = dimensions;
return results;
}