shell 日期维度和常规日期维度之间的 MDX 天数

MDX number of days between shell date dimension and regular date dimension

我有一个 shell 日期维度和一个销售日期维度。无法使用两个日期之间的天数差来设置计算量度。 我已经尝试了很多东西,但计算似乎总是 return 错误。

mdx 例子是:

WITH 
MEMBER [Measures].[TimeDate] AS [Date].[Day].currentmember
MEMBER [Measures].[DSODate]  AS [DSO Date].[Day].currentmember
MEMBER [Measures].[DaysSinceSale] AS 
   DateDiff(
      "d"
      , [Measures].DSODate.MemberValue
      , [Measures].TimeDate.MemberValue
   )
Select 
  {[Measures].[DaysSinceSale]} ON COLUMNS,
  {[Date].[Day].members} ON ROWS
from [Receivables];

我试过使用 DateDiff,并尝试只减去 2 个日期。 假设它可能与具有不同层次结构的 2 个日期维度有关,但我不确定如何处理。

MDX Results

日期转换在 mdx 中可能很棘手,所以最初可以尝试以下简单方法:

WITH 
MEMBER [Measures].[TimeDate] AS [Date].[Day].currentmember
MEMBER [Measures].[DSODate]  AS [DSO Date].[Day].currentmember
MEMBER [Measures].[DaysSinceSale] AS 
   DateDiff(
      "d"
      , VBA!CDate([Measures].DSODate.MemberValue)
      , VBA!CDate([Measures].TimeDate.MemberValue)
   )
Select 
  {[Measures].[DaysSinceSale]} ON COLUMNS,
  {[Date].[Day].members} ON ROWS
from [Receivables]; 

否则您可能需要使用密钥和类似的方法:

我找到了一种方法来让它工作... 主要问题是我没有交叉连接,就像提到的 whytheq 一样。 我也不需要在顶部声明的自定义措施。

我做的另一个调整是在日期计算中使用 DateKey。这似乎在我的所有测试中都有效,并且大大提高了性能。

WITH   
MEMBER [Measures].[DaysSinceSale] AS 
   [Date].[DateKey].CurrentMember.MemberValue - [DSO Date].[DateKey].CurrentMember.MemberValue
Select 
  {[Measures].[DaysSinceSale]} ON COLUMNS,
  {[Date].[DateKey].Members * [DSO Date].[DateKey].members} ON ROWS
from [Receivables]; 

如果您发现使用 DateKey 时可能出现的任何问题,请告诉我。对于我正在做的事情,这似乎拉回了正确的日期值,并允许我在不使用 datediff 函数的情况下找到日期之间的差异。