我有两个主数据集:
包含所有销售交易的真实数据。
例如RealData
:
Date;Sales
16-01-2017;1200
20-01-2017;1500
05-02-2017;800
08-02-2017;1100
13-02-2017;300
等
我希望实现的总销售额计划,每个月的最后一天总计。
例如EndOfMonthTargets
:
Date;Sales
31-01-2017;3000
28-02-2017;2500
等
在我的真实数据中,我(a)也有2017年之前的数据,显然我有2017年每个月的目标.RealData始终是实时/最新的。
我要做的是展示KPI可视化:真实数据与计划的对比情况如何。但是,我无法弄清楚如何关联这两个数据集,因为它们实际上不能连接在一起。
在PowerBI中执行此操作的惯用方法是什么?
我试过了:
"real"
vs "plan"
)Month = MONTH([Date])
给我这些数据:
但这很奇怪,因为KPI可视化将在开始时包括“计划”数据,或者在结束时将其绘制为“当前”数字。
预期输出是KPI可视化:
Target goals
我如何实现这一目标?
答案 0 :(得分:2)
我会这样做:
将计算列添加到real
和targets
表中:
Month = Date(Actual[Date].[Year],Actual[Date].[MonthNo],1)
Month = Date(Target[Date].[Year],Target[Date].[MonthNo],1)
在这些
针对SUM(RealData[Sales])
Target[Sales]
和Target[Month]
答案 1 :(得分:2)
有几种方法可以像这样连接表格。您拥有的是具有不同粒度的2个表:一个销售表到达当天,目标表一直到月。这是一个相互建模的常见请求,它归结为具有两个事实表都可以加入的查找表。
我建议:
然后,您可以创建用于汇总实际和目标的度量。然后是额外的措施,相互减去这两个措施(或将一个措施分成另一个)。然后,所有这些措施都可以按月分类。你的日期表上的一年。 (您也可以按日期对它们进行切片,但由于目标已分配到该月的最后一天,因此该粒度将不太有用。)
有很多好的信息和示例:http://www.daxpatterns.com/handling-different-granularities/
答案 2 :(得分:1)
您必须创建一个度量来计算实际总数和度量,以计算每个月或月末的计划。然后创建一个度量来比较计划总计和实际总计之间的差异。
Actual =
CALCULATE (
SUM ( RealDate[Sales] ),
FILTER (
ALL ( RealDate ),
MONTH ( [Date] ) = MONTH ( MAX ( EndOfMonthTargets[Date] ) )
&& YEAR ( [Date] ) = YEAR ( MAX ( EndOfMonthTargets[Date] ) )
)
)
Planned = SUM(EndOfMonthTargets[Sales])
ActualVSPlanned = [Actual] - [Planned]
现在使用该度量和eEndOfMonthTargets表中的Date来构建矩阵:
对于ActualVSPlanned度量,使用条件格式化如下:
你会得到这样的东西:
答案 3 :(得分:1)
您可以使用PowerQuery转换数据。
"真"表:
let
Source = Table.FromRecords({[Date="16.01.2017", Sales = 1200], [Date="20.01.2017", Sales=1500], [Date="05.02.2017", Sales = 800], [Date="08.02.2017", Sales = 1100], [Date="13.02.2017", Sales = 300], [Date="10.01.2016", Sales = 1400], [Date="02.02.2016", Sales = 1800]}),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Sales", Int64.Type}})
in
#"Changed Type"
"计划"表:
let
Source = Table.FromRecords({[Date="31.01.2017", Sales = 3000], [Date="28.02.2017", Sales=2500], [Date="31.01.2016", Sales = 2800], [Date="29.02.2016", Sales = 2700]}),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Date", type date}, {"Sales", Int64.Type}})
in
#"Changed Type"
您获取数据的查询,我们将其命名为GetData:
let
t1 = Table.AddColumn(Real, "Source", each "Real"),
t2 = Table.AddColumn(Plan, "Source", each "Plan"),
MergedTable = Table.Combine({t1, t2}),
AddYear = Table.AddColumn(MergedTable, "Year", each Date.Year([Date])),
AddMonth = Table.AddColumn(AddYear, "Month", each Date.Month([Date])),
Group = Table.Group(AddMonth, {"Year", "Month", "Source"}, {{"Sales", each List.Sum([Sales]), type number}})
in
Group
您可以通过在报告级别对结果进行分组来避免使用最后一步,但这会使用户能够查看每笔销售的金额。如果这是预期的行为,只需删除Group
步骤,或将其替换为Table.RemoveColumn
以删除[日期]。
如果您需要 单独的列 以获取计划和实际值,请转动来源列。
然后只在群集柱形图中使用GetData查询。