我在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.
答案 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
)
)