无ID列CSV用户交互数据如何分配交互唯一ID,用Power Query还是DAX实现?
交互ID分配实现方案
两种实现路径对比
这个需求Power Query和DAX都可以实现,具体选择看你的使用场景:
优先推荐Power Query实现(数据清洗阶段固化ID)
你之前分组失败的核心原因是没有先标记交互的起止边界,按以下步骤操作即可:
- 第一步:先将全表按
用户、操作时间升序排序,保证流程的先后顺序正确 - 第二步:添加全局递增的索引列,用于跨行判断上下文
- 第三步:添加自定义列标记交互起始行,判断逻辑为:当前行是对应用户的第一条数据,或者上一行属于上一个交互的结束步骤,则标记为
1,否则标记为0 - 第四步:对起始标记列做累加求和,同一交互的所有行累加值一致,拼接用户标识后就是唯一的交互ID,不会出现同类型流程合并的问题
DAX实现(适合动态计算场景)
如果是直连模式,或者需要灵活调整交互边界规则,可以用DAX计算列实现,示例代码如下:
交互ID = VAR CurrentUser = '行为表'[用户] VAR CurrentIndex = '行为表'[索引] // 统计当前行之前属于同一用户的交互起始次数 VAR StartCount = COUNTROWS( FILTER( '行为表', '行为表'[用户] = CurrentUser && '行为表'[索引] <= CurrentIndex && '行为表'[是否交互起始] = 1 ) ) RETURN CurrentUser & "_" & StartCount
选型建议
- 如果是导入模式,后续不需要频繁调整交互划分规则,优先用Power Query实现,计算在数据加载阶段完成,可降低模型运行时的计算压力
- 如果需要动态调整交互判断逻辑、或者使用直连模式无法在Power Query阶段处理,再选择DAX实现
内容的提问来源于stack exchange,提问作者Luis Moran
相关产品推荐
相关产品推荐

