admin 管理员组

文章数量: 1086019


2024年3月19日发(作者:sql课程用什么数据类型)

在利用

Power BI

进行数据整理时,某些情况下会需要比较来自不同表单中的两列值是否相同。例如在下例中需要

比较一下

Sales-1

Sales-2

两张表中的

Customer Number

是否有相同值。

要解决该问题可以利用

DAX

CALCULATE

COUNTROWS

函数进行。可以在

Sales-2

的表单中新建一个计算

列,比较一下

Sales-1

Sales-2

中的

Customer Number

值,如果

Sales-2

中的

Customer Number

Sales-1

中也存

在,就标记为

TRUE

,如果没有就标记为

FALSE

。使用公式如下:

Matched = CALCULATE(COUNTROWS('Sales-1'),FILTER('Sales-1','Sales-1'[Customer number]='Sales-2'[Customer number

这个公式当中调用

CALCULATE

函数的目的是需要对数据进行重新筛选,以便比较两个列当中是否有相同值。这

个筛选条件是在

FILTER

函数中进行定义的,过滤对象是

Sales-1

表单,过滤条件是

’Sales-1’[Customer

number]=’Sales-2’[Customer number]

。过滤之后的新

Sales-1

表单,会被带入到

COUNTROWS

中进行计算,看看

一共有多少行,之后再与

0

进行比较。大于

0

就表明两个表单有相同数据,小于等于

0

则没有。

Filter

函数中具体的执行过程是,基于计算列的特性,将当前表

Sales-2

中的

Customer number

一个一个拿出来去

Sales-1

表单中去跟

Customer number

列作比对,当有相同值时,当前行就会被取出用于构成新的表单,如果没有

匹配值,会返回空值

(blank)

。对于

Countrows

函数来说,当传入的数据是空值时,计算返回结果也是空值。而根

DAX

对空值的处理逻辑,此处会将空值按照数字

0

进行计算,因此通过简单的与

0

做比较即可判断两组数据是否

匹配。

按照这一思路,如果要比较当前

Sales-2

表中的

Sales ID

Customer number

两列数据与相对应的

Sales-1

表是否相

同,也比较简单。可以在

Filter

函数中调用

If

函数做一个简单的判断处理。

MatchedTwoColumn-1 = CALCULATE(COUNTROWS('Sales-1'),FILTER('Sales-1',IF('Sales-1'[Customer number]='Sales-2'

当然,如果觉得用

If

嵌套麻烦也可以改成用

Switch

重写一下。

MatchedTwoColumn-2 = CALCULATE(COUNTROWS('Sales-1'),FILTER('Sales-1',SWITCH('Sales-1'[Customer number]='Sales-2

此外,如果要比较的两列可以形成

1

对多的关联关系,还可以利用之前

blog

介绍的

Relationship

函数来判断两列的

相同值有哪些。


本文标签: 表单 数据 进行 计算 空值