首页 > 解决方案 > Power BI - 仅显示属于所需选择的数据(和逻辑)

问题描述

我有一张这样的桌子

Role            Skills       Resource
Data Analyst     R             A
Data Analyst     Python        A
Data Analyst     SQL           B
Business Analyst SQL           A

我的技能在过滤器中。我在仪表板上有多个视觉效果。

如果我选择 SQL 和 Python,那么数据分析师和业务分析师的结果都将显示在视觉对象中。

但是,我希望它只显示数据分析师结果,因为只有数据分析师拥有所有选定的技能。

为了实现这一点,我想创建一个度量并将其放在每个视觉对象中的视觉级别过滤器上可能会有所帮助。

更新:- 如果我在这里选择 SQL,我会在我的卡片视觉上得到 2 个与资源相关的不同资源,但是如果我选择 SQL 和 Python - 我在卡片视觉上得到 0 个与资源相关的资源和 1 个角色计数与角色度量中的角色相关。

请帮助我创建该度量。

标签: powerbidaxpowerbi-desktop

解决方案


也许有人会建议一种更优雅的方式来做到这一点;我想出了以下想法。

创建一个度量(我将您的表称为“数据”):

Has All Selected Skills
=
VAR 
   Selected_Skills = ALLSELECTED ( Data[Skills] )
VAR 
   Role_Skills = CALCULATETABLE ( VALUES ( Data[Skills] ), ALL ( Data[Skills] ) )
VAR 
   Missing_Skills = COUNTROWS ( EXCEPT ( Selected_Skills, Role_Skills ) )
RETURN
   IF ( NOT ( Missing_Skills ), 1 )

如果将度量放置在针对角色的视觉对象中,它将产生以下结果:

在此处输入图像描述

在此处输入图像描述

此代码的工作方式:

  • 首先,我们将所有选择的技能存储在一个变量“Selected_Skills”中;
  • 其次,我们将角色可用的所有技能存储在变量“Role_Skills”中。我们必须使用 ALL(Data[Skill]) 来忽略技能切片器的选择;
  • 第三,由于上面的两个变量都是表格,我们可以使用 EXCEPT 函数来找出它们的不同之处。在这里,我们告诉 DAX 查找 Selected_Skills 中的哪些记录在 Role_Skills 中不存在。将结果存储在变量“Missing_Skills”中。
  • 最后,如果 Missing_Skills 为零,则表示该角色具有所有选定的技能,我们将其标记为 1(尽管您可能使用 True/False 等)。

我用这种方法看到的问题是,如果技能选择器没有选择(显示“所有技能”),那么公式可能会为所有角色返回空白,并且您的所有视觉效果都将为空白。从技术上讲,它是正确的——它本质上是说没有一个角色拥有所有技能。但是,如果这不是您想要的行为,请考虑稍作修改的方法:

Missing Skills Count
=
VAR 
   Selected_Skills = ALLSELECTED ( Data[Skills] )
VAR 
   Role_Skills = CALCULATETABLE ( VALUES ( Data[Skills] ), ALL ( Data[Skills] ) )
VAR 
   Missing_Skills = COUNTROWS ( EXCEPT ( Selected_Skills, Role_Skills ) )
RETURN
   Missing_Skills + 0

该公式使用相同的逻辑,仅返回每个角色缺少的技能数量,而不是真/假状态。它将允许您显示技能列表,按缺少的技能数量与所选技能集排序:

在此处输入图像描述

您仍然可以使用它来过滤您的视觉效果;优点是它永远不会为空,即使选择了所有技能:

在此处输入图像描述

它还使您能够查看最接近满足要求的角色,即使没有一个角色完全符合要求;可能是一个理想的功能。

最后说明:在所有这些报告中,我没有小计和总计,假设它们不重要。如果您确实需要它们,则可能需要修改公式以满足您对总数的要求(取决于您要在此处显示的内容)。


推荐阅读