1

我正在编写涉及超过 2 个轴的 SSAS MDX 查询来检索值。使用 ADOMD.NET,我可以获取返回的单元集并通过使用确定值

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”处的值,给出我的值......据我所知它(我是立方体的总菜鸟)是所有这些值相交的值。

因此,要回答您的问题 Daryl,我希望能够将此处的值返回给我,而不必将单元格集读取到调用应用程序中。为什么你可能会问?好吧.. 最终,我希望有一个查询来执行多个多轴查询以返回值。再说一次.. 我对立方体和 MDX 非常陌生,所以我可能完全错了(我是一名 .NET 开发人员)。

4

2 回答 2

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

然后尝试以下方法访问单元组;

 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

来源:使用 CellSet 检索数据

于 2012-11-19T15:02:52.050 回答
-1

这可以在列和行上进行选择。这将有助于分析如何从主查询中遍历子选择查询。

于 2015-08-04T02:10:10.387 回答