计算具有多个条件的项目

Counting items with multiple criteria

我在 PowerPivot 中有一个 table (getECRs)。

现在,我已经能够使用以下公式创建计算列来计算行的客户 ID (BAN) 在 BAN 列中出现的次数:

=CALCULATE(COUNTROWS(getECRs),ALLEXCEPT(getECRs,getECRs[BAN]))

我遇到的困难是向 PowerPivot 中的 CALCULATE 公式添加多个条件。

每一行都有一列给出了生成请求的日期_CreateDateKey。我正在尝试包含仅包含多个 BAN 的条件,前提是它们落在该行的 _CreateDateKey 的 7 天内(之前或之后)。

例如,对于一个 BAN,有以下日期及其预期计数:

_CreateDateKey    Count    Explanation
6/13/2014         3        Does not include 6/23
6/13/2014         3        Does not include 6/23
6/16/2014         4        Includes all
6/23/2014         2        Does not include the 2 items from 6/13

在 Excel 中,我会使用 COUNTIFS 语句,如下所示以获得所需的结果(使用 table 结构命名)

=COUNTIFS([BAN],[@BAN],[_CreateDateKey],">="&[@[_CreateDateKey]]-7,[_CreateDateKey],"<="&[@[_CreateDateKey]]+7)

但我似乎无法弄清楚日期所需的相关标准。我尝试将以下内容作为 CALCULATE 函数的标准,但它导致了错误:

getECRs[_CreateDateKey]>=[_CreateDateKey]-7

错误:Column '_CreateDateKey' cannot be found or may not be used in this expression.

这个公式回答了您的具体问题。这是一个很好的模式,因为它是高度可重用的 - EARLIER() 正在引用当前行的值(比这稍微复杂一点,但这是最终结果):

=
    CALCULATE (
       COUNTROWS ( getECRs ),
           FILTER (
             getECRs,
             getECRs[BAN] = EARLIER ( getECRs[BAN] )
             && getECRs[_CreateDateKey]
                 >= EARLIER ( getECRs[_CreateDateKey] ) - 7
             && getECRs[_CreateDateKey]
                 <= EARLIER ( getECRs[_CreateDateKey] ) + 7
                   )
               )

从根本上说,您可能应该寻求摆脱使用计算列的 'Excel mindset' 并使用度量来处理这个问题。

上面的改编看起来像这样 - 它将使用您正在使用它的 PIVOT 的过滤器上下文(例如,如果 BAN 是行,那么您将获得该 BAN 的计数)。

您可能需要调整 ALL() 如果对于您的现实世界上下文来说太 'open' 并且您可能必须使用 HASONEVALUE() 处理总计:

=
     CALCULATE (
          COUNTROWS ( getECRs ),
          FILTER (
            ALL(getECRs),
                getECRs[_CreateDateKey] >= MAX ( getECRs[_CreateDateKey] ) - 7 &&
                getECRs[_CreateDateKey] <= MAX ( getECRs[_CreateDateKey] ) + 7
                 )
                )