我正在编写涉及2个以上轴的SSAS MDX查询'来检索值。使用ADOMD.NET,我可以获取返回的cellset并使用
确定值lblTotalGrossSales.Text = CellSet.Cells(0).Value
有没有办法可以在我的MDX查询中获取CellSet的Cell(0)值,而不是依赖于返回ADOMD.NET的数据?
谢谢!
编辑1: - 根据Daryl的评论,这里有一些关于我在做什么的详细说明。我当前的查询是使用多个轴',即:
SELECT {[Term Date].[Date Calcs].[MTD]} ON 0,
{[Sale Date].[YQMD].[DAY].&[20121115]} ON 1,
{[Customer].[ID].[All].[A612Q4-35]} ON 2,
{[Measures].[Loss]} ON 3
FROM OUR_CUBE
如果我在Management Studio中运行该查询,我被告知对于具有两个以上轴的单元集无法显示结果 - 这是有道理的,因为......你知道......有超过2个轴。但是,如果我使用ADOMD.NET在线运行此查询,并将返回值读入ADOMD.NET单元集,我可以检查单元格“0”的值,给我我的价值......据我所知它(在立方体中是一个总的noob)是所有这些值相交的值。
所以要回答你的问题Daryl,我想拥有的是能够将值返回给我,而不必读入调用应用程序中的单元格。为什么你会问?嗯..最终我希望有一个查询执行多个多轴查询来返回值。再说..我对多维数据集和MDX很新,所以我可能会犯这个错误(我是一个.NET开发人员)。
答案 0 :(得分:1)
简化查询以返回两个轴;
SELECT {[Measures].[Loss]} ON 0, {[Term Date].[Date Calcs].[MTD] * [Sale Date].[YQMD].[DAY].&[20121115] * [Customer].[ID].[All].[A612Q4-35]} ON 1 FROM OUR_CUBE
然后尝试以下操作来访问cellset;
string connectionString = "Data Source=localhost;Catalog=AdventureWorksDW2012";
//Create a new string builder to store the results
System.Text.StringBuilder result = new System.Text.StringBuilder();
AdomdConnection conn = new AdomdConnection(connectionString);
//Connect to the local serverusing (AdomdConnection conn = new AdomdConnection("Data Source=localhost;"))
{
conn.Open();
//Create a command, using this connection
AdomdCommand cmd = conn.CreateCommand();
cmd.CommandText = @"SELECT { [Measures].[Unit Price] } ON COLUMNS , {[Product].[Color].[Color].MEMBERS-[Product].[Color].[]} * [Product].[Model Name].[Model Name]ON ROWS FROM [Adventure Works] ;";
//Execute the query, returning a cellset
CellSet cs = cmd.ExecuteCellSet();
//Output the column captions from the first axis//Note that this procedure assumes a single member exists per column.
result.Append("\t\t\t");
TupleCollection tuplesOnColumns = cs.Axes[0].Set.Tuples;
foreach (Microsoft.AnalysisServices.AdomdClient.Tuple column in tuplesOnColumns)
{
result.Append(column.Members[0].Caption + "\t");
}
result.AppendLine();
//Output the row captions from the second axis and cell data//Note that this procedure assumes a two-dimensional cellset
TupleCollection tuplesOnRows = cs.Axes[1].Set.Tuples;
for (int row = 0; row < tuplesOnRows.Count; row++)
{
for (int members = 0; members < tuplesOnRows[row].Members.Count; members++ )
{
result.Append(tuplesOnRows[row].Members[members].Caption + "\t");
}
for (int col = 0; col < tuplesOnColumns.Count; col++)
{
result.Append(cs.Cells[col, row].FormattedValue + "\t");
}
result.AppendLine();
}
conn.Close();
TextBox1.Text = result.ToString();
} // using connection
答案 1 :(得分:-1)
这可以在列和行上选择。分析如何从主查询中遍历子选择查询将很有帮助。