2015-01-02 74 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