使用多个条件计算项目

时间:2015-01-02 21:19:52

标签: powerpivot

我在PowerPivot中有一个表(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语句,如下所示,以获得所需的结果(使用表结构命名)

=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.

1 个答案:

答案 0 :(得分:1)

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

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

从根本上说,你可能希望摆脱“Excel”思维模式。使用计算列并使用度量处理此问题。

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

如果过度打开,您可能需要调整ALL()&#39;对于您的真实世界上下文,您可能必须使用HASONEVALUE()来处理总计:

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