按时间顺序获取 table 中的下一个条目
Get chronologically next entry in a table
我有一个 table 包含事件数据,这些数据与客户相关并按时间顺序显示。相关字段是 EventID(唯一键)、CustomerID(每个客户唯一的)、EventType 和 EventDate。
我现在想添加一个计算列,如果某个事件发生在另一个事件之后,该列将显示。比如说,如果在 "Purchase" 类型的事件之后,在第一个事件之后(根据 EventDate)还发生了针对同一 customerID 的 "Payment Received" 类型的事件。
在 Excel 中,我现在设置了一个 vlookup,但据我所知,PowerPivot 中没有此类功能。我还尝试拆分 tables 以通过 RELATED()
获取相关事件,但由于生成的关系是多对多的,因此我从 PowerPivot 收到错误消息。
有没有办法在 PowerPivot 中执行此操作? (如果可以解决问题,我也可以事先在 Power Query 中操作数据。)
编辑:我找到了涉及 SQL 的问题的解决方案。不过,如果可能的话,我仍然对直接在 PowerPivot 中的解决方案感兴趣。
涉及在通过 SQL 加载数据时转换数据的解决方案。
SELECT TOP 1 WITH TIES ev.*
,results.EventType
,results.EventDate
FROM CustomerEvents ev
LEFT JOIN (SELECT CustomerID
EventType
EventDate
FROM CustomerEvents
WHERE EventType = 'Payment received' or EV_EventCode = 'Payment not received') as payments
ON payments.CustomerID = ev.CustomerID
AND payments.EventDate > ev.EventDate
WHERE EventType = 'Purchase'
ORDER BY ROW_NUMBER() over (PARTITION BY EventID ORDER BY payments.EventDate ASC)
Order By payments.EventDate Asc
这样我就可以在购买事件之后获得最早的事件日期,然后通过 TOP 1
过滤掉该日期,防止我不小心将付款事件排序为比实际购买时间早得多的购买事件用于。
我有一个 table 包含事件数据,这些数据与客户相关并按时间顺序显示。相关字段是 EventID(唯一键)、CustomerID(每个客户唯一的)、EventType 和 EventDate。
我现在想添加一个计算列,如果某个事件发生在另一个事件之后,该列将显示。比如说,如果在 "Purchase" 类型的事件之后,在第一个事件之后(根据 EventDate)还发生了针对同一 customerID 的 "Payment Received" 类型的事件。
在 Excel 中,我现在设置了一个 vlookup,但据我所知,PowerPivot 中没有此类功能。我还尝试拆分 tables 以通过 RELATED()
获取相关事件,但由于生成的关系是多对多的,因此我从 PowerPivot 收到错误消息。
有没有办法在 PowerPivot 中执行此操作? (如果可以解决问题,我也可以事先在 Power Query 中操作数据。)
编辑:我找到了涉及 SQL 的问题的解决方案。不过,如果可能的话,我仍然对直接在 PowerPivot 中的解决方案感兴趣。
涉及在通过 SQL 加载数据时转换数据的解决方案。
SELECT TOP 1 WITH TIES ev.*
,results.EventType
,results.EventDate
FROM CustomerEvents ev
LEFT JOIN (SELECT CustomerID
EventType
EventDate
FROM CustomerEvents
WHERE EventType = 'Payment received' or EV_EventCode = 'Payment not received') as payments
ON payments.CustomerID = ev.CustomerID
AND payments.EventDate > ev.EventDate
WHERE EventType = 'Purchase'
ORDER BY ROW_NUMBER() over (PARTITION BY EventID ORDER BY payments.EventDate ASC)
Order By payments.EventDate Asc
这样我就可以在购买事件之后获得最早的事件日期,然后通过 TOP 1
过滤掉该日期,防止我不小心将付款事件排序为比实际购买时间早得多的购买事件用于。