首页 > 解决方案 > 在 Power BI 中使用 DAX 的矩阵问题中的部件百分比

问题描述

基本上我试图找到每个“缺陷代码”的缺陷百分比。

机器编号在一个表中([针织]),缺陷代码/缺陷数量在另一个表中([针织缺陷])。它们按件数相关,并受日历表的影响。加工数量来自针织缺陷表,如下所示。

问题是当应用下面的百分比计算时,它非常适用于机器,但零件的百分比(缺陷代码)显示为 100%。

在此处输入图像描述

我目前正在使用三个 DAX 度量。

 Defect Quantity = 
    CALCULATE(
        SUMX( 'Knit Defects','Knit Defects'[Processed Qty]),
        left('Knit Defects'[Defect Code])="5"
    )


Defect and 1st Quality = 
   calculate(
       sum('Knit Defects'[Processed Qty]),
           'Knit Defects'[Defect Code] = ""
       ) + [Defect Quantity]


Defect Percentage = 
  iferror([Defect Quantity] / [Defect and 1st Quality] ,0)

标签: powerbidax

解决方案


问题在于您的 [缺陷和第一质量] 度量。如果将其放入矩阵中,您将看到它始终与每个缺陷描述的 [缺陷数量] 相同:

在此处输入图像描述

只有当您的 [缺陷和第一质量] 测量的第一部分:

Defect and 1st Quality = 
   calculate( sum('Knit Defects'[Processed Qty]),
           'Knit Defects'[Defect Code] = "")

总是返回 0 或空白。

为什么会这样?因为在您的视觉过滤器中,您只选择了以“5”开头的缺陷代码。因此,在此度量中,您实质上是要求 Power BI 计算从“5”和等于“”开始的缺陷代码的已处理数量的总和。由于不存在此类组合,因此公式返回空白。

要修复它,您需要先“消除”视觉级别过滤器的影响,然后应用新过滤器:

Defect and 1st Quality =
CALCULATE (
    SUM ( 'Knit Defects'[Processed Qty] ),
    ALL ( 'Knit Defects'[Defect Description] ),
    'Knit Defects'[Defect Code] = ""
) + [Defect Quantity]

结果:

在此处输入图像描述

一些额外的建议:

您可以重写缺陷百分比度量,如下所示:

Defect Percentage = DIVIDE([Defect Quantity], [Defect and 1st Quality])

它做同样的事情,但效率更高,代码更干净。

另外,我建议重新审视您的数据模型设计。它需要转换为正确的启动模式——就目前而言,它有很多维度建模问题。如果您不修复它们,DAX 将继续为您带来挑战。


推荐阅读