【问题标题】:Calculate customers who have generated revenue for the first time in MDX计算在 MDX 中首次产生收入的客户
【发布时间】:2014-07-07 11:49:14
【问题描述】:

我想计算在当前期间首次活跃的客户。假设活跃客户的计算如下

成员 [措施].[ActiveCustomers] AS 和( [客户].[客户 ID].成员, IIF([措施].[收入] > 0,1,NULL))

我需要如何或使用什么函数来确定在当前期间首次产生收入的客户?

【问题讨论】:

  • 如何确定当前周期?是否要使用时间层次结构底层的最后一个成员?或者你想从当前系统日期计算一些东西?或者你的意思是这个层次结构的CurrentMember
  • 我将根据日期层次结构进行旋转,假设它的名称为 [Calendar].[Year Month Day],我将使用 [Calendar].[Year Month Day].CurrentMember 来确定当前期间。

标签: ssas mdx


【解决方案1】:

如果,当您写“计算客户”时,您的意思是“获取客户 ID 列表”,那么

Filter([Customer].[Customer Id].[Customer Id].Members,
       ([Calendar].[Year Month Day].CurrentMember, [Measures].[Revenue]) > 0
       AND
       Sum(null : [Calendar].[Year Month Day].CurrentMember.PrevMember, [Measures].[Revenue]) = 0
      )

应该做到这一点。 这将检查当前期间的收入 > 0,并且所有先前期间的总和为零。如果您有负收入,这可能会失败,因为正负收入可能会相互抵消,但我假设这里不是这种情况。

【讨论】:

  • 我想要计数,但在这种情况下,我需要汇总不同数量的客户。因此,假设我想获得在此期间产生收入的客户,而不是在之前产生的收入,并且还在 2 个时期前产生收入......我需要使用 LastPeriod(2,[Calendar].[Year Month天]),并添加到上面的条件?应该可以吧?
  • @Mez 好的,在这种情况下,只需使用 Count 而不是 Filter。如果您想要两个时期前有收入的客户,那就是([Calendar].[Year Month Day].CurrentMember.Lag(2), [Measures].[Revenue]) > 0。并且始终考虑到CurrentMember 可能是一天、一个月、一年或所有成员,或者您的时间层次结构中的任何内容。并想一想表达式对所有这些的表现如何(如果它们碰巧在查询中使用)。
  • 是的,考虑到了。事实上,这就是我想使用 CurrentMember 的原因,因此它不会被绑定到任何时期。关于 LastPeriods(X, [Calendar]) VS CurrentMember.Lag(2) - 这两个的用法有什么区别?
  • @Mez LastPeriods(x, [Calendar]) 返回一组x 成员,而Lag(x) 仅返回一个成员,即x 几步之遥。而且我知道您希望拥有恰好在两个时期前有收入的客户。
猜你喜欢
  • 1970-01-01
  • 2021-05-13
  • 2021-08-24
  • 1970-01-01
  • 2021-02-15
  • 1970-01-01
  • 2022-11-11
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多