Power BI中首列无匹配时如何关联另一列获取准确交易数据?
解决会员双ID交易统计不准确问题
我有两张表:MEMBER_DATA(会员数据表)和TXN_TABLE(交易表)。会员存在两类ID:面向会员的8888开头ID,以及内部使用的7777开头ID,同一会员的两类ID通过LINKED_ID关联。目前仅统计MEMBER_TYPE为REGULAR的会员交易,但TXN_TABLE有时会用7777开头的ID记录交易,导致统计结果遗漏部分数据。
已将MEMBER_DATA转换为TRANSFORMED_MEMBER_DATA表,新增了MEMBER_ID2字段存储对应内部ID。现需实现:当TXN_TABLE的MEMBER_ID与TRANSFORMED_MEMBER_DATA的MEMBER_ID1不匹配时,通过MEMBER_ID2关联,从而得到准确的交易统计结果。
示例表结构及数据
MEMBER_DATA表
| MEMBER_ID | LINKED_ID | FNAME | LNAME | MEMBER_TYPE | TIER |
|---|---|---|---|---|---|
| 8888-1234 | X1234 | JOHN | SMITH | REGULAR | - |
| 7777-3333 | X1234 | JOHN | SMITH | - | GOLD |
| 8888-6666 | X0993 | HANNA | MONTANA | REGULAR | - |
| 7777-9999 | X0993 | HANNA | MONTANA | - | PLATINUM |
TXN_TABLE表
| MEMBER_ID | TXN_COUNT | AMOUNT |
|---|---|---|
| 8888-1234 | 1 | 3 |
| 8888-6666 | 2 | 4 |
| 7777-9999 | 2 | 2 |
当前不准确统计结果
| MEMBER_TYPE | MEMBER_ID | TXN_COUNT |
|---|---|---|
| REGULAR | 8888-1234 | 1 |
| REGULAR | 8888-6666 | 2 |
转换后的TRANSFORMED_MEMBER_DATA表
| MEMBER_ID1 | LINKED_ID | FNAME | LNAME | MEMBER_TYPE | TIER | MEMBER_ID2 | TIER |
|---|---|---|---|---|---|---|---|
| 8888-1234 | X1234 | JOHN | SMITH | REGULAR | - | 7777-3333 | GOLD |
| 7777-3333 | X1234 | JOHN | SMITH | - | GOLD | - | - |
| 8888-6666 | X0993 | HANNA | MONTANA | REGULAR | - | 7777-9999 | PLATINUM |
| 7777-9999 | X0993 | HANNA | MONTANA | - | PLATINUM | - | - |
预期准确统计结果
| MEMBER_TYPE | MEMBER_ID | TXN_COUNT | TIER |
|---|---|---|---|
| REGULAR | 8888-1234 | 1 | GOLD |
| REGULAR | 8888-6666 | 4 | PLATINUM |
解决方案
核心思路:先筛选出MEMBER_TYPE为REGULAR的会员记录,再通过OR条件关联交易表,同时匹配MEMBER_ID1和MEMBER_ID2,最后按会员维度聚合统计交易总数。
以下是SQL实现(标准SQL语法,不同数据库可微调):
SELECT tmd.MEMBER_TYPE, tmd.MEMBER_ID1 AS MEMBER_ID, COALESCE(SUM(txn.TXN_COUNT), 0) AS TXN_COUNT, tmd.TIER AS TIER FROM TRANSFORMED_MEMBER_DATA tmd LEFT JOIN TXN_TABLE txn ON txn.MEMBER_ID = tmd.MEMBER_ID1 OR txn.MEMBER_ID = tmd.MEMBER_ID2 WHERE tmd.MEMBER_TYPE = 'REGULAR' GROUP BY tmd.MEMBER_TYPE, tmd.MEMBER_ID1, tmd.TIER ORDER BY tmd.MEMBER_ID1;
代码说明
- 筛选目标会员:通过
WHERE子句仅保留REGULAR类型的会员; - 双ID关联逻辑:
LEFT JOIN的关联条件同时覆盖对外ID(MEMBER_ID1)和内部ID(MEMBER_ID2),确保所有关联交易都被匹配; - 交易统计处理:用
SUM计算总交易数,COALESCE处理无交易的会员(返回0而非NULL); - 分组展示:按会员类型、对外ID和等级分组,匹配预期结果的展示维度。
内容的提问来源于stack exchange,提问作者bixby
相关产品推荐
相关产品推荐

