[英]PowerBI DAX measure to restrict calculation to complete, 7-day weeks in current context
最終目標是能夠計算某物的平均每周值,同時只考慮完全包含在當前過濾器上下文中的周中的幾天。 作為增量步驟,將天數(及其關聯的相關值)動態確定為完整的工作日和不完整的工作日也會有所幫助。
因此,舉個例子,假設我們有一個 Calendar 表連接到一個標准的 Sales 表。 Sales 表非常簡單,只有一列日期、一列商品和一列銷售數量:
天 | 物品 | 數量 |
---|---|---|
2023-04-01 | A | 5個 |
2023-04-01 | 乙 | 5個 |
2023-04-02 | A | 5個 |
2023-04-03 | A | 5個 |
2023-04-04 | A | 2個 |
2023-04-05 | A | 2個 |
2023-04-07 | A | 2個 |
2023-04-08 | A | 2個 |
等等。 想象一下數據一直持續到月底——這就是篩選器上下文(比如,我們正在篩選日歷表中的日期)。 在此特定示例中,假設 ISO 標准(周從星期一開始),2023-04-01 和 2023-04-02 不是完整周的一部分,但 4 月的 rest 包含 4 個完整的 7 天周。
如您所見,從 3 號開始每天有 2 次銷售,因此每周平均為 2x7=14。 例如,更天真、不正確的計算可能只是將整個月相加 (28x2 + 2x5),除以周數 (30/7=4.2857...),得出 15.4 的值。 這不是我想要對 go 進行的計算,原因我不會在這里詳述。 我想舍棄 4 月的前 2 天(以及任何其他被截斷的周數),對 Amounts 求和,然后除以完整的周數。
如果過濾器上下文也包括 3 月,則 4 月 1 日和 2 日將是前一周(2023 年第 13 周)的一部分,因此它們應該被計算在內。 在這種情況下,三月的前 5 天將被丟棄。
解決這個問題的真正簡單方法是,如果 PBI 中的計算列是動態的,即它們響應過濾器,這意味着日歷表中的簡單動態 IsFullWeek 列可以用作過濾器。 不幸的是,這不是 DAX 的工作方式,因此需要另一種方式。
我已經做到以下幾點:
AVERAGEX(KEEPFILTERS(VALUES('Calendar'[IsoWeekOfYear])), CALCULATE(SUM('Sales'[Amount])))
這得到了每周的平均值,但我不知道如何過濾不完整的周數,老實說,我不完全確定 w.r.t 是如何工作的。 保持過濾器。 我試過這個 tp 過濾器,但沒有成功,我不明白為什么。
AVERAGEX(KEEPFILTERS(VALUES('Calendar'[IsoWeekOfYear])), CALCULATE(SUM('Sales'[Amount]), COUNT('Calendar'[IsoWeekOfYear]) = 7)))
給你 go。
銷售量:
切片器:
Output:
措施:
Average Sales (Whole Weeks) =
VAR m = CALCULATE(MIN(Sales[Day]), KEEPFILTERS(WEEKDAY('Calendar'[Date],2) = 1))
VAR s = CALCULATE(MAX(Sales[Day]), KEEPFILTERS(WEEKDAY('Calendar'[Date],2) = 7))
RETURN CALCULATE( AVERAGEX('Calendar',CALCULATE(SUM(Sales[Amount]))), Sales[Day] >= m && Sales[Day] <=s)
Measure 獲取當前上下文中的第一個星期一和當前上下文中的最后一個星期日。 然后它使用這兩個日期來過濾 AVERAGEX 計算。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.