通过执行存储过程在多维数据集(SSAS)中设置角色时出现问题

时间:2015-06-03 08:31:00

标签: c# security tuples ssas mdx

我正在通过执行返回每个用户有权访问的项的存储过程来配置对多维数据集(SSAS)的访问。我正在通过过滤来自特定维度的数据进行过滤,方法是在dll中运行一个方法,该方法返回带有该用户特定过滤器的MDX表达式。

我遇到的问题是,当用户拥有超过50个项目的权限时,只返回存储过程返回的前50个。

有人解决了类似问题并知道如何修复它吗?你知道SET类在返回的元组数量上是否受到限制?

这是我正在使用的方法:

public static Set FilterUNByUserName(string UserAccount)
    {
        Expression expr = new Expression();
        SetBuilder sb = new SetBuilder();

        using (SqlConnection cn = new SqlConnection())
        {
            // prepare connection and command
            cn.ConnectionString =
              string.Format(
                "data source={0};initial catalog={1};integrated security={2};",
                "server",
                "ddbb",
                "sspi"
            );
            cn.Open();
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = cn;
            cmd.CommandText = "[Seguridad].[FilterUNbyUser]";
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@UserAccount", UserAccount);
            // execute stored procedure
            SqlDataReader r = cmd.ExecuteReader(CommandBehavior.SingleResult);
            bool hasRow = r.Read();
            // iterate through the result set
            while (true == hasRow)
            {
                // add each member key to MDX set
                expr.ExpressionText = string.Format("[BI UNIT].[UN Id].&[{0}]", r[0].ToString());
                Member m = expr.CalculateMdxObject(null).ToMember();
                TupleBuilder tb = new TupleBuilder();
                tb.Add(m);
                sb.Add(tb.ToTuple());
                hasRow = r.Read();
            }
            cn.Close();
            // return MDX set
            return sb.ToSet();

        }
    }

0 个答案:

没有答案