我有一个表,其中有多个相同的代码,每个代码可以有不同的 id,如下所示
Code | ID
45 | 2
45 | 5
45 | 8
45 | 7
21 | 1
21 | 9
我想计算没有 ID 为 2 或 8 的代码。但是,例如,因为 45 的代码具有 2 或 8 的 id,我想忽略该代码,只给我代码 21,这将是 1 的计数
我试过了
Unsuccessful = CALCULATE(DISTINCTCOUNT('Table'[code]), FILTER('Table', NOT('Table'[ID] in {2,8})))
但是当我希望它是 1 时,上面给了我 2 的计数。如果它已经存在 2 或 8 个代码,我如何忽略该代码?
答案 0 :(得分:1)
您的代码几乎是正确的:
Unsuccessful = CALCULATE(DISTINCTCOUNT('Tables'[code]),FILTER('Tables', NOT(CALCULATETABLE(VALUES('Tables'[Code]), ('Tables'[ID] in {2,8})))))
内部返回我们想要排除的代码。
CALCULATETABLE(VALUES('Tables'[Code]), ('Tables'[ID] in {2,8})
首先考虑内部。 CALCULATETABLE 根据第二个过滤器从第一个参数为我们生成表)。 VALUES('Table'[Code]) -> 从列中生成不同的值列表,因为它记住了来源(更多:这里 https://www.sqlbi.com/?s=lineage)。这部分返回我们找到 ID 2 或 8 的代码(在本例中代码 = 45)。
当我们有要排除的代码列表时,一切都很简单。我们只是将 FILTER 放在 CALCULATE 中。 FILTER 的第一个参数是我们的基表,第二个参数是过滤它的自身。这里我们把表格作为过滤器,因为 Lineage,引擎“知道”数据之间的关系。
答案 1 :(得分:0)