第3章 使用基本表函数
3.1 表函数简介
3.2 EVALUATE语法简介
3.3 理解FILTER
3.4 ALL和ALLEXCEPT
3.5 了解VALUES,DISTINCT和空行
3.6 将表用作标量值
3.7 ALLSELECTED介绍
ALLSELECTED介绍
属于基本表函数集的最后一个表函数是 ALLSELECTED。实际上,ALLSELECTED 是一个非常复杂的表函数_——可能是DAX中最复杂的表函数。在第14章中,我们将揭示 ALLSELECTED 的所有秘密 。但是,ALLSELECTED 即使是基本功能也很有用。因此,在本介绍性章节中值得一提。
当检索表或列的值列表(在当前报表中可见)并考虑当前视图之外的所有且仅筛选时,ALLSELECTED很有用。要查看 ALLSELECTED 何时用,请查看图3-17中的报告。
图3-17 该报告在同一页面上包含矩阵和切片器度量值 Sales Pct 的值通过以下表达式计算:
Sales Pct :=
DIVIDE (
SUMX ( Sales, Sales[Quantity] * Sales[Net Price] ),
SUMX ( ALL ( Sales ), Sales[Quantity] * Sales[Net Price] )
)
因为分母使用 ALL 函数,所以无论使用什么筛选,它总是计算所有销售额的总计。因此,如果使用切片器减少显示的类别数量,则报表仍将针对所有销售额计算百分比。例如,图3-18显示了如果使用切片器选择某些类别会发生什么。
图3-18 使用ALL将相对于所有销售额的总计计算百分比有些行按预期消失了,但是其余行中报告的数量没有变化。此外,矩阵的总计不再占100%。如果这不是预期的结果,则意味着您希望只针对所选值而不是总销售额来计算百分比,那么 ALLSELECTED就变得有用了。
实际上,通过使用 ALLSELECTED 而不是ALL 编写 Sales Pct 的代码 ,分母将只需考虑矩阵外的所有筛选来计算所有类别的销售。换句话说,它返回除 Audio、 Music 、和 TV 之外的所有类别的销售额。
Sales Pct :=
DIVIDE (
SUMX ( Sales, Sales[Quantity] * Sales[Net Price] ),
SUMX ( ALLSELECTED ( Sales ), Sales[Quantity] * Sales[Net Price] )
)
后一版本的结果在图3-19中可见。
图3-19 使用 ALLSELECTED,仅考虑外部筛选,针对销售额计算百分比现在总数为100%,报告的数字反映了相对于可见总数的百分比,而不是相对于所有销售额总计的百分比。ALLSELECTED 是强大而有用的函数。不幸的是,为了达到这个目的,它最终也成为了一个极其复杂的函数。只有在本书的稍后部分,我们才能完整地解释它。由于其复杂性, ALLSELECTED 有时会返回意外结果。出乎意料的是,我们并不是说错误,而是即使对于经验丰富的DAX开发人员也很难理解。
当使用简单的公式(如我们在此处显示的公式)时,无论如何,ALLSELECTED 被证明是特别有用的。
结论
正如您在本章中看到的,基本表函数已经非常强大,它们允许您开始创建许多有用的计算。FILTER、ALL、VALUES 和 ALLSELECTED 是许多DAX公式中非常常见的函数。
学习如何混合使用表函数来产生您想要的结果是特别重要的,因为它将允许您无缝地实现高级计算。此外,当与 CALCULATE 和上下文转换混合使用时,表函数会产生紧凑、整洁和强大的计算。在接下来的章节中,我们将介绍计算上下文和CALCULATE 函数。在学习了CALCULATE 之后,您可能会重新阅读本章,使用表函数作为CALCULATE 的参数,从而充分利用它们的潜力。
网友评论