DAX:在 Power BI 中筛选、分组和计数不同的值

时间:2021-04-16 06:02:30

标签: powerbi dax

如何按 Category = Animal 过滤表,然后按类分组,并计算每个组的不同 id?

到目前为止,我只能分组并计算不同的值:

output = SUMMARIZE(my_table, my_table[Class], "Distinct Count", DISTINCTCOUNT(my_table[Id]))

我试过了:

output = CALCULATETABLE(SUMMARIZE(my_table, my_table[Class]), DISTINCTCOUNT(my_table[Id]), FILTER(my_table, my_table[Category ] = "Animal"))

发现错误:

The True/False expression does not specify a column. Each True/False expressions used as a table filter expression must refer to exactly one column.

我也尝试了这个 post 建议的方式,但它只计算表中的行数,而不是 Id 的不同数量。

2 个答案:

答案 0 :(得分:1)

试试这个:

output =
SUMMARIZECOLUMNS (
    my_table[Class],
    TREATAS ( { "Animal" }, my_table[Category] ),
    "Distinct Count", DISTINCTCOUNT ( my_table[Id] )
)

另一种选择:

output =
CALCULATETABLE (
    ADDCOLUMNS (
        VALUES ( my_table[Class] ),
        "Distinct ID", CALCULATE ( DISTINCTCOUNT ( my_table[Id] ) )
    ),
    my_table[Category ] = "Animal"
)

SUMMARIZECOLUMNS 版本通常是一种优化的代码编写方式,因此您应该更喜欢这种方式。我仅出于学习目的加入了 ADDCOLUMNS/CALCULATETABLE 结构。

答案 1 :(得分:1)

看看这个:Filter SUMMARIZECOLUMNS

您以这种方式过滤:

VAR  __MyFilterTable = FILTER( ALL(T[category]), T[category] = "animal" ) 

RETURN
SUMMARIZECOLUMNS (
    T[category],
    __MyFilterTable
)

或者更短:

VAR  __MyFilterTable = TREATAS ({"animal"}, T[category] )

RETURN
SUMMARIZECOLUMNS (
    T[category],
    __MyFilterTable
)