本文翻译自Marco Russo的文章——《Filteringthe Top 3 products for each category in Power BI》本文介绍了在Power BI中如何使每个类别的产品只显示前三名的不同方法,其中详细介绍了如何使可视化展现适应不同的模型和业务需求。

Power BI可视化中的视觉级筛选器可以帮你减少可视化中的元素数量。用这种方法可以根据其他切片器或视觉效果需要的选择轻松地将筛选器应用于筛选报表中产品的前十名。

但是,针对希望在单个可视化图表中能够显示每一类产品前三名或者自定义前N名的要求。仅仅通过PowerBI的用户界面的图形化操作并不能提供一种简单的方法。而我们的目标是获得如下图所示结果:

通常,针对此问题的方法是创建一个复杂度量值,将不需要的结果隐藏起来。换句话说,它计算出产品的排名,将排名大于三的结果排除。这种方法虽然易于实现,但是需要修改所有显示在可视化中的度量值,同时会使系统性能受到影响。

更好的解决办法是创建一个用于视觉级筛选器的特定度量值,该度量值无需对其他度量值进行任何更改,仅针对每个产品执行一次,用以定义可见项组。我们将会看到解决此问题的不同选择。

第一种简单的解决方案是,首先度量每一类商品中各个产品的等级,之后在可视化中筛选此度量值的结果。
产品排名度量值返回一类产品中某个产品的排名,ISINSCOPE函数保证排名仅适用于单个产品名称,而CALCULATETABLE函数检索当前产品组所有在可视化中可见的产品名称。例如,我们在可视化中使用了产品类别,相同的度量适用于可视化中其他任何用到的产品列。

请注意,CALCULATETABLE与ALLSELECTED(产品[产品名称])的内部不同,实际上,度量值必须考虑到Product [Category]上的筛选器上下文,VALUES函数能够完成此任务,而单独的ALLSELECTED函数将忽略可视化应用的筛选器,从而为度量值产生错误的结果。
你将此度量值用于具有产品名称粒度矩阵的可视化筛选器,该筛选器仅筛选返回排名小于或等于三的产品。

这种方法是有效的,并且可以在可视化中使用相同的Rank Product度量来准确地对每个类别中的产品进行排序。可视化图表中还可以包括其他度量值,例如上一个图中包含的保证金百分比。

替代筛选器的方法

产生替代方法的原因是觉得没有必要计算所有产品的确切排名:让它来检索每个类别的前三个产品,并将结果应用于可视化筛选器。但是,TOPN内部计算的复杂度与RANKX相差无几,因此这并不算一个真正的优化,更多算是一种DAX替代技术的练习。
因为我们并不能给出一个可以当做视觉级筛选器的表,所以我们可以创建一个度量值,如果在筛选器上下文中选择的产品是可见的,则返回1,否则返回0. FilterTop3ByCat_Filter度量通过使用GENERATE和TOPN的组合生成每个类别需要筛选的产品列表,然后使用KEEPFILTERS将结果应用于筛选器上下文。

该方案的一个主要缺点是该方法必须专门设计一些应用于可视化的列。例如,样本报告中使用的字段在行中可以看到“类别”和“产品名称”列。

请注意,在准备可视化之前,会针对每种产品评估此度量。因此,在开始时应用ALLSELECTED函数对于消除依赖性是至关重要的,此依赖性产生于类别和产品名称的组合的迭代期间发生的上下文转换。这样,无论在准备可视级筛选器时迭代的产品如何,Top3Cat变量都会产生相同的结果,从而对所有产品进行单一评估。
最终CALCULATE中的KEEPFILTERS将此可见产品列表与当前选择组合在一起,产生该度量的预期结果:如果存在至少一个产品,则为1;如果通过新筛选器没有可见产品,则为0。 此度量值是一个很好的练习,可以检验你对上下文转换,ALLSELECTED和KEEPFILTERS的了解。
尽管这种方法在这种情况下没有体现出任何优势,但你可以创建专门为视觉级别筛选器设计的特殊DAX度量值。你可以自定义可视化中项目的选择,从而克服Power BI用户界面中可用选项的限制。这种方法的优点是数据模型中的现有度量可以无任何变化地工作 - 除非你希望将隐藏项目包含在组小计中,如以下部分所述。

显示已过滤项目组的未过滤小计

通过使用视觉级筛选器,每一类产品的“销售额”值对应于该类别的前三个产品销售额的总和。换句话说,“销售额”度量仅根据应用于可视化的筛选器显示可见产品销售额的总和。

如果要在类别级别显示所有产品的总和,则需要一个未筛选销售度量值,该度量值在满足条件时忽略产品的筛选器。

“SalesUnfiltered”度量值仅返回“产品名称”级别的“销售额”,而在“类别”级别调用时,它会计算从“产品名称”中删除过滤器的“销售额”。这样,您可以显示一个矩阵,根据所有产品的总销售额对类别进行排序,而只有前三名产品显示在矩阵的详细信息中。

显示已过滤项目组的排名

在前面的例子中,排名度量值在类别级别是空白的。如果要显示类别和产品的排名,则需要以下度量,根据可视化的当前级别更改RANKX参数:

Rank Multi度量值使用Sales Unfiltered度量值正确对类别进行排序,如以下屏幕截图所示:

如果你想创建一个排名,该排名会考虑在可视化当中筛选的产品的销售额度量的排名,在类别级别中获取正确的筛选器上下文涉及到一些复杂计算。需要ALLSELECTED条件来检索在可视化中被过滤的类别和产品的组合。

因此,在遗失当前筛选器上下文之前,必须将当前类别的Sales Amount值存储在变量中,以便使用适当的值执行RANKX。

根据书写度量值产生了如下结果,根据可见的销售额度量值精确计算类别和产品名称的排名。

结论

利用书写特定的度量值应用于可视化的视觉级筛选器是一种非常强大的技术,可以完全自定义报表中显示的项目。此筛选器的存在需要特殊的度量值,以显示与未包含在视觉级别筛选器中项目相关的值。

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

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


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

在 Power BI 中筛选每类产品的前三名相关推荐

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

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

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

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

  3. power bi 中计算_Power BI中的期间比较

    power bi 中计算 Just recently, I've come across a question on the LinkedIn platform, if it's possible t ...

  4. power bi指标呈现_在Power BI中使用关键绩效指标

    power bi指标呈现 In this article, we will learn Key Performance Indicators usage in Power BI and solve a ...

  5. POWER BI 中DAX函数的应用

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

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

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

  7. 自动从mysql下载文件到powerbi_关于在Power Query和Power BI中从网页下载文件的小提示...

    ​从网络下载数据时,通常最好是从专门为机器对机器通信而设计的API中获取数据,而不是从屏幕上实际可见的站点中获取数据.下载不仅通常更快,而且还常常获得更多非常有用的附加参数.在本文中,我将向您展示如何 ...

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

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

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

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

最新文章

  1. 【专栏】好Leader和差Leader的8个区别
  2. stability condition in queueing system
  3. 【SpringBoot 2】(二)快速入门案例HelloWorld
  4. 用python生成九九乘法表的指令_Python中生成九九乘法表的方法有哪几种?
  5. Python+matplotlib绘制动态更新的柱状图
  6. sparksql对hive操作
  7. Gibbs 采样的应用
  8. 并查集(2)-按秩合并和路径压缩
  9. eclipse jdk官网下载不了
  10. Winedt为什么可以用pdfLaTex编译中文(pdfLaTex和XeLaTex的使用)
  11. vb webQQ登陆器
  12. 如何快速入侵一个网站
  13. 51单片机学习笔记7 -- 超声波测距
  14. PCL-点云处理(一)
  15. winform的RichTextBox设置网格线,类似word的稿纸效果
  16. 闪送,为何能比顺丰送得更快?
  17. 【白板动画制作软件】万彩手影大师教程 | 调节动作播放时长
  18. 地理空间框架(二):大地水准面、似大地水准面、参考椭球面
  19. “2019年新出的境外云闪付是什么?
  20. Name or service not known, ping域名报错

热门文章

  1. 线性代数学习笔记——行列式(针对期末与考研)
  2. 矩阵指数(The Exponential of a Matrix)
  3. cocos 切换精灵图片
  4. Firefox配置阿里云DNS方法
  5. 蚂蚁金服面试经验分享
  6. 专业图片处理工具 Adobe Photoshop CC 2019.0.5 for Mac
  7. QualNet收发包过程分析(一)
  8. fortran内存不足的解决方法
  9. 笔记随笔(ing):计算机视觉部分
  10. android台湾中文網,android台灣中文網註冊