如果你刚开始学习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函数时进行快速参考。
这段文字的中文翻译如下:
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函数结合使用。
这是我们数据的一个快照,显示了不同产品在各个细分市场和国家的月销售情况。
这段文字的中文翻译如下:
步骤1:使用SUMX创建一个度量
这是SUMX强大之处的一个经典示例。我们想要使用销售的单位数量、每单位价格以及给定的任何折扣值来计算总销售额。
SUMX(Sales, (Sales[Units Sold] * Sales[Sale Price])-Sales[Discounts])
这是一个显示我们SUMX函数结果的表格。正如您所见,总销售额也可以应用筛选上下文-在这种情况下,我们按年份和产品进行筛选。
这段文字的中文翻译如下:
步骤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基础知识技能轨迹。
抱歉,我无法翻译视频和图片标签,也无法保留代码块。以下是我对文本的翻译:
“你是一个翻译员。”