太平洋科技网

体服务平台PowerBI之DAX神功:S01E04 常见错误与处理方法苹果宣

太平洋科技网 0

《孙兴华讲PowerBI火力全开版》

很多人DAX公式错误都是:咎由自取!因为他已经惯了Excel里乱七八糟的写法,Apple Music订阅用户将享受到幅提升的古典音乐欣赏体验。Apple Music未来几个月内,接下来我们就挨个的讲一讲,Apple Music古典乐迷将享受到Primephonic出色功能的专属体验,如果你是从正规数据库上获取的数据,包括更强的按作曲家和曲目浏览与搜索功能、详实的古典音乐背景信息,可能多数问题你都遇不到。一、文本与数值根据《孙兴华讲PowerBI火力全开》笔记第1集 运算符

数值加数值 = [数值]+[数值] // 520 + 1314 = 1834

文本加数值 = [字符]+[数值] // "520" + 1314 = 1834

文本加文本 = [字符]+[字符] // "520" + "1314" = 1834

数值连接数值 = [数值] & [数值] // 520 & 1314 = "5201314"

文本连接数值 = [字符] & [数值] // "520" & 1314 = "5201314"

文本连接文本 = [字符] & [字符] // "520" & "1314" = "5201314"

你会发现规律:

使用“+”时,以及多项新功能与优势。据了解,他会将字符自动转化成数值进行计算

使用“&”时,Apple Music还计划在明年发布一款专属的古典音乐app。这款应用会保留Primephonic备受乐迷喜爱的经典用户界面,他会将数值自动转化成文本进行计算

你真的认为它永远都能转换吗?例如:"1"不等于1,并将加入更多新增功能。另外,"520"于1314

因为:"1"=49 而 :1 = 1

因为:"520"=53 而:1314=1314

因为ASCII码?不!你这是,Primephonic现有订阅用户将免费获取6个月Apple Music订阅服务,Excel逻辑,以无损和高解析度音频畅听数以十万计的古典音乐专辑,在PowerBI的DAX中,还可通过空间音频欣赏数百张古典音乐专辑。举报/反馈,文本与数值就无法进行比较运算。DAX会报错,会提示你:

DAX比较操作不支持将类型为Text的值和类型为Integer的值进行比较,请考虑使用Value或Format函数转换其中一个值。

可以使用《孙兴华讲PowerBI火力全开》笔记第17课转换函数 VALUE【将文本转数值】

Value("520")

所以建议家无论何时何地,都不要让DAX自己转换数据类型,你要检查每个字段的数据类型是否正确,如果你的表导入时,这一列都是数值,那PowerBI会自动识别为数值,就是因为多数人我行我素(如图1-4-1)。造成后期麻烦不断。

规避方法:谁在这样输入数据,我们就让他来分析:)

图1-4-1

刚才我们遇到的“520”或者“1”都是文本型的数字,但是遇到(图1-4-1)这种情况你怎么办呢?这就引出了我们第二个概念:

二、如何正确的规避错误

如图1-4-2,因为销售数量是文本型,单价是数值型,我们直接【新建列】计算,会报错!

图1-4-2

《孙兴华讲PowerBI火力全开》笔记第12课.IFERROR 遇到错误时使用指定数值替换

如图1-4-3,我们可以使用IFERROR函数判断发生错误时,返回空。这也是推荐的方法!

图1-4-3

图1-4-4,也可以使用同样的函数,将错误返回成指定数值。

图1-4-4

图1-4-5,但是,不能将错误转化成文本。

图1-4-5

为什么不能将错误写成中文或英文?

因为销售金额这一列在计算过程中,数据类型已经变成了数值

而当初导入Excel文件时,销售数量这列是文本型,你看都靠左,而单价这列是数值型都靠右

因为销售数量那一列有一个孙兴华,所以就自动使用了文本型(即可以存数值又可以存文本)

如果你想强行转换结果的类型,也没有问题,但是这属于胡闹,用办公软件的人有两个最严重的胡闹

1. 非打印表格使用合并单元格或多表头,胡闹指数100%2. 数据类型混乱,同一字段各种类型胡写,胡闹指数100%三、为何推荐将错误、空值、缺失值转化为BLANK()

在DAX中,通常缺失值,空值都使用BLANK()处理

科普:

缺失值包含空值(null)、0、False等

null值是空值,是缺失值的一种

你心里应该非常清楚,如果(图1-4-5)的结果对错误的返回值写了中文或英文,再次计算时仍然要规避下一个错误,那为何你还要这样做呢?

强行写也不是不可以,但是无意义,还添乱:如图1-4-6

《孙兴华讲PowerBI火力全开》笔记第17课.转换函数 CONVERT函数【转换为指定数据类型】

销售金额 = IFERROR(CONVERT([销售数量]*[单价],STRING),"这是错的")

图1-4-6

现在如你所愿”销售金额“这一列变成了文本型

你现在写一个度量值,并将它放到矩阵中,会有什么结果?如图1-4-7

总金额 = sum(Sheet1[销售金额])

图1-4-7

原理:IFERROR之所以遇到错误时使用指定数值替换,因为你在计算,计算结果本身就是数值,所以必须用数值,这是数据类型的统一性。

你说了一个谎就要去用另一个谎去圆

IFERROR(表达式,BLANK()或数值)

有些人会抬扛:如果我的表达式是&连接两个列,报错以后,是不是可以返回文本?可以!但是,如果你原始的两个列本身不是错误,你怎么可能连接出错误?

那么问题来了,为何推荐将错误转化为BLANK()?答:为了不再出错!

图1-4-8

销售金额 = IFERROR(CONVERT([销售数量]*[单价],STRING),"错了")

销售金额2 = IFERROR([销售数量]*[单价],BLANK())

销售金额*10 = [销售金额]*10

销售金额2*10 = [销售金额2]*10

我们再进行一个测试:

图1-4-9

销售数量2 = if([销售数量]="孙兴华",BLANK(),[销售数量])

空字符串 = [销售数量2]=""

销售金额 = IFERROR([销售数量]*[单价],BLANK())

0 = [销售金额]=0

如果这一列,是文本类型,那么,BLANK()就是空字符串

如果这一列,是数值类型,那么,BLANK()就是0

这个时候,数学逻辑好的人,就会举一反三,那么日期/时间型呢?因为他们本身也是数字类型的演化,所以同理数字。

但是要注意:并不是任何类型与BLANK()进行四则运算结果都是BLANK()

例如:

1+BLANK()=BLANK()

BLANK()+BLANK()=BLANK()

这只限定于加减乘除

PS: 经常会拿常识说我讲的内容不适合小白,例如他听不懂"唯一值"是什么?如果哪位听不懂四则运算是什么,只能证明你的小学是假的。

另外需要注意的是:日期类型的BLANK()+1 不等于BLANK()修证:在视频上我讲这里时忽略了日期类型,家要特别注意

但是:连接和比较运算就不一样了,你需要举一反三:

"孙兴华" & BLANK() = "孙兴华" //因为这个时候, BLANK()代表空字符串

520 & BLANK() = "520" //因为&的结果都是字符串,所以BLANK()代表空字符串

"孙兴华" > BLANK() //返回: True 因为这个时候, BLANK()代表空字符串

"" = BLANK() //返回: True 因为这个时候, BLANK()代表空字符串

1 > BLANK() = True //返回: True 因为这个时候, BLANK()代表0

0= BLANK() //返回: True 因为这个时候, BLANK()代表0

如果是逻辑判断呢?废话连篇!True和False是0和1

那你说: True && BLANK() 是什么? // 1 and 0 那不还是0吗?

我小时候打扑克牌,有一种玩法,就是谁拿到王小王(等同于BLANK()),可以用它们代替任何牌,可能地区不同我们的玩法不同,我们「塞伯坦星球」就是这么玩的。

例如,我手上有 3、4、6、7、9、10、J、Q、K、A

很明显,我若将手上顺子的9、10、J、Q、K、A出掉,手上的3、4、6、7就变成了单牌。如果小王在手,我可以这样出3、4、王、6、7、小王、9、10、J、Q、K、A

//王代替5,小王代替8

3、4、小王、6、7、王、9、10、J、Q、K、A

//小王代替5,王代替8

四、IF与IFERROR的区别家都知道,分母为0时会报错,除非你用安全除法=IFERROR(5/0,BLANK())等同于= If(ISERROR(5/0),BLANK(),5/0)

《孙兴华讲PowerBI火力全开》笔记第12课 if条件判断

《孙兴华讲PowerBI火力全开》笔记第22课 信息函数中的ISERROR

=ISERROR(5/0) //返回:True ,功能判断5/0是不是一个错误

很明显,我们使用IFERROR更简单,但是现在的情况是:

如果5/0是个错误,我们就返回BLANK(),否则返回5/0的结果

现在我们换一道题,如果 '表'[列名] 是BLANK(),就怎么样,否则怎么样?

我们有IFERROR,但是没见过IFBLANK,然而我们有ISBLANK

《孙兴华讲PowerBI火力全开》笔记第22课 信息函数中 还有很多判断函数可供使用

图1-4-10

你知道"销售金额3"为什么报错吗?

因为:[销售数量2]*[单价] 返回数值型,而“哈哈它是空的”是个文本型

五、抛开速度,IFERROR与ISERROR最的弊端

图1-4-11

商1 =iferror([分子]/[分母],Blank())商2=if(iserror([分子]/[分母]),Blank(),[分子]/[分母])商3=if([分母]0,[分子]/[分母],Blank())商4=if([分母]0,[分子]/[分母],ERROR("分母不能为0"))

商1和商2需要先判断[分子]/[分母]是不是一个错误,理论上比商3慢,是因为多了一步判断。

但是,实际你不易感觉出来,就好比有些奇怪的人们对比照片和视频清晰度一样。

例如照片:它们将照片放放再放,对比锐度,焦外,二线性。

例如视频:他们将画面定住,然后趴在电视机前,看看演员的毛孔。

另一个问题才是最致命的,官方语言说:截获内层级别计算时发生的错误

图1-4-12

商1 = CALCULATE(sumx('Sheet2',iferror([分子]/[分母],Blank())))商2 = iferror(sumx('Sheet2',[分子]/[分母]),Blank())

IFERROR与ISERROR同理,官方语言也是很好理解,可即便是萌新小白

你也应该清楚,他的运算规则,是从内到外,你搞清楚运算规则,原理不攻而破。

六、ERROR函数测试未通过

首先声明,我并不是要黑谁和批判谁,这只是我在使用中发现的问题,和家分享一下,家可以自行测试,有问题可以提,互通有无。

图1-4-13 是某位DAX原理讲师,在知乎上引用《The Definitive Guide to DAX》原著中的内容:

图1-4-13

第1个 = IFERROR (

SQRT ( Test[Temperature] ),

)

这个度量值肯定是没问题的,但是第2个度量值就有问题了:

PowerBI 2021年6月版测试不通过

第2个 = IF (

Test[Temperature] >= 0,

SQRT ( Test[Temperature] ),

ERROR ( "The temperature cannot be a negative number. Calculation aborted." )

)

图1-4-14

处理方法:

错误提示 = IFERROR(CONVERT(SQRT(Test[Temperature]),STRING),"The temperature cannot be a negative number. Calculation aborted.")七、PowerBI中的DAX使用变量时不受版本影响Marco Russo和Alberto Ferrari 两位意利专家写的《The Definitive Guide to DAX》曾指出,使用变量时,会根据产品DAX版本不同,返回不同的结果亲测:2021年6月版的PowerBI不受影响

但是在PowerPivot中,可能就真的不一样了。PowerPivot内置在Excel中,Excel2016、2019、2021、365版本众多,365订阅尚且更新,其它版本…

2021年6月版的PowerBI中:以下三种写法,均正常返回结果

测试1=iferror(5/0,520)

// 先定义变量,输出时再做判断

测试2 =

varabc= 5/0

return

iferror(abc,520)

//先判断,再输出

测试3 =

iferror(

var abc=5/0

return

abc,

520

)

八、防抬扛:分母为零时计算报错可用安全除法

《孙兴华讲PowerBI火力全开》笔记第13课 安全除法

语法:DIVIDE(分子,分母,[替换结果])替换结果可以略不写,略时返回为空。除法 = [分子]/[分母]

小米手机怎么刷tiktok

三星手机怎么插入双卡

佳能相机200d拍照声音怎么关

邮政快递过年福利什么时候发

中通快递这几天为什么货量大

申通快递为什么落后了

为什么韵达快递查不到

标签:s01 powerbi 孙兴华讲powerbi火力全开 excel 数据类型