MDX范围与非现有成员

时间:2015-02-13 12:53:27

标签: ssas mdx

我有一个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分钟后我仍然没有回复..所以取消了查询。

2 个答案:

答案 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]