• 本文翻译自国际Power BI大师Alberto Ferrari的文章——《Handling customers with the same name in Power BI》,本文介绍了如何通过使用零宽度空格在Power BI报告中显示具有相同名称的不同客户,从而使表达得到了简化,无需添加可见字符即可使名称具有唯一性。*

有时,我们处理两个或多个相同类型的实体具有相同名称的情况。如果我们以客户为例,数据模型将同时存储客户编码和客户名称,以正确识别每个客户。客户编码将具有相同名称的两个客户标识为唯一。

Contoso示例数据库包含许多同名的客户。例如,请看下表:有两个名为Jordan Allen的客户。它们的名称相同,但客户编码不同。事实上,他们生活在不同的州,他们的客户历史可能会非常不同。

如果我们只将客户名称保留在表中,并删除使它们不同的所有列,则Power BI会合并这两个客户,并显示误导性的数字。只查看下面的矩阵,用户可能会错误地得出结论,客户Jordan Allen购买了价值810.94美元的产品。然而,这从来没有发生过,因为这个数字是两个同名的不同客户购买的总和。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FCpQ6LOg-1599110963559)(https://pbihub.cn/uploads/images/202009/03/125/OTOOZQPe0z.png)]

Power BI按客户名称分组生成查询。如果两个客户共享相同的名称,则它们将显示为单个客户。

解决这种情况的一个选择是将客户编码附加到客户名称上,以保证客户名称始终是唯一的。使用客户编码是一种有效的技术,但是结果并不美观,因为我们用客户编码污染了Name列。

还有另一种技术可以用来使名称唯一,同时保持名称的可视化不变。我们可以使用零宽度空格,这是Unicode集合中一种非常特殊的空格字符。

零宽度空格是影响某些书写系统中单词打印方式的特殊字符。在这篇文章中,我们对它们在印刷方面的用途不感兴趣,而是对它们肉眼看不见的独特特性感兴趣。您可以在https://en.wikipedia.org/wiki/Whitespace_character.了解更多信息。在众多的零宽度空间中,我们选择了零宽度非拼接器Unicode 8204。

想法是这样的:如果我们在第二个Allen,Jordan的末尾加上一个零宽度的空格,它看起来和第一个Allen,Jordan是一样的,但它是不同的,因为他的名字在末尾包含了隐藏的空格。

如果我们有两个以上的同名客户怎么办?

DAX可以帮我们解决,我们可以为客户名称创作一个新的计算列,在该列中,我们在原始名称后面附加适当数量的零宽度空格,以确保客户名称无论如何都是唯一的。

要创建列,我们必须标识具有相同名称的客户,使用客户代码对其进行排名,然后添加空格:第一个客户为零个空格,第二个客户为一个空格,第三个客户为两个空格,依此类推。通常,一旦我们有了客户的排名位置,我们添加的零宽度空格就等于它的排名位置减1。名称唯一计算列实现了此技术:

Name Unique =
VAR CustomersWithSameName =CALCULATETABLE (SUMMARIZE ( Customer, Customer[Customer Code], Customer[Name] ),ALLEXCEPT ( Customer, Customer[Name] ))
VAR Ranking =RANKX ( CustomersWithSameName, Customer[Customer Code],, ASC, DENSE )
VAR Blanks =REPT ( UNICHAR ( 8204 ), Ranking - 1 )
VAR Result = Customer[Name] & Blanks
RETURNResult

在人眼看来,“名称唯一”列中的结果与“原始名称”列中的结果相同。DAX则不同,因为同名不同客户的名称末尾有零宽度空格。实际上,矩阵中的名称唯一列产生了下面的可视化效果。

高亮显示的具有相同名称的客户显示在不同的行中,尽管它们具有相同的名称。附加到客户名称的零宽度空格不会增加名称本身的视觉长度。事实上,Contoso数据库包含385个没有名字的客户。如果我们附加一个规则的空格,那么最后一个空客户的名字的长度将是巨大的:385个空格。通过使用零宽度空格,名称仍然看起来是空的,即使最长的名称有385个字符。

为了简化用户的浏览体验,可能需要显示Name唯一列,隐藏原始Name列,然后重命名它们,以便用户只看到包含唯一名称的Name列。这样,分隔同名客户的预期行为就是默认行为。也就是说,原始的Customer[Name]列仍然有用。例如,要检查客户名称是否为空,必须使用原始Customer[Name]列。The Customer[Name Unique]列从不包含空字符串,而Customer[Name]可能包含空字符串。

这项技术适用于大多数当地文化和语言。请注意,零宽度空格在某些语言中有特定的含义。因此,检查需要的是您是否可以安全地在特定区域性中的名称末尾添加一个零宽度空格,而不会更改其可视化效果。

  • PowerPivot工坊原创文章,转载请注明出处!

如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。


长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~

Power BI中如何处理相同名称的客户相关推荐

  1. power bi dax_M语言和Power BI中的DAX之间的差异

    power bi dax Microsoft Power BI supports two different languages, M language and DAX (Data Analysis ...

  2. power bi函数_在Power BI中的行上使用聚合函数

    power bi函数 Aggregate functions are one of the main building blocks in Power BI. Being used explicitl ...

  3. power bi 创建空表_如何使用R在Power BI中创建地理地图

    power bi 创建空表 介绍 (Introduction) This is the fifth article of a series dedicated to discovering geogr ...

  4. power bi自定义地图_如何使用自定义形状图在Power BI中创建地理图

    power bi自定义地图 介绍 (Introduction) This is the third article of a series dedicated to discovering geogr ...

  5. power bi形状地图_如何使用内置形状图在Power BI中创建地理图

    power bi形状地图 Introduction 介绍 This is the second article of a series dedicated to discovering geograp ...

  6. Power BI中带筛选条件的查询功能如何实现

    一.问题描述 在数据分析,有时我们需要查找销售金额最大客户的姓名,或者最早的销售订单的编号,或者销售金额最大的10名客户的总金额等,类似这种带有筛选条件的查询功能,在Power BI中该如何实现呢?下 ...

  7. Power BI中使用DAX生动展现人员头像、动态标签——销售数据里的那些商业智能

    目录 背景介绍 主要内容 数据预览 实现方案 头像展示 动态标签 总结 背景介绍 Power BI 作为一款强大的.生动的.且非常友好的商业智能软件,能帮助用户快速了解和分析数据.报表是可视化组件有机 ...

  8. POWER BI 中DAX函数的应用

    POWER BI 中DAX函数的应用 什么是DAX函数 DAX 是公式或表达式中可用于计算并返回一个或多个值的函数.运算符或常量的集合. 简单来说,DAX 可帮助你通过模型中已有的数据来创建新信息. ...

  9. POWER BI 中DAX函数的应用(下篇)

    POWER BI 中DAX函数的应用(下篇) 任务:创建度量值公式 下载并打开 Contoso 销售示例 Power BI Desktop 文件. 在"报表"视图的字段列表中,右键 ...

最新文章

  1. 删除表记录(delete from ....where)
  2. PYG教程【五】链路预测
  3. Linux/Unix 如何查看 man 搜索到的手册页(manual page)的位置及复制手册页的内容
  4. 什么是HDMI视频光端机?
  5. 个人博客 V0.0.3 版本 ...
  6. Spring3核心技术之AOP配置【转】
  7. 对话MySQL之父:代码一次性完成才是优秀程序员
  8. Java从零开始学三十六(JAVA IO- 字符流)
  9. bzoj3551 [ONTAK2010]Peaks加强版(Kruskal重构树+主席树)
  10. ubuntu18安装tim
  11. 机器人抓取中物体3D定位算法介绍
  12. 在Centos下安装java jdk
  13. 一个合格的java工程师应该必备的能力
  14. windows--花里胡哨的文件图标
  15. 0 为什么学习stm32f103
  16. 0x0000007b错误解决办法
  17. 类(class)中的访问权限问题
  18. 第七天课程预览和发布
  19. 它听键盘声就知道你敲的是什么——GitHub 热点速览 Vol.51
  20. 华为mate30计算机删了怎么找回,华为mate30pro桌面天气删除了怎么恢复

热门文章

  1. 如何在MySQL中实现替换字段部分内容
  2. 人性的弱点 --卡耐基
  3. 8.利用红外遥控信号控制LED灯的亮灭
  4. 小菜鸟的python学习之路(2)
  5. MAX3232芯片与stm32芯片通信硬件线路连接和引脚说明
  6. 如何使用Java实现图形用户界面(GUI)?
  7. 2016前端面试题总结
  8. 5.前端CSS之基本属性(长宽,字体,文体,背景图片,阴影,border画圆,display)
  9. CS5266+MA8621做TYPEC转HDMI+PD+U3+2U+SD/TF七合一拓展坞方案设计|CS5266多口拓展坞PCB+原理图参考
  10. 艾略特波段理论实战(1):8浪