我需要在DAX中建立一个公式,它将显示首次购买后再次购买的客户数量,按产品细分。我有一个标准的数据仓库,其中包含一个Order Placed事实表、一个Customer维度表和一个Product维度表。通过使用以下公式,我可以找到在首次购买时购买了每个产品的客户数量:
First Purchase Customer Count = CALCULATE(DISTINCTCOUNT(Demand[CustomerKey]),Demand[Customer Order Sequence Number] = 1)我的视觉效果是一个表,其中Product是唯一的属性,所以第一个公式是按Product计算的。下一个公式需要计算第二次购买的客户数量,而不管他们第二次购买的是什么产品,但它应该只包括第一次购买当前产品的客户。我已经成功地创建了这个公式,但它通常会在1M行限制时出错,除非我按子类别过滤Product。
Rebuyer Count = COUNTROWS(INTERSECT(SUMMARIZE(FILTER(Demand,Demand[Customer Order Sequence Number] = 1),[CustomerKey]),SUMMARIZE(CALCULATETABLE(FILTER(Demand,Demand[Customer Order Sequence Number] = 2),all('Product')),[CustomerKey])))我怎样才能改进这个公式,使它在运行时不会爆炸?
发布于 2017-08-01 03:51:42
老问题,但对于您来说,这仍然是一个问题,您是否查看了DaxPatterns.com上的新客户和返回客户模式?http://www.daxpatterns.com/new-and-returning-customers/
您的returning解决方案是创建一个包含首次客户的表,然后创建一个包含第二次客户的表,然后将这两个表连接在一起,以计算同时也是第二次客户的首次客户的数量。
DaxPatterns解决方案略有不同。它不是即时计算2个潜在的大型客户表,然后加入它们,而是计算以前购买过的现有客户。
您需要调整他们的解决方案以满足您的需求。他们有绝对回头客的概念(这意味着客户的第一次购买是为了任何产品,第二次购买是为了你关心的特定产品)。您需要的是相反的情况(客户的第一次购买是针对特定产品的,第二次购买可以是任何产品)。
然而,总的来说,如果你从第一次客户的单一列表开始,过滤掉你不想要的客户(即那些再也没有购买过的客户),那么与汇编两个单独的客户列表并将它们相交相比,你会有更少的爆炸。
(这是让每个人都进入剧院,然后把没有票的人都赶出去,与在门口检票,只让有票的人进来的区别)。
https://stackoverflow.com/questions/41989210
复制相似问题