如何将 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() 指令。虽然我无法解释...
我有三个 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() 指令。虽然我无法解释...