如何用M语言,来解决Power BI引擎不区分字母大小写的问题
Power BI对于区分大小写是比较混乱的:尽管Power Query引擎区分大小写,但主要的Power BI引擎(即数据集,关系,DAX等)不区分大小写。在这篇文章中,我们将集中讨论不区分大小写在数据集和DAX中的含义,并展示该问题的解决方法。
从一个简单的示例开始,假设你有一个数据源,其中包含如下所示的数据:
这就是Power Query 中数据的样子,正如我上方所说,Power Query引擎是区分大小写的–这意味着它将“ A”和“ a”视为不同的字符,因此在表的每一行中看到六个不同的字符。这可以是来自任何数据源的数据。在本次案例中我是通过M查询来生成此表的,具体语句如下:
但是,当此数据加载到Power BI数据集中时,你将在Power BI主窗口的“数据”窗格中看到以下内容:
由于主要的Power BI引擎不区分大小写(例如,“ a”和“ A”被视为相同的字符),因此,当加载该数据时,它只会看到三个不同的字符,因此您无法确定是否将小写或大写字符存储两次。这就是它的工作方式。
此外,您还会发现DAX计算也不区分大小写。如果尝试使用以下DAX表达式来创建表:
上方的DAX会帮你得到:
使用与上方类似的DAX。得出下表:
然后在上方的表下使用以下度量值:
你会看到如下结果:
解决这种情况下不区分大小写的唯一方法是,是让Power BI引擎知道看起来相同的文本值有所不同。一种方法是在文本中添加一些额外的字符。再次看到我们的M查询中,你可以为表中的每个小写字符添加一个空格,如下所示:
但这是行不通的,因为Power BI引擎的另一个鲜为人知的行为是在加载文本时会修剪所有前面和后面空格。更好的做法是使用Unicode零宽度空格字符和M 函数Character.FromNumber,如下所示:
关于这个做法的妙处在于,尽管使用了它,但它是不可见的并且不占用空间。将M查询加载到Power BI中时,会看到下表:
让我们再做一个更高级的示例来结束,假设您有一个称为”查询2”的M查询返回的以下源数据:
当然,当将此表加载到Power BI中时,您将看到以下内容:
接下来,使用如下M查询将获取此表,并且每一行都会遍历OriginalText列中的文本,并在每个小写字符后添加一个” 零宽度空格”:
当您将此查询的输出加载到Power BI中时,由于每个小写字符后的零宽度空格使Power BI认为每段文本都是不同的,因此大小写也看起来像保留了一样:
最后我们来看下对比
处理前:
处理后:
往期推荐
●【2019】10月份(广州站)Power BI 线下活动报名
技术交流
1.Power BI免费下载:http://www.yeacer.com/
Microsoft Power BI Desktop中文最新版:下载地址
2.欢迎加入的Power BI技术群,目前正在学习阶段,有兴趣的朋友可以一起学习讨论。
Power Data技术交流群:702966126 (验证注明:博客园Power BI)
更多精彩内容请关注微信公众号:悦策PowerBI
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,作者博客:https://www.cnblogs.com/yeacer/