我需要一项措施,这将使我在上次购买后一年内进行新购买的客户百分比。
通常,我只会创建一个计算出的列,该列捕获了每个客户每年最后购买日期总结一下,但是我正在使用与立方体的实时连接,无法创建计算的列。
这是我要寻找的一些伪代码:
One Year Return =
VAR Cohort =
SUMMARIZECOLUMNS (
Customer[ID],
FILTER (
VALUES ( Sales[Sales Date] ),
YEAR ( Sales[Sales Date] )
< ( YEAR ( TODAY () ) - 1 )
)
)
VAR Returners =
SUMMARIZECOLUMNS (
Customer[ID],
FILTER (
VALUES ( Sales[Sales Date] ),
Sales[Sales Date] > Sales[Old Sales Date] //<--Need help here
),
FILTER (
VALUES ( Customer[ID] ),
Customer[ID] IN Cohort
)
)
VAR Rate =
CALCULATE ( DISTINCTCOUNT ( Customer[ID] ), Customer[ID] IN Returners ) /
CALCULATE ( DISTINCTCOUNT ( Customer[ID] ), Customer[ID] IN Cohort )
RETURN
Rate
主要困难是我需要每个客户一个不同的时间窗口,但不能制作计算的列。我一直在考虑使用较早的或ParallelPeriod之间的使用,但无法让它们中的任何一个工作。
首先,我认为您正在寻找此
VAR last_year = DATE ( YEAR ( TODAY () ) - 1; MONTH ( TODAY () ); DAY ( TODAY () ) )
第二。完成此操作的最佳方法您需要一些数据建模。使时间情报工作的唯一方法是拥有一个日期表。该桌子应该在不丢失的情况下每天都有一排。您可以在线搜索如何创建一个或在此处查看我的博客。一旦将此表带入模型上的情况表,您将能够在选定的日期构建该量度。选定的值将是一个值和去年的值。
关键是您需要在没有计算列的情况下为每个客户进行比较。使用Countx或Sumx之类的迭代器可以使用。这使您能够通过"同类"子桌子中的客户循环循环,并通过使用当前迭代中的客户ID来创建销售表的选择,以使用较早的使用者来过滤您的销售表。对于队列中的每个客户,您然后选择他们的最后购买日期,以及在此之前的购买日期,并比较两者,以查看他们是否在一年内遵循。
在dax中看起来有些复杂,但我试图使其具有间隔剂,因此更容易遵循。它还包含一点解决方法,因为您不能简单地循环浏览_ the the the chocor varible,因为在这种情况下,您无法访问当前迭代中的客户ID
One year return =
var _now = TODAY()
var _cohort =
SUMMARIZECOLUMNS (
Sales[CustomerID] ;
FILTER (
Sales ;
DATEDIFF( Sales[SalesDate] ; _now ; YEAR ) <= 1
)
)
var _countCohort = COUNTROWS( _cohort )
var _countReturns =
SUMX (
SUMMARIZECOLUMNS (
Sales[CustomerID] ; FILTER ( Sales ; Sales[CustomerID] IN _cohort )
) ;
var _lastPurchase =
CALCULATE (
MAX ( Sales[SalesDate] ) ;
ALLSELECTED ( Sales ) ;
Sales[CustomerID] = EARLIER( Sales[CustomerID] )
)
var _preLastPurchase =
CALCULATE (
MAX ( Sales[SalesDate] ) ;
ALLSELECTED ( Sales ) ;
Sales[SalesDate] < _lastPurchase ;
Sales[CustomerID] = EARLIER( Sales[CustomerID] )
)
RETURN
IF ( DATEDIFF( _preLastPurchase ; _lastPurchase ; YEAR ) <= 1 ; 1 ; 0 )
)
RETURN
_countReturns / _countCohort
我最终从多维数据集导入数据集并创建计算出的列以使我到达那里。@jelle-hoekstra的答案看起来接近我最终的工作,但我不知道如何让他的措施运行。
我制作了三个计算的列,并对returncustomerid列进行了明显的计数,以获取上一次购买后一年内返回的客户数量:
Last Purchase Date =
MINX (
FILTER (
Sales,
Sales[Sales Year]+1 = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
),
MAXX (
FILTER (
Sales,
Sales[Sales Year] = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
),
Sales[Sales Date]
)
)
One Year Date =
MINX (
FILTER (
Sales,
Sales[Sales Year]+1 = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
),
MAXX (
FILTER (
Sales,
Sales[Sales Year] = EARLIER ( Sales[Sales Year] ) && Sales[CustomerID] = EARLIER ( Sales[CustomerID] )
),
EDATE (Sales[Sales Date], 12 )
)
)
ReturnCustomerID =
IF (
Sales[Sales Date] > Sales[Last Purchase Date] && Sales[Sales Date] < Sales[One Year Date], Sales[CustomerID], BLANK()
)