计算具有多个条件的项目
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
)
)
我在 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
)
)