我使用以下代码在C#中执行查询:
AdomdConnection con = new AdomdConnection("Datasource=local;...");
con.Open();
AdomdCommand command = con.CreateCommand();
command.CommandText = input;
AdomdDataReader reader = command.ExecuteReader();
while (reader.Read())
{
for(i =0; i<reader.fieldCount; i++){
a[i]=reader.GetString(i);
}
return a;
但是,此代码返回每个单元格的层次结构中的完整路径。即,每行数据类似于[AllGeography,Canada,Vancouver,Allproduct,bikes,accessories,297483]。 我想只检索叶子和度量值:[温哥华,配件,297483]。我该怎么办?我如何指定树叶?
答案 0 :(得分:2)
因为MDX查询的结果实际上是多维的,所以我觉得自己对ExecuteCellSet感觉更舒服。您可以获得整个CellSet,然后通过坐标获得Measures。
例如(如果查询中有一个度量):
AdomdCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT
[Geography].[Geography].[Country].&[Canada].Children ON 0,
[Product].[Id] ON 1
FROM [Cube]
WHERE [Measures].[Your Measure]";
CellSet cs = cmd.ExecuteCellSet();
TupleCollection CanadaChildren = cs.Axes[0].Set.Tuples;
TupleCollection ProductIds = cs.Axes[1].Set.Tuples;
for (int row = 0; row < CanadaChildren.Count; row++)
{
for (int col = 0; col < ProductIds.Count; col++)
{
a[i++] = cs.Cells[col, row].Value;
}
}
conn.Close();
如果你有几个测量,那么它将是查询中的第三个维度,而是一个单元集中的第三个维数。