在没有合成密钥的情况下使用 Intervalmatch

Using Intervalmatch without a synthetic key

我正在尝试使用 IntervalMatch 函数将下面的两个 table 连接在一起

InvoiceData:
  load Supplier 
  , SupplierName    
  , SupplierValue   
  , Invoice 
  , InvoiceDate 
  , DueDate 
  , OrigInvValue    
  , OrigDiscValue   
  , PaymentReference    
  , PaymentNumber   
  , PostValue   
  , Value   
  , MthInvBal1  
  , MthInvBal2  
  , MthInvBal3  
  , Currency    
  , ConvRate
  , DatabaseName&'.'&Supplier&'.'&Invoice as SupplierInvoice
  , DatabaseName as Company
  ;

  SQL Select ****;

CurrencyRates:
Load date(floor([StartDateTime])) as [StartDate]
    ,date(floor([EndDateTime])) as [EndDate]
    ,[Currency] as BaseCurrency
    ,[CADDivision]
    ,[CHFDivision]
    ,[EURDivision]
    ,[GBPDivision]
    ,[JPYDivision]
    ,[USDDivision]
    ,[CADMultiply]
    ,[CHFMultiply]
    ,[EURMultiply]
    ,[GBPMultiply]
    ,[JPYMultiply]
    ,[USDMultiply];
SQL SELECT [CR].[StartDateTime]
     , [CR].[EndDateTime]
     , [CR].[Currency]
     , [CR].[CADDivision]
     , [CR].[CHFDivision]
     , [CR].[EURDivision]
     , [CR].[GBPDivision]
     , [CR].[JPYDivision]
     , [CR].[USDDivision]
     , [CR].[CADMultiply]
     , [CR].[CHFMultiply]
     , [CR].[EURMultiply]
     , [CR].[GBPMultiply]
     , [CR].[JPYMultiply]
     , [CR].[USDMultiply]
FROM [Lookups].[CurrencyRates] [CR];

IntervalMatch:
IntervalMatch (InvoiceDate)
Load distinct [StartDate],[EndDate] Resident CurrencyRates;

通过阅读文献,我认为 table 间隔匹配和汇率之间不应该是合成键,但是,我的数据模型仍然显示这一点。这是正确的吗?

每当任何两个表与一个以上的字段(在您的例子中是 StartDateTime 和 EndDateTime)链接时,您都会得到一个合成键。

查看 Qlik 设计博客 (https://community.qlik.com/blogs/qlikviewdesignblog/2013/04/04/intervalmatch) 上 Henric Cronström 的文章,您可以读到:

Further, the data model contains a composite key (the FromDate and ToDate fields) which will manifest itself as a QlikView synthetic key. But have no fear. This synthetic key should be there; not only is it correct, but it is also optimal given the data model. You do not need to remove it.

所以你得到那个合成密钥似乎很自然。