我有一个MDX
查询,其中字符串是从带有表单的前端应用程序解析的。最终用户可以根据自由文本字段限制查询,在该字段中,他们可以输入发票编号和发票编号的范围。查询基于以下两个参数进行构建:
SELECT
{[Measures].[Amount]} ON COLUMNS,
NON EMPTY
(
(
[Invoices].[Invoice Number].[Invoice Number].[100000000]:[Invoices].[Invoice Number].[Invoice Number].[222222222])
) ON ROWS
FROM [MyCube]
但是,如果最终用户键入非现有成员,则范围运算符将失败。我认为我需要将这些字段以某种方式转换为十进制数,而不是使用>进行检查。和<。
我已经有了一些想法。但是我无法让它发挥作用。在这里,我尝试过滤数字> 0(如果这有效,我可以填写>的参数,并为<。
添加一个SELECT
{[Measures].[Amount]} ON COLUMNS,
(
FILTER(
[Invoices].[Invoice Number].[Invoice Number].members
, Cdec([Invoices].[Invoice Number].Currentmember.Properties("Key")) > 0
)
) ON ROWS
FROM [MyCybe]
但是5分钟后我仍然没有回复..所以取消了查询。
答案 0 :(得分:2)
我已经用这种方式计算了(它是关于日期的,但想法是一样的):
with
member [Measures].[RD_Key] as CDec([Report Date].[Report Date ID].Currentmember.Member_Key)
member [Measures].[ResultFilter] as [RD_Key]>20130801 and [RD_Key]<20131013
select {[Measures].[Count],[Measures].[RD_Key]} on 0
,Filter([Report Date].[Report Date ID].members,[Measures].[ResultFilter]) on 1
FROM [DATA]
答案 1 :(得分:2)
如果FILTER
速度很慢,请尝试使用HAVING
子句。我假设不需要Member_Key
的转换,因为键通常是数字:
WITH
MEMBER [Measures].[Inv_Key] as
[Invoices].[Invoice Number].Currentmember.Member_Key
SELECT
{
[Measures].[Amount]
,[Measures].[Inv_Key]
} ON COLUMNS
,[Invoices].[Invoice Number].[Invoice Number].members
HAVING
[Measures].[Inv_Key] > 100000000
AND
[Measures].[Inv_Key] < 222222222
ON ROWS
FROM [DATA]