PowerBI_logic变量的操作

PowerBI_logic operation of variables

我有一个数据框“test”,如下:

ID  city  quality  year
1   NY    special  2020
2   NY    special  2020
3   NY    special  2020
4   NY    special  2020
5   NY    normal   2020
6   PA    special  2020
1   NY    special  2019
2   NY    special  2019
3   NY    normal   2019
4   BJ    normal   2019
5   BJ    normal   2019
6   PA    normal   2019

我想给每个ID一个值:如果一个ID在“2020”的“NY”中是新的“special”,则该值为1,否则为0。所以这两个ID被赋予1:3 , 4;所有其他人都给0.

我从 PowerBI 中的以下内容开始:

NY_new special_2020 = 
VAR
  NY_special_2020 = FILTER('test', 'test'[year] = "2020" && 'test'[city]= "NY" && test[quality] = "special")

VAR
  NY_special_2019 = FILTER('test', 'test'[year] = "2019" && 'test'[city]= "NY" && test[quality] = "special")

我的问题是如何组合这两个变量以仅保留 NY_special_2020 中的变量,而不保留 NY_special_2019 中的变量?

非常感谢!

您可以使用以下措施来实现所需的输出-

new_special = 

var current_id = MIN(your_table_name[ID])
var current_year = MIN(your_table_name[year])

var count_previous_special = 
CALCULATE(
    COUNT(your_table_name[quality]),
    FILTER(
        ALL(your_table_name),
        your_table_name[ID] = current_id
        && your_table_name[year] < current_year
        && your_table_name[quality] = "special"
        && your_table_name[city] = "NY"
    )
)

RETURN 
IF(
    MIN(your_table_name[city]) = "NY" && MIN(your_table_name[quality]) = "special",
    IF(count_previous_special >= 1, 0,1),
    0
)

这也将 return 2019 年为 0 或 1,如下所示。但是,如果您只希望 2020 年为 0/1,则可以向 IF 条件添加额外的过滤器。

输出-

试试下面的代码,仅比较 2020 年和 2019 年-

new_special_2 = 

var current_id = MIN(your_table_name[ID])
var current_year = MIN(your_table_name[year])

var count_previous_special = 
CALCULATE(
    COUNT(your_table_name[quality]),
    FILTER(
        ALL(your_table_name),
        your_table_name[ID] = current_id
            && your_table_name[year] < current_year
            && your_table_name[quality] = "special"
            && your_table_name[city] = "NY"
            && your_table_name[year] = 2019
    )
)

RETURN 
IF(
    MIN(your_table_name[city]) = "NY" 
        && MIN(your_table_name[quality]) = "special"
        && MIN(your_table_name[year]) = 2020,
    IF(
        count_previous_special >= 1, 
        0,
        1
    ),
    0
)