根据一个 table 中的存在和另一个中的不存在进行过滤

Filter based on existence in one table and non-existence in another

我有以下数据模型:

记录: Id, ..., CreateDate

FactA: RecordId, CreateDate

FactB: RecordId, CreateDate

存在从 FactA 到 Record 和 FactB 到 Record 的关系。

我已经在这样的记录上写过没有问题的措施:

FactA's:=CALCULATE(DISTINCTCOUNT(Records[Id]), FactA)
FactB's:=CALCULATE(DISTINCTCOUNT(Records[Id]), FactB)

现在我想计算带有 FactA 但没有 FactB 的记录,在 SQL 我会做一个 LEFT JOIN WHERE FactB.RecordId IS NULL 但我不知道如何做类似的达克斯。我试过:

 -- this returns blank, presumably because when there is a FactB then RecordId isn't blank, and when there is no Fact B then RecordId a NULL which isn't blank either
FactA_No_FactB:=CALCULATE(DISTINCTCOUNT(Records[Id]), FactA, FILTER(FactB, ISBLANK([RecordId])))

-- this returns the long "The value for columns "RecordId" in table "FactB" cannot be determined in the current context" error.
FactA_No_FactB:=CALCULATE(DISTINCTCOUNT(Records[Id]), FILTER(FactA, ISBLANK(FactB[RecordId])))

我也尝试过各种使用 RELATEDRELATEDTABLE 的方法,但我对 DAX 和上下文的了解还不够,不知道我在做什么。

有人可以解释我如何编写计算度量来计算具有 FactA 而没有 FactB 的记录吗?

提前致谢。

编辑 - 解决方法

我想到了这个,到目前为止它看起来是正确的,但我不确定这是否是通常正确的方法:

-- Take the count with FactA and subtract the count of (FactA and FactB)
FactA_No_FactB:=CALCULATE(DISTINCTCOUNT(Records[Id]), FactA) - CALCULATE(DISTINCTCOUNT(Records[Id]), FactA, FactB)

这里有一个替代方法,可能仍然不是最好的方法:

FactA_No_FactB:=CALCULATE(DISTINCTCOUNT(Records[ID]), FILTER(Records,CONTAINS(FactA, FactA[RecordID],Records[ID]) && NOT(CONTAINS(FactB,FactB[RecordID],Records[ID]))))

我的版本和你的不同之处在于,我的 returns 和 A 中的那些项的值为 1,但 B 中的那些项的值为 1,其他所有项的值为 BLANK。您的版本 returns A 中的那些项目为 1 而 B 中没有,A 和 B 中的项目为 0,其他所有项目为 BLANK。根据您的用例,一个结果可能优于另一个。