【问题标题】:MDX where Date is less than now日期小于现在的 MDX
【发布时间】:2016-02-18 11:18:22
【问题描述】:

这是我下面的代码......

    SELECT 
 {
    [Measures].[ACPPurchaseValue]

  } ON COLUMNS
,(

   [Date].[YYYYMMDD].[YYYYMMDD]

  ) ON ROWS
FROM [Kahuna]
WHERE  
  (
    [Reporting Currency].[reportingCurrency].&[1]
   ,strToSet(@MdxBOSP)
   ,strToSet(@MdxVIPType)
   ,strToSet(@MdxHost)
   ,strToSet(@MdxOperatorName)
  );

我怎么能说 [Date].[YYYYMMDD].[YYYYMMDD]

【问题讨论】:

  • 你不能这样说:[Date].[YYYYMMDD].[YYYYMMDD] < getdate() ...< 两边都有不同的类型

标签: mdx cube


【解决方案1】:

您最初需要创建一个与今天相对应的成员或单个成员集。

以下看起来有点复杂,但实际上是一种相当标准的方法——由 Tomislav Piasevoli 提出——它违反了AdvWrks 维度Date

WITH
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[Calendar].[Date].&[' + [Measures].[Key for Today] + ']' 
  SET [Today] AS 
    StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) 
...

所以适用于你的情况:

WITH
  MEMBER [Measures].[Key for Today] AS 
    Format
    (
      Now()
     ,'yyyyMMdd'
    ) 
  MEMBER [Measures].[Today string] AS 
    '[Date].[YYYYMMDD].[YYYYMMDD].&[' + [Measures].[Key for Today] + ']' 
  SET [Today] AS 
    StrToMember
    (
      [Measures].[Today string]
     ,constrained
    ) 
SELECT 
   [Measures].[ACPPurchaseValue] ON 0
  ,{null:[Today].item(0).item(0)}  ON 1
FROM [Kahuna]
WHERE  
  (
    [Reporting Currency].[reportingCurrency].&[1]
   ,strToSet(@MdxBOSP)
   ,strToSet(@MdxVIPType)
   ,strToSet(@MdxHost)
   ,strToSet(@MdxOperatorName)
  );

另外两个更好的解决方案可以简化每个人的生活:

  1. 不要在你的多维数据集中实现未来的日期

  2. 保留未来的日期,但添加一个名为 [Today] 的自定义集和一个名为 today 作为子级的计算成员到 Date 的 All 成员。

【讨论】:

  • 如果您只是在日期维度中添加一个 IsPastDate 标志作为新属性,它将更加简单和高效。
  • 干杯@GregGalloway:我玩的方块没有未来日期。
  • 嗨whytheq,我认为这类似于stackoverflow.com/questions/35479968/…
  • 请看这个,我试图解决这个问题,但不能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多