powerbi - DAX 测量计算一年滑动窗口内新购买客户的百分比
问题描述
我需要一个衡量标准,它可以让我知道在一个日历年内,在上次购买后一年内有新购买的客户的百分比。
通常我只会创建一个计算列,该列捕获每个客户每年最后一次购买的日期,然后检查给定年份的每个客户是否在他们各自的最后日期的一年内有任何购买,然后总结这些,但我正在使用与多维数据集的实时连接,无法创建计算列。
这是我正在寻找的一些伪代码:
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
主要困难是我需要为每个客户设置不同的时间窗口,但无法制作计算列。我一直在考虑使用 EARLIER 或 DATESBETWEEN 或 PARALLELPERIOD,但到目前为止还没有让它们中的任何一个工作。
解决方案
关键在于,您需要在没有计算列的情况下对每个客户进行比较。可以通过使用 COUNTX 或 SUMX 之类的迭代器来实现。这使您能够遍历同类群组子表中的客户,并通过使用当前迭代中的客户 ID 创建销售表的选择,以使用 EARLIER 过滤您的销售表。然后,对于群组中的每个客户,您可以选择他们的最后购买日期和之前的购买日期,然后比较这两个日期,看看他们是否在一年内跟进。
在 DAX 中,它看起来有点复杂,但我试图让它更宽敞,以便更容易理解。它还包含一些解决方法,即您不能简单地循环 _cohort 变量,因为在这种情况下,您将无法在当前迭代中访问客户 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
推荐阅读
- c++ - 查找两者之间的两个数字的正则表达式的匹配
- sql-server - 数据库大小超过 10GB 时的 SQL Server Enterprise 超时异常
- database - 在 for 循环中使用 db 连接时内存泄漏
- python-3.x - 在 python selenium 中使用 send_key() 函数时出现错误“ElementNotInteractableException:消息:元素不可交互”
- node.js - 码头工人之间的redis和nodejs连接问题
- racket - 收集列表中的值
- http - 域转发:重定向到专用网络中的站点
- mysql - 如何在 Ubuntu 中访问 Mysql?
- django - Django 模板 - 按块生成和保存 XML 文件(以节省 RAM)
- javascript - 出现错误无法将属性“innerHTML”设置为空?