DAX从入门到精通 2-4-2 四则运算符错误

四则运算符错误

第二种错误类型是运算错误。例如除以0或者开负数的根号。他们不属于转换类的错误。这种错误在您调用一个函数并提供不正确的值的时候出现。
除0错误需要特别的注意,因为通常这个不容易被发现。当你除以一个0的时候,DAX就会返回一个特别的值‘Infinity’。
另外,在特殊的条件下,0/0或者 Infinity / Infinity 那么DAX返回一个特殊的字符 NaN
总结下,就是下图这样4种情况:


image.png

值得注意的是DAX中Infinity和NaN是特殊的值,不是错误。如果你把一个值除以Infinity,那么不会返回一个错误,而是返回0。
除了以上这些情况,当函数内使用错误的参数导致的运算错误,DAX返回报错。例如对负数开平方。

SQRT ( -1 ) = An argument of function 'SQRT' has the wrong data type
or the result is too large or too small

如果DAX发现了错误,那么计算引擎就会取消剩下的计算过程然后报错。可以使用函数ISERROR来检测表达式是否导致错误,这个具体的我们后面会讲。
最后,要强调一下这些值例如NaN只是在Power Pivot 或者Visual Studio中展示,它们在一些其他客户端可能会显示为错误值,例如在Excel Pivot中。这些值可以用于检测错误的函数发现。

空值或者缺失值
我们检测的第三个类型,不是一种错误值。它是空值,空值和其他其他元素一起参与计算的时候,会导致难以预期的结果或者报错。所以我们要了解DAX是如何处理这些值的。
DAX对缺失值,空值,或者空的单元格采用同样的处理方式,即使用BLANK。BLANK不是一个实际的数字,但是是DAX处理这些情况的一种识别方式。可以使用BLANK()来在生成BLANK,它不是空值。例如下面的表达式返回一个blank值,这些值在透视表中显示为空值。

= BLANK ()

函数本身,并没有多大的实际意义。但是blank函数在你需要返回一个空值的时候非常有用。例如。例如您先显示空值而不是0,例如下面的表达式,计算销售记录的总的打折情况,对打折为0的显示为blank。

= IF ( Sales[DiscountPerc] = 0, BLANK (), Sales[DiscountPerc]
* Sales[Amount] )

blank本身,不是错误,而是空值。因此,因此包含blank的表达式返回一个值或者blank,取决于计算的需求。例如,下面的表达式,当 Sales[Amount]是BLANK的时候,返回blank

= 10 * Sales[Amount]

换句话说,也就是当乘法的时候,其中一个或者两个都是blank时候,结果就是blank。其他的计算情况下,可以参考下面的例子:

BLANK () + BLANK () = BLANK ()
10 * BLANK () = BLANK ()
BLANK () / 3 = BLANK ()
BLANK () / BLANK () = BLANK ()
BLANK () || BLANK () = FALSE
BLANK () && BLANK () = FALSE
BLANK () = BLANK () = TRUE

但是BLANK结果不总是这样,计算的结果还依赖参与计算的其他参数。一些例子是加,减,除以BLANK,blank和值的逻辑运算。在下面的表达式中,可以看计算的条件以及计算的结果

BLANK () - 10 = -10
18 + BLANK () = 18
4 / BLANK () = Infinity
0 / BLANK () = NaN
FALSE || BLANK () = FALSE
FALSE && BLANK () = FALSE
TRUE || BLANK () = TRUE
TRUE && BLANK () = FALSE

Excel和SQL中的空值
Excel使用不同的方式来处理空值。Excel中,所有的空值被识别为0,无论是在求和或者乘法,但是在除法或者逻辑计算的时候,会返回错误。
SQL中,null值的处理方法和DAX中处理blank的方式不一样。从之前的例子看,DAX中,Blank的计算结果,不一定都是blank,而sql中null的计算,通常都是null。
正确理解空值和缺失值在DAX处理中的变化形式,以及在计算中使用blank()来返回空值,对你计算正确的结果,有非常大的帮助。通常情况下,当你可能发生错误或者返回错误的值时候,你可以使用blank在作为结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351