Qlik新手咨询:交易表关联客户/账户表用星型Schema、Join还是ApplyMap
Qlik交易表动态关联客户/账户表解决方案
你当前的场景属于动态外键匹配场景,优先选用ApplyMap映射方案,逻辑简单不易触发合成键、循环关联等常见Qlik模型问题,学习成本和维护成本都更低。
方案1:ApplyMap映射(首推)
步骤1:预加载维度表生成映射表
// 生成客户ID-客户名称映射表,可扩展添加更多需要的客户属性 Map_Cust: Mapping LOAD CustID, CustName FROM [你的qvd文件存储路径/Customers.qvd] (qvd); // 生成账户ID-账户号映射表,可扩展添加更多需要的账户属性 Map_Acct: Mapping LOAD AcctID, AcctNum FROM [你的qvd文件存储路径/Accounts.qvd] (qvd);
步骤2:加载交易表,按类型匹配维度属性
Transactions: LOAD TxnID, SourcePartyTypeID, DestPartyTypeID, SourcePartyType, DestinationPartyType, ConductorID, // 匹配源参与方属性 IF(SourcePartyType = 'C', ApplyMap('Map_Cust', SourcePartyTypeID, NULL()), NULL()) AS SourceCustName, IF(SourcePartyType = 'A', ApplyMap('Map_Acct', SourcePartyTypeID, NULL()), NULL()) AS SourceAcctNum, // 匹配目标参与方属性 IF(DestinationPartyType = 'C', ApplyMap('Map_Cust', DestPartyTypeID, NULL()), NULL()) AS DestCustName, IF(DestinationPartyType = 'A', ApplyMap('Map_Acct', DestPartyTypeID, NULL()), NULL()) AS DestAcctNum FROM [你的qvd文件存储路径/Transactions.qvd] (qvd);
该方案优势
- 最终模型为单事实表带全量业务属性,属于轻量星型模型,无额外关联逻辑,入门用户不易踩坑
ApplyMap为内存哈希匹配,性能远高于表关联操作,大数据量下优势明显- 字段规则独立,后续新增维度属性、调整匹配逻辑的改动成本极低
- 自动兼容空值场景,Source/DestinationType为NULL时不会生成错误匹配的属性
方案2:Link Table通用键关联
如果需要保留客户、账户维度表的独立结构(比如维度字段超过10个,全部映射到事实表会导致事实表过宽),可以使用该方案,核心思路是生成统一通用键做跨表关联:
步骤1:给维度表添加通用键
Customers: LOAD *, 'C_'&CustID AS GenericKey FROM [你的qvd文件存储路径/Customers.qvd] (qvd); Accounts: LOAD *, 'A_'&AcctID AS GenericKey FROM [你的qvd文件存储路径/Accounts.qvd] (qvd);
步骤2:生成关联用的Link Table
// 先加载交易表原始字段 Transactions: LOAD TxnID, SourcePartyTypeID, DestPartyTypeID, SourcePartyType, DestinationPartyType, ConductorID FROM [你的qvd文件存储路径/Transactions.qvd] (qvd); // 生成关联桥接表 Link_Table: LOAD TxnID, 'Source' AS PartyRole, SourcePartyType&'_'&SourcePartyTypeID AS GenericKey RESIDENT Transactions WHERE LEN(TRIM(SourcePartyType))>0 AND LEN(TRIM(SourcePartyTypeID))>0; LOAD TxnID, 'Destination' AS PartyRole, DestinationPartyType&'_'&DestPartyTypeID AS GenericKey RESIDENT Transactions WHERE LEN(TRIM(DestinationPartyType))>0 AND LEN(TRIM(DestPartyTypeID))>0;
该方案维度表保持独立,适合维度属性多、需要灵活做维度分析的场景,但需要注意避免交易记录重复计数的问题,入门用户可以优先熟练方案1后再尝试该方案。
内容的提问来源于stack exchange,提问作者Pinepenny
相关产品推荐
相关产品推荐

