我是MDX查询新手,无法正确使用adomd参数。我正在使用的查询字符串如下:
Select {
[Measures].[Unit On Order],
[Measures].[Cost On Order],
[Measures].[Retail On Order]
} on columns,
NON EMPTY
{
[Product].[Universal Customer Choice Code].&[@GlobalId]
}
*
{
[Date].[01 - Fiscal Week].[@StartFiscalWeek] : [Date].[01 - Fiscal Week].[@EndFiscalWeek]
} on rows
from [Buy Plan]
where (
[Brand].[Brand].[@Brand],
[Market].[Market].[@Market],
[Reporting Currency].[Reporting Currency].&[@ReportingCurrency]
)
我一直在添加参数:
var parameter = command.CreateParameter();
parameter.ParameterName = argument.Key;
parameter.Value = argument.Value;
command.Parameters.Add(parameter);
当我手动替换@parameters时,结果具有值。但是,我无法使用Adomd参数执行相同操作。我见过有人建议使用StrToSet()和StrToMember()。我既不熟悉,也无法弄清楚Set和Member之间的区别。
我认为我需要的只是知道如何正确格式化QueryString。在此先感谢您的帮助!
答案 0 :(得分:1)
由于评论很长,请将其添加为答案。
但是,我确实还有一些问题。为什么参数 和StrToMember要求使用整个字段?为什么我不能 使查询字符串看起来像:
StrToMember
很难解释原因,那只是语法!你不能在这样的声明中使用StrToMember("[Product].[Universal Customer Choice Code].[" + @GlobalId + "]")
。
构建查询的另一种方法是:
@GlobalID
看看这里发生了什么?
您的报告中传递的member
是字符串值。您可以将此值连接到静态字符串,并将其转换为格式正确的成员定义。下一步是使用StrToMember
函数将此字符串转换为StrToMember
。
请注意,如果您打算将来添加更多成员,那么StrToSet
功能将不再有效。您必须使用constructor
。
希望它有所帮助。
答案 1 :(得分:0)
天啊,我想通了!对于那些知道如何使用MDX但也许对其他人有用的人来说,这可能是一个简单的答案。
我的第一个问题:我的参数格式不正确。
var param_wrong = new AdomdParameter("@Global", 012345);
这是不正确的,因为' @'不应该包含在参数声明中,只能在Query字符串中。
var param_almost_correct = new AdomdParameter("Global", 012345);
我的第二个问题:我的初始查询字符串没有包括StrToMember。我终于想出了如何使用它。 StrToMember应该包括整个字段。现在参数应该反映这一点。
var param_correct = new AdomdParameter("Global", [Product].[Universal Customer Choice Code].[000113416000]);
第三个问题和最后的改变是创建一个格式正确的查询字符串,如下所示。
Select {
[Measures].[Unit On Order],
[Measures].[Cost On Order],
[Measures].[Retail On Order] }
on columns,
NON EMPTY {
StrToMember(@GlobalId) } *
{ StrToMember(@StartFiscalWeek) : StrToMember(@EndFiscalWeek) }
on rows from [Buy Plan]
where(
StrToMember(@Brand),
StrToMember(@Market),
StrToMember(@ReportingCurrency) )
但是,我确实还有一些问题。为什么参数和StrToMember要求使用整个字段?为什么我的查询字符串看起来不像:
[Product].[Universal Customer Choice Code].[StrToMember(@GlobalId)]
我试过这样但是没有用。