[英]Calculate daily targets based on monthly targets Sales Power bi
我有以下問題,但我無法繞開它,以一種整潔的方式來解決。
我想創建一個包含三行的折線圖。 我們稱其為廉價蛇。
每個銷售員。 對於已創建和已開發票的訂單,創建此圖很容易,因為它們都是按日細化的,因此創建折線圖很容易。
我只是在努力為目標創建/生成這樣一條線。 在這種情況下,我手動創建了一個帶有日期-銷售員-每日目標Eg的表。
這很麻煩。 我想做的是為每個銷售人員每月創建一個表,並且PowerBI可以“生成/計算”每日目標,這樣我就可以繪制紅線,而不必費心創建它手動為每個銷售人員。
輸入將是這樣的
+-----------+----------+--------------+--------+----------------+--------------+---------------+
| Date | Month | Salesperson | Branch | Monthly Target | Daily Target | Business days |
+-----------+----------+--------------+--------+----------------+--------------+---------------+
| 1/01/2017 | January | salesperson1 | test | 73529 | 4325 | 17 |
| 1/02/2017 | February | salesperson1 | test | 73529 | 4325 | 20 |
+-----------+----------+--------------+--------+----------------+--------------+---------------+
我有一個日期維度表,因此在我的圖表上,我將日期作為x軸,然后將runningorders / runningsales作為y軸,但我希望將其設置為每日運行目標,以便紅線與訂單和銷售。
我看了一下這種模式,但是我無法弄清楚如何生成折線圖。
https://www.daxpatterns.com/budget-patterns/
所以以某種方式,我想我需要一些東西來生成第二張表作為輸入的第一張表。 我在Dax中嘗試了一些措施,但沒有一個措施能給我提供每天的累積步驟。 它主要只是向我顯示了價值。
這些是我在其他行中使用的度量。 更改日期過濾器時,此方法效果很好。 進行銷售
RunningTotalSales = CALCULATE(sum(vw_invoice_trn_summary[NetInvoiceValue]),
FILTER(ALLSELECTED(DimTime),DimTime[Date] <= MAX(DimTime[Date])))
運行訂單
RunningTotalOrders = CALCULATE(sum(vw_orders_raised[OrderTotal]),FILTER(ALLSELECTED(DimTime),DimTime[Date] <= MAX(DimTime[Date])))
在我當前的手動解決方案中,由於我不確定我做得正確,因此全年無法很好地達到目標。
UPDATE
因此,請進一步考慮。 感覺就像我只需要能夠創建一個帶有日期-每日目標-銷售人員的表格。 基於每月目標,但不確定如何在Power Bi中做到這一點。 理想情況下,您只需添加/刪除銷售人員,即可重新生成該特定表。
我對此有兩種解決方案。 一種使用DAX,另一種使用查詢編輯器。
DAX解決方案:
1.創建一個包含您需要的所有日期的日歷表。
如果“ Targets
是包含每月目標的表,請使用如下公式創建一個新表:
Calendar = CALENDAR(EOMONTH(MIN(Targets[Date]),-1)+1,EOMONTH(MAX(Targets[Date]),0))
2.創建一個新表DailyTargets
作為您的日期和銷售人員的交叉DailyTargets
。
CROSSJOIN
函數為每個日期和銷售人員組合創建一行:
DailyTargets = CROSSJOIN(VALUES('Calendar'[Date]),VALUES(Targets[Salesperson]))
3.為您的每日目標創建一個計算列。
我通過查找每月目標並除以該月中的天數來實現:
DailyTarget = DIVIDE(
LOOKUPVALUE(Targets[MonthlyTarget],
Targets[Month], FORMAT(DailyTargets[Date],"mmmm"),
Targets[Salesperson], DailyTargets[Salesperson]),
DAY(EOMONTH(DailyTargets[Date],0)))
現在,您有一個針對每個日期和每個銷售人員的每日目標。
PowerQuery解決方案:
1.創建一個包含您需要的所有日期的日歷表。
創建一個空查詢並使用以下代碼:
= List.Dates(List.Min(Targets[Date]),
Duration.Days(Date.EndOfMonth(List.Max(Targets[Date]))
- List.Min(Targets[Date])) + 1,
#duration(1,0,0,0))
2.將此列表轉換為表格。
單擊“轉換”選項卡下的“至表”,然后將列從“ Column1”重命名為“ Date”。
3.為月份名稱創建一個自定義列。
您可以Date.MonthName([Date])
使用公式Date.MonthName([Date])
。
4.將此查詢與“ Targets
表合並(在“ Month
列中聯接)。
5.合並后,展開“ Salesperson
和“ MonthlyTarget
列。
6.通過將每月目標除以該月中的天數來創建每日目標。
您可以[MonthlyTarget]/Date.DaysInMonth([Date])
使用公式[MonthlyTarget]/Date.DaysInMonth([Date])
。
整個查詢應如下所示:
let
Source = List.Dates(List.Min(Targets[Date]), Duration.Days(Date.EndOfMonth(List.Max(Targets[Date])) - List.Min(Targets[Date])) + 1, #duration(1,0,0,0)),
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Renamed Columns" = Table.RenameColumns(#"Converted to Table",{{"Column1", "Date"}}),
#"Added Custom" = Table.AddColumn(#"Renamed Columns", "Month", each Date.MonthName([Date])),
#"Merged Queries" = Table.NestedJoin(#"Added Custom",{"Month"},Targets,{"Month"},"Targets",JoinKind.LeftOuter),
#"Expanded Targets" = Table.ExpandTableColumn(#"Merged Queries", "Targets", {"Salesperson", "MonthlyTarget"}, {"Salesperson", "MonthlyTarget"}),
#"Added Custom1" = Table.AddColumn(#"Expanded Targets", "DailyTarget", each [MonthlyTarget]/Date.DaysInMonth([Date]))
in
#"Added Custom1"
您可以按照需要將其粘貼到“高級編輯器”中,而不是一步一步地進行操作。 (只需確保使用具有的任何表名而不是Targets
。)
我有一個更簡單的解決方案:
我只需要能夠創建一個帶有日期-每日目標-銷售人員的表格。 根據每月目標
假設我有一個這樣的表:
其中“ Month
包含每個月第一天的日期。 然后,我們使用查詢編輯器菜單(Add Column > Custom Column)
添加自定義列“日期”。 我們將此公式粘貼到新列中:
= List.Dates([Month], Date.Day(Date.EndOfMonth([Month])), #duration(1, 0, 0, 0))
新列的每一行將包含該行月份內所有日期的列表。 通過單擊右上角的按鈕並選擇“擴展到新行”來擴展該列。
現在,您每天都有一行,您可以簡單地添加另一個自定義列“每日目標”,該列將每月目標除以每月的天數:
= [Monthly Target]/Date.DaysInMonth([Date])
您的桌子已經准備好了:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.