美文网首页
3.3 理解FILTER

3.3 理解FILTER

作者: jweishan | 来源:发表于2020-02-26 14:17 被阅读0次

第3章 使用基本表函数

理解FILTER

既然我们已经介绍了表函数是什么,那么现在就该全面阐述基本表函数了。实际上,通过组合和嵌套基本函数,您已经可以计算出许多强大的表达式。您学习的第一个函数能是FILTER

FILTER的语法如下:

FILTER ( <table>, <condition> )

FILTER接收一个表和一个逻辑条件作为参数。结果,FILTER返回所有满足条件的行。FILTER同时是表函数和迭代函数。为了返回结果,它逐行扫描评估条件的表。换句话说,它对表进行迭代。 例如,以下计算表返回Fabrikam产品(Fabrikam是品牌)。

FabrikamProducts =
FILTER (
    'Product',
    'Product'[Brand] = "Fabrikam"
)

FILTER通常用于减少迭代中的行数。例如,如果开发人员想要计算红色产品的销售量,则他们可以编写如下度量值:

RedSales :=
SUMX (
    FILTER (
        Sales,
        RELATED ( 'Product'[Color] ) = "Red"
    ),
    Sales[Quantity] * Sales[Net Price]
)

您可以在图3-2中看到结果,连同总销售额。

图3-2 RedSales仅显示红色产品的销售额

度量值RedSales是在Sales表的子集(即与红色产品相关的一组销售)中进行迭代的度量值。FILTER将条件添加到现有条件中。例如,RedSales“音频”行中显示既是“音频”类别又是红色产品的销售情况。

可以将FILTER嵌套在另一个FILTER函数中。通常,嵌套两个FILTER产生的结果与将两个FILTER函数与AND函数组合在一起的结果相同。换句话说,以下两个查询产生相同的结果:

FabrikamHighMarginProducts =
FILTER (
    FILTER (
        'Product',
        'Product'[Brand] = "Fabrikam"
    ),
    'Product'[Unit Price] > 'Product'[Unit Cost] * 3
)

FabrikamHighMarginProducts =
FILTER (
    'Product',
    AND (
        'Product'[Brand] = "Fabrikam",
        'Product'[Unit Price] > 'Product'[Unit Cost] * 3
    )
)

但是,对于大表来说,条件的选择性不同,性能有所不同。如果一个条件比另一个条件更具选择性,则首先使用嵌套FILTER函数来应用最具有选择性的条件被视为最优方法。

例如,如果有很多Fabrikam品牌的产品,但很少有产品的价格是其成本的三倍,则以下查询将筛选应用于最里面的FILTER中的Unit PriceUnit Cost。这样,该公式首先应用限制性最强的FILTER,以减少检查品牌所需的迭代次数:

FabrikamHighMarginProducts =
FILTER (
    FILTER (
        'Product',
        'Product'[Unit Price] > 'Product'[Unit Cost] * 3
    ),
    'Product'[Brand] = "Fabrikam"
)

使用FILTER,开发人员通常可以生成易于阅读和易于维护的代码。例如,假设您需要计算红色产品的数量。在不使用表函数的情况下,可能的实现方式如下:

NumOfRedProducts :=
SUMX (
    'Product',
    IF ( 'Product'[Color] = "Red", 1, 0 )
)

内部IF返回取决于产品的颜色是1还是0,并将此表达式求和将返回红色产品的数量。尽管有效,但是此代码有些棘手。下面是对相同度量的一个更好的实现:

NumOfRedProducts :=
COUNTROWS (
    FILTER ( 'Product', 'Product'[Color] = "Red" )
)

后面的表达式更好地显示了开发人员想要获得的东西。此外,代码不仅使人更容易阅读,而且DAX优化器还能够更好地理解开发人员的意图。因此,优化器产生了更好的查询计划,从而带来了更好的性能。

相关文章

  • 3.3 理解FILTER

    第3章 使用基本表函数 理解FILTER 既然我们已经介绍了表函数是什么,那么现在就该全面阐述基本表函数了。实际上...

  • 3.7 ALLSELECTED介绍

    第3章 使用基本表函数 3.1 表函数简介3.2 EVALUATE语法简介3.3 理解FILTER3.4 ALL和...

  • 3.4 ALL和ALLEXCEPT

    第3章 使用基本表函数 3.1 表函数简介3.2 EVALUATE语法简介3.3 理解FILTER3.4 ALL和...

  • 3.2 EVALUATE语法简介

    第3章 使用基本表函数 3.1 表函数简介3.2 EVALUATE语法简介3.3 理解FILTER3.4 ALL和...

  • 3.5 了解VALUES,DISTINCT和空行

    第3章 使用基本表函数 3.1 表函数简介3.2 EVALUATE语法简介3.3 理解FILTER3.4 ALL和...

  • 3.1 表函数简介

    第3章 使用基本表函数 3.1 表函数简介3.2 EVALUATE语法简介3.3 理解FILTER3.4 ALL和...

  • filter concat理解

    首先卷积 1*1,3*3,5*5,的output size 只与step有关,与卷积核的大小无关。图像经过的卷积核...

  • Kalman Filter 理解

    1.推荐入门博客: How a Kalman filter works, in pictures,有英文版和中文版...

  • Filter

    1.Filter: servlet过滤器: 自己的理解:filter只是起到对用户请求预处理和后处理的作用。后期再...

  • es6中filter和Map的区别

    我们知道在es6中filter和map同时用来方便操作数组。他们的区别我们先用例子来理解一下。 一、filter:...

网友评论

      本文标题:3.3 理解FILTER

      本文链接:https://www.haomeiwen.com/subject/zmgmchtx.html