– 问题 –
近期碰到个很有意思的例子,一个度量值,其中判断某个值为0时,结果用减号“-”表示,不是0时执行相应的除法:
但是,明明用条件设置了这里应该显示为减号(“-”),但结果却显示为0%!!!为什么!!!
——不要一看到这种需求就说这是中国式报表的无理要求之类的,貌似很多老外也很喜欢这种表达方式!
– 原因 –
为什么会出现这种情况呢?
我猜(纯凭经验,没深究,不严谨),这可能是由于DAX中的类型自动转换导致的,因为“-”是DAX(也是很多其他编程语言)里唯一既作为运算符(减,如3-2)又同时是符号(负,如-1)的字符,所以,单独的“-”在参与度量计算的过程被转换成了类似[-blank()]的负数结果,-blank()也就等于0。
换成其他的字符就不会,即使是换成“+”,比如:
– 尝试 1 –
那如果就是想表示成“-”的样子,该怎么办?
我们首先想到的方法是给“-”前或后加上空格,但是,这没有用!见下图:
为什么?应该跟这个问题类似:《PP-数据建模:明明删除了重复项,为什么还是说有重复值?》,但在DAX公式里面,可以理解为符号前后的空格是不影响计算结果的。
– 尝试 2 –
那还有其他什么办法?
这个时候,根据对计算机字符集的了解(又是经验),可以加上一个不可见字符,如UNICODE字符集里第9个,如果在Excel的传统表格或Power BI里,可以轻松用UNICHAR(9)得到,可惜,在Excel的Power Pivot里,却没有UNICHAR这个函数(对于DAX函数的适用范围,可以在DAX.Guide网站上查到,这是DAX函数用法及案例最佳参考网站哦,拿走不谢!):
而且,我觉得以后也不太可能支持,因为,你看看前后就只差一个多月设计的对应的函数UNICODE,却一出来就是支持Excel的,现在4年过去了,UNICHAR却还没有支持Excel,实在没有搞懂为什么要这样:
– 最后的答案 –
那,还能怎么办?
——当然是复制粘贴啊!
先在Excel的传统表格里生成一个不可见字符,然后复制粘贴到DAX公式里:
好了,问题终于解决了,顺带,如果想要换行符,用unichar(10)……