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 中可能很棘手,所以最初可以尝试以下简单方法:
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 函数的情况下找到日期之间的差异。
我有一个 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 中可能很棘手,所以最初可以尝试以下简单方法:
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 函数的情况下找到日期之间的差异。