MDX查询中where子句中的Now()

MDX查询中where子句中的Now(),mdx,mondrian,Mdx,Mondrian,我试图找出当前日期-30天之间的所有记录。但无法为此编写MDX筛选器。我目前的查询是: WITH SET [~FILTER] AS {[Created_Date.Created_Hir].[Created_On].Members} SET [~ROWS] AS {[Sales Order Attributes SO.Sales_order].[Sales Order ID].Members} SELECT NON EMPTY {[Measures].[CO

我试图找出当前日期-30天之间的所有记录。但无法为此编写MDX筛选器。我目前的查询是:

 WITH
  SET [~FILTER] AS
     {[Created_Date.Created_Hir].[Created_On].Members}
 SET [~ROWS] AS
    {[Sales Order Attributes SO.Sales_order].[Sales Order ID].Members}
    SELECT
   NON EMPTY {[Measures].[CONT_AMT_GROSS]} ON COLUMNS,
   NON EMPTY [~ROWS] ON ROWS
   FROM [SALES_ORDER]
   WHERE [~FILTER]

正在获取所有记录。

以下内容应作为日期“过滤器”

过滤器
( 
[Created_Date]。[Created_Hir]。[Created_On]。成员,
DateDiff
( 
“d”,
CDate([Created_Date].[Created_Hir].成员值),
现在()

)以下是在AdvWrks多维数据集中查找今天以及之前30天的示例:

WITH 
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Key for Today (AW)] AS 
    '2007' + Right([Measures].[Key for Today],4) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[Calendar].[Date].&[' + [Measures].[Key for Today (AW)] + ']' 
  SET [Today] AS 
    StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) 
  SET [Last30Days] AS 
    [Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0) 
SELECT 
  {} ON 0
 ,[Last30Days] ON 1
FROM [Adventure Works];
结果如下:

因此,如果我们想修改上述内容,以便只获得过去30天的互联网销售额:

WITH 
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Key for Today (AW)] AS 
    '2007' + Right([Measures].[Key for Today],4) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[Calendar].[Date].&[' + [Measures].[Key for Today (AW)] + ']' 
  SET [Today] AS 
    StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) 
  SET [Last30Days] AS 
    [Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0) 
  MEMBER [Date].[Calendar].[All].[Last30Days] AS 
    Aggregate([Last30Days]) 
SELECT 
  {[Measures].[Internet Sales Amount]} ON 0
FROM [Adventure Works]
WHERE [Date].[Calendar].[All].[Last30Days];
应用到您的场景中,上面的内容如下所示:

WITH 
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Created_Date.Created_Hir].[Created_On].&[' + [Measures].[Key for Today] + ']' 
  SET [Today] AS 
    StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) 
  SET [~FILTER] AS 
    [Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0) 
  MEMBER [Created_Date.Created_Hir].[All].[~FILTERaggregated] AS 
  //MEMBER [Created_Date.Created_Hir].[Created_On].[All].[~FILTERaggregated] AS //<<if above is throwing an exception then try this instead
    Aggregate([~FILTER]) 
  SET [~ROWS] AS 
    {
      [Sales Order Attributes SO.Sales_order].[Sales Order ID].MEMBERS
    } 
SELECT 
  NON EMPTY 
    {[Measures].[CONT_AMT_GROSS]} ON COLUMNS
 ,NON EMPTY 
    [~ROWS] ON ROWS
FROM [SALES_ORDER]
WHERE 
  [Created_Date.Created_Hir].[All].[~FILTERaggregated];
与
成员[措施][今天的关键]如下
格式
(
现在()
“yyyyMMdd”
) 
成员[度量值][Today string]为
“[Created_Date.Created_Hir].[Created_On].&['+[Measures].[Key for Today]+']”
将[今天]定为
strotmember
(
[措施][今天字符串]
受限
) 
将[~FILTER]设置为
[今天].项目(0).项目(0).延迟(30):[今天].项目(0).项目(0)
成员[Created_Date.Created_Hir].[All].[FILTERaggregated]为

//成员[创建日期.创建日期].[创建日期].[全部].~FILTERaggregated]AS//告诉我们更多关于日期如何存储在日期表中的信息。它是预先填充了一些范围还是只有交易日才有日期?今天的日期是最后一个日期吗?嗨,苏拉夫,我添加了YYMMDD格式的日期。它是预填充的表。例如,将[~FILTER]设置为{[Created_date.Created_Hir].[Created_on]。[20140220]}将[~ROWS]设置为{[Sales Order Attributes SO.Sales_Order].[Sales Order ID]。成员}在列上选择非空{[Measures].[CONT AMT_GROSS]},在[Sales_Order]的行上选择非空[~ROWS],其中[~FILTER]通过此查询,我能够获取2014-02-20交易的记录,因此使用上述查询,我希望获取从现在起的所有记录()-30天。谢谢,@malay是苏拉夫还是我回答了你的问题?谢谢苏拉夫的快速回复,谢谢苏拉夫的快速回复,我尝试了上面的查询,但它给了我这个错误,原因是:mondrian.olap.MondrianException:mondrian错误:没有函数匹配签名“DateDiff(,)”,当我尝试执行查询时也是如此[Created_Date.Created_Hir].CurrentMember.Value引发它的原因:mondrian.olap.MondrianException:mondrian错误:没有与签名{}匹配的函数“我也只是想告诉大家,我正在使用vertica作为数据库,但vertica有datediff函数。Mondrian在它支持的函数方面是个麻烦。让我检查一下Mondrian文档中的等效函数。原因:Mondrian.olap.fun.MondrianEvaluationException:Mondrian.olap.InvalidArgumentException:Mondrian错误:无效参数。CDate函数的表达式参数必须格式正确(0.0)。我还会搜索此错误。如果您发现任何问题,请将其发布到此处。哇。尝试删除第3个参数上的CDate。我将其作为预防措施放在此处。
[Created_Date.Created_Hir].[All].~FILTER]
?这行吗?@SouravA这可能更好
[创建日期.创建日期].[创建日期].[所有].[FILTER]
您已经用一个集合别名代替了一个成员名。它不会引发错误吗?@SouravA否-集合和计算成员使用相同的名称是可以的
[一些Dim].[一些Hier].[一组成员的别名]
是我关心的问题。
WITH 
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Created_Date.Created_Hir].[Created_On].&[' + [Measures].[Key for Today] + ']' 
  SET [Today] AS 
    StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) 
  SET [~FILTER] AS 
    [Today].Item(0).Item(0).Lag(30) : [Today].Item(0).Item(0) 
  MEMBER [Created_Date.Created_Hir].[All].[~FILTERaggregated] AS 
  //MEMBER [Created_Date.Created_Hir].[Created_On].[All].[~FILTERaggregated] AS //<<if above is throwing an exception then try this instead
    Aggregate([~FILTER]) 
  SET [~ROWS] AS 
    {
      [Sales Order Attributes SO.Sales_order].[Sales Order ID].MEMBERS
    } 
SELECT 
  NON EMPTY 
    {[Measures].[CONT_AMT_GROSS]} ON COLUMNS
 ,NON EMPTY 
    [~ROWS] ON ROWS
FROM [SALES_ORDER]
WHERE 
  [Created_Date.Created_Hir].[All].[~FILTERaggregated];