我有以下问题,我只能用它来包围它以便以一种干净的方式做到这一点。
我想创建一个包含三行的折线图。我们称之为预算蛇。
这是每个销售人员。为创建和开票订单创建此图表非常简单,因为这些都是按日常粒度设置的,因此创建折线图很容易。
我正在努力为目标创建/生成这样一条线。 在这种情况下,我手动创建了一个包含date - salesperson - 每日目标的表 例如
这非常麻烦。我希望能做的是 为每个销售人员创建一个月度级别的表格 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])))
在我目前的手动解决方案中,整年虽然与目标行无效,但我不确定我是否正确。
更新
进一步思考这个问题。感觉就像我只需要能够创建一个带日期的表 - 每日目标 - 销售人员。根据每月目标,但不知道如何在power bi中做到这一点。理想情况下,您只需添加/删除销售人员即可重新生成特定表。
答案 0 :(得分:2)
我有两个解决方案。一个使用DAX,一个使用查询编辑器。
DAX解决方案:
1。创建一个包含所需日期的日历表。
如果Targets
是包含每月定位的表,请使用如下公式创建新表:
Calendar = CALENDAR(EOMONTH(MIN(Targets[Date]),-1)+1,EOMONTH(MAX(Targets[Date]),0))
2。创建一个新表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])
。
4. 将此查询与Targets
表合并(加入Month
列)。
5. 合并后,展开Salesperson
和MonthlyTarget
列。
6。通过将每月目标除以该月的天数来创建每日目标。
您可以使用公式[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
。)
答案 1 :(得分:0)
我有一个更简单的解决方案:
我只需要能够创建一个带有日期的表 - 每日目标 - 销售人员。基于每月目标
假设我有一张这样的表:
Month
包含每月第一天的日期。然后,我们使用查询编辑器菜单(Add Column > Custom Column)
添加自定义列“日期”。我们将此公式粘贴到新列中:
= List.Dates([Month], Date.Day(Date.EndOfMonth([Month])), #duration(1, 0, 0, 0))
新列的每一行都将包含该行月份内所有日期的列表。通过单击右上角的按钮并选择“展开到新行”来展开该列。
现在每天都有一行,您只需添加另一个自定义列“每日目标”,即将每月目标除以每月的天数:
= [Monthly Target]/Date.DaysInMonth([Date])
你的桌子准备好了: