如何将 CALCULATE 与 LOOKUPVALUE 和 USERELATIONSHIP 一起使用

How to use CALCULATE with LOOKUPVALUE and USERELATIONSHIP

我有三个 table,一个暗淡的 table 叫做 "ISO_ccy" 只显示货币的 ISO 首字母缩略词,一个暗淡的 table 显示 "home currency"一个实体 ("entities") 和另一个(事实)table ("trades") 显示外汇 (FX) 交易。外汇交易的问题是,它们总是涉及两种货币 (ccy),因此后者 table 有两列包含货币 ISO 代码(和相应的金额)。两个 dim table 都只有一列带有 ISO ccy 代码(table "ISO_ccy" 仅具有不同的值)。

我现在在 "ISO_ccy" 和 "trades" table 之间有一个货币 1 (ccy1) 的(活动)关系和一个货币 2 (ccy2) 的非活动关系。 "ISO_ccy" 和 "entities" table 之间也存在活跃的关系。

我需要计算每种货币和每个实体的总和,其中货币不等于该实体的 "home currency"。

对于具有活跃关系的 ccy (ccy1) 来说似乎非常简单:

    Sum_Hedges_activeRelation:=
    CALCULATE(
    SUM([Amount_ccy1]);
    FILTER(trades;trades[ccy1]>LOOKUPVALUE(entities[ccy];entities[name];trades[name]))
    )

过滤器表达式确保仅在交易的 ccy 不等于实体的 "home" ccy 的情况下显示金额。

在这里,我得到了想要的结果。

现在我需要对非活动关系 (ccy2) 执行相同的操作。

这是我试过的:

Sum_Hedges_in-activeRelation:=
CALCULATE(
SUM([Amount_ccy2]);
USERELATIONSHIP(trades[ccy2];ISO_ccy[ccy]);
FILTER(trades;trades[ccy2]<>LOOKUPVALUE(entities[ccy];entities[name];trades[name]))
) 

然而,我只得到了 "empty" 结果。

我还尝试将 "ALL(trades)" 添加到 CALCULATE 函数中。那里也没有结果。

所以,我现在有点不知所措,我该如何完成这项工作。你能帮忙吗?


2019 年 4 月 8 日更新解决方案:

我在这里找到了解决问题的办法:

sqlbi: USERELATIONSHIP in a Measure

现在我的论坛是这样的:

Sum_Hedges_in-activeRelation:=
CALCULATE(
 CALCULATE(
 SUM([Amount_ccy2]);
 FILTER(trades;trades[ccy2]
 <>LOOKUPVALUE(entities[ccy];entities[name];trades[name]))
 );
USERELATIONSHIP(trades[ccy2];ISO_ccy[ccy])
)

这与参考文章中提供的解决方案(针对列相关上下文)略有不同,因为我省略了外部 CALCULATE() 中的 ALL() 指令。虽然我无法解释...