【问题标题】:how to create a measure that filters 2 tables如何创建过滤 2 个表的度量
【发布时间】:2020-10-29 18:15:26
【问题描述】:

我在 power bi 中有以下两个表,它们共享多对多关系。

表1

code | Name | QuestionID
11   | Test |123
12   | Test |123

表 2

Code | Name | Answer | Compliant| QuestionID
11   |Test  | Yes    | 1        |123
12   |Test  | Yes    | 1        |123
458  |Test2 | NO     | 0        |256
678  |Test3 | Yes    | 0        |000

如您在表 1 中看到的,有一个 QuestionId 和代码,在表 2 中它们也是一个匹配的 QuestionID 和代码

我只想计算表 2 中问题 ID 的一个答案,其中问题 ID 和代码存在于表 1 中

如您所见,他们为 QuestionID 123 回答了两个问题,但我只想将其视为一个答案的计数。(请注意,对于同一个问题,他们可以是多个答案)

我不知道如何过滤这两个表。

这是我尝试过的

Measure =
CALCULATE (
    COUNT ( 'Table 2'[Answer] ),
    FILTER ( 'Table1', 'Table1'[Code] = 'Table 2'[code] )
        && 'Table 2'[Compliant] = 1
)

但这在 FILTER 上不起作用,因为在加入表 2 时它会中断,因为它不喜欢第二个表。

【问题讨论】:

  • 关系在哪一列,过滤的方向是什么?你在哪里使用度量?如果它在视觉中,您将哪些表列用于哪些字段?

标签: powerbi dax powerbi-desktop measure


【解决方案1】:

它不希望有这样的表 2 列引用,因为列通常不止一行。这可能会起作用:

Measure =
CALCULATE (
    COUNT ( 'Table 2'[Answer] ),
    FILTER (
        'Table 2',
        'Table 2'[Code] IN VALUES ( 'Table1'[code] )
            && 'Table 2'[Compliant] = 1
    )
) + 0

该关系应该处理 Table2 上的 Table1 过滤。因此,您应该可以通过将 Table1 用作过滤表来更简单地编写它,如下所示:

Measure =
CALCULATE (
    COUNT ( 'Table 2'[Answer] ),
    'Table1',
    FILTER ( 'Table 2', 'Table 2'[Compliant] = 1 )
) + 0

(在这两种情况下,+ 0 都会返回零而不是空白。如果您更喜欢空白,可以将其删除。)

【讨论】:

  • 我的表关系从 1 变为多到,现在多到多......他们是我可以过滤代码的一种方式,就像你在上面展示的那样,表 1 中的两列与表 2 匹配,这样我就可以只计算一个与多个相同代码相关的答案
  • 您要匹配的条件是什么,究竟是什么?
  • 我现在有一个额外的列,称为 questionID,所以我想从表 2 中检查代码和 questionID 是否与表 1 中的代码和 questionID 匹配,然后只计算 1 个答案
  • 尝试将&& 改为逗号。您正在使用布尔值对表进行与运算。
【解决方案2】:

如果我理解正确,您的问题会变成这样:我想计算两个表上存在的所有不同的问题 ID。

所以试试这个措施

CALCULATE(
    DISTINCTCOUNT(Table2[questionId]),  
    FILTER(
        Table2,
        RELATED(Table1[questionId])
    )
)

有点离题,但我建议即使在 power bi 上也使用表之间的多对多关系。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 2021-03-31
    • 1970-01-01
    • 2019-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多