如何使用SUMX Power BI函数

如果你刚开始学习Power BI,并且正在参加我们的Data Analyst in Power BI职业培训课程,你可能已经了解了基本的SUM函数,这是在introduction to DAX课程中学到的(如果没有,可以查看这个快速的DAX教程)。在这种情况下,你可能还想知道SUMX函数是什么,它是如何工作的,以及如何在分析中使用它。

本教程将探讨SUMX函数,回答所有这些问题,并指导您在Power BI中实施它。

当你阅读这篇以及其他Power BI教程时,请记住,虽然作为商业智能或Power BI开发人员,你可能不需要学习编程,但它可能对你的职业发展非常有帮助。查看我们的文章,了解为什么你应该作为BI分析师学习编程。

Power BI中的SUMX函数是一个强大的DAX函数,用于计算表中每一行计算的表达式的总和。这个函数很重要,因为它允许进行比简单求和更复杂的计算。

Power BI中的SUMX函数是一个强大的DAX函数,用于计算表中每一行计算的表达式的总和。这个函数很重要,因为它允许进行比简单求和更复杂的计算。

将我们的DAX速查表随身携带,以便在遇到许多最常用的DAX函数时进行快速参考。

image2.png

这段文字的中文翻译如下:

SUMX函数的语法如下:

SUMX(Table, Expression)

的中文翻译为:

SUMX(表格, 表达式)

  • 表格:函数迭代的表格或表达式。
  • 表达式:对表格的每一行进行评估的表达式。这个表达式通常涉及表格中的列数据。

SUMX在必须在汇总结果之前对每个行值进行计算的情况下非常有用。例如,通过将每个交易的数量和价格相乘来计算总销售额,或者在汇总总折扣销售额之前对每个产品应用不同的折扣率。它在计算中提供了灵活性和精确性,因此是一个非常重要的函数需要学习。

Power BI中SUMX函数的工作原理

以下是SUMX函数的工作原理的详细解析:

  • 当调用SUMX函数时,它逐行迭代指定表的行。对于每一行,它临时建立一个行上下文,这是一种环境,当前行的值可以直接访问。
  • 在这个行上下文中,函数评估其第二个参数中提供的表达式。该表达式通常涉及当前行的一个或多个其他列值。当函数遍历表时,它根据该行的数据为每一行重新计算这个表达式。
  • 当SUMX处理每一行时,它聚合结果并保持一个累计总和。Power BI使用DAX的内存分析引擎(VertiPaq),该引擎针对此类计算进行了优化。
  • 在迭代所有行之后,SUMX最终确定聚合总和,即为每一行计算的个别结果的总和。然后,将此最终值作为函数的输出返回。

理解上下文

在Power BI中,上下文对于理解DAX函数如SUMX的操作至关重要。上下文决定了数据模型中的值如何计算和显示。请查看我们的DAX入门课程,我们在其中详细讨论了上下文。使用SUMX函数时,有两种主要的上下文需要考虑:行上下文和筛选上下文。

行上下文

行上下文是指DAX公式在表的每一行中进行计算时所处的环境。当您处于行上下文中时,可以直接引用表的列,并且DAX公式将使用当前行的值进行计算。

当你使用SUMX函数时,它会为其操作创建并利用行上下文。对于指定表中的每一行,SUMX函数会在该特定行的上下文中评估给定的表达式。

过滤上下文

过滤上下文是应用于Power BI报告中的数据的一组过滤器,例如来自可视化、切片器和报告级别的过滤器。这个上下文决定了哪些数据点在计算中被考虑。

尽管SUMX在逐行计算时处于行上下文中,但这些计算仍受报表或可视化的整体筛选上下文的影响。这意味着SUMX迭代的行是符合当前筛选上下文定义的条件的行。

SUMX中的上下文交互

在使用SUMX时,该函数同时考虑行上下文和筛选上下文。SUMX迭代的表由筛选上下文确定,而每行的计算在行上下文中完成。

您可以在SUMX函数中使用度量。在这种情况下,发生上下文转换,其中行上下文暂时转换为等效的筛选上下文,以便为每一行评估度量。

SUMX 最佳实践

在 Power BI 中使用 SUMX 函数时,请考虑以下几个最佳实践:

  • 在应用SUMX之前,确保您的数据模型结构良好。准确和优化的Power BI报告需要正确定义的关系和模型架构。
  • 在计算列或行级安全规则中使用SUMX时,不支持直接查询模式。
  • 尽可能简单和高效地使用SUMX中的表达式。避免过于复杂的计算,以免降低性能,特别是在处理大型数据集时。
  • 注意上下文转换以及它如何影响函数的结果。
  • SUMX仅考虑数字。空白、逻辑值和文本将被忽略。

SUMX与其他函数的比较

有些函数与SUMX类似,知道何时使用哪个函数可能会有些困惑。让我们来解析两个最容易混淆的函数。

SUMX vs SUM

SUM用于计算表中一列的总和,其语法如下:

SUM(Column)

的中文翻译为:

求和(列)

SUMX遍历每一行来计算表达式,而SUM直接对单列的值进行聚合。这意味着SUMX可以处理涉及多列的更复杂的计算。

然而,SUMX的迭代性质使其在处理大型数据集时更加资源密集,与SUM相比。如果您正在处理大型数据模型,请记住这一点,并在简单求和时使用SUM。

SUMX vs CALCULATE

CALCULATE函数修改计算中的筛选上下文,是DAX中最强大的函数之一。这是CALCULATE函数的语法:

CALCULATE(Expression, Filter1, Filter2,...)

的中文翻译为:

CALCULATE适用于需要在报表或模型中应用不同过滤条件下进行计算的情况。另一方面,SUMX用于行级计算后的聚合。

在复杂的场景中,我们可以使用CALCULATE与其他函数一起使用,比如SUMX。例如,您可以使用CALCULATE来定义一个特定的筛选上下文,在该上下文中,SUMX执行其逐行计算和聚合。

在Power BI中实现SUMX:逐步指南

使用Power BI示例数据(在安装Power BI Desktop时可用),我们将演示如何使用SUMX函数以及如何将SUMX与其他一些有用的DAX函数结合使用。

这是我们数据的一个快照,显示了不同产品在各个细分市场和国家的月销售情况。

image4.png

这段文字的中文翻译如下:

步骤1:使用SUMX创建一个度量

这是SUMX强大之处的一个经典示例。我们想要使用销售的单位数量、每单位价格以及给定的任何折扣值来计算总销售额。

SUMX(Sales, (Sales[Units Sold] * Sales[Sale Price])-Sales[Discounts])

这是一个显示我们SUMX函数结果的表格。正如您所见,总销售额也可以应用筛选上下文-在这种情况下,我们按年份和产品进行筛选。

image1.png

这段文字的中文翻译如下:

步骤2:对SUMX应用过滤器

我们可以使用两种方法在SUMX函数中使用过滤器:使用FILTER或CALCULATE。

FILTER用于对SUMX中的表格或表达式应用特定的过滤器。它允许更精细地控制SUMX迭代的行。

SUMX(FILTER(Sales, Sales[Discount Band] = "High"), Sales[Units Sold])

CALCULATE修改了SUMX函数的筛选上下文,允许进行复杂的条件聚合。

SUMX(Sales, CALCULATE(SUM(Sales[Units Sold]), Sales[Year] = 2020))

步骤3:将SUMX与其他函数结合使用

ALL和ALLEXCEPT

这些函数用于从表格中移除过滤器,或者从所有表格中移除除指定表格之外的过滤器。它们经常与CALCULATE和SUMX结合使用,用于在未过滤的数据集上进行计算。

SUMX(ALL(Sales), Sales[Sale Price] * Sales[Units Sold])

VALUES

VALUES返回一个列中唯一值的单列表。您可以将其与SUMX结合使用,用于需要迭代唯一值的计算。

SUMX(VALUES(Sales[Country]), [Total Sales])

的中文翻译如下:

SUMX(VALUES(Sales[Country]), [Total Sales])

AVERAGEX, MINX, 和 MAXX

这些是其他类似于SUMX的迭代函数,用于分别计算平均值、最小值或最大值。它们可以嵌套使用或与SUMX一起使用。

AVERAGEX(Customers, SUMX(RELATEDTABLE(Sales), Sales[Units Sold]))

IF和SWITCH

IF和SWITCH等逻辑函数可以在SUMX中用于执行条件计算。

SUMX(Sales, IF(Sales[Country] = "Mexico", Sales[Units Sold], 0))

USERELATIONSHIP

USERELATIONSHIP指定在计算中使用的特定关系。当表之间存在多个关系时,它尤其有用。

SUMX(CALCULATETABLE(Sales, USERELATIONSHIP(Date[Date], Sales[Date])), Sales[Units Sold])

的中文翻译如下:

SUMX(CALCULATETABLE(Sales, USERELATIONSHIP(Date[Date], Sales[Date])), Sales[Units Sold])

结论

在本教程中,我们深入了解了Power BI中的SUMX函数,并向您展示了如何自己实现它。它不仅是一个灵活而强大的DAX函数,还展示了在DAX中理解上下文的重要性。要了解更多信息,请查看我们的Power BI基础知识技能轨迹。

抱歉,我无法翻译视频和图片标签,也无法保留代码块。以下是我对文本的翻译:

“你是一个翻译员。”