我正在通过执行返回每个用户有权访问的项的存储过程来配置对多维数据集(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();
}
}