2015-01-02 51 views
0

我在PowerPivot中有一个表格(getECRs)。用多个标准来计算项目

现在,我已经能够创建计算列计算多少次该行的客户ID(BAN)的BAN列出现下列公式:

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

我是什么难以在PowerPivot中为CALCULATE公式添加多个条件。

每一行都有一列给出生成请求的日期_CreateDateKey。我试图包含仅包含多个BAN的标准,如果它们在该行的_CreateDateKey的7天之内(之前或之后)。

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

_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

这个公式回答您的具体问题。这是一个很好的模式下来,因为它的高度可重用 - 早期的()被引用当前行的值(略低于这一点,但更复杂的是最终的结果):

= 
    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()如果是你的真实世界场景太“开放”,你可能必须使用HASONEVALUE处理总数():

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

谢谢您的回答。数据不会总是排序(虽然我可以调整我的查询,所以它)。但即便如此,这也没有考虑到当前行日期之前或之后的7天。 – guitarthrower

+0

我完全同意摆脱“Excel心态”。此功能的结果将在IF语句中用于返回文本,以便我可以将其用作我的数据透视表中的行或列标签。我在印象之下措施不能返回文字。 – guitarthrower

+0

排序无关紧要。 7天窗口应该是微不足道的,稍后我会编辑我的答案。您绝对可以在度量中返回文本。 – Jacob