我有两个主要数据集:
- 包含所有销售交易的实际数据 .
例如 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可视化:真实数据与计划的对比情况如何 . 但是,我无法弄清楚如何关联这两个数据集,因为它们实际上不能连接在一起 .
What is the idiomatic way to do this in PowerBI?
我试过了:
-
为每个来源添加一个列及其各自的状态(
"real"
vs"plan"
) -
创建一个联盟(即"Append Queries as New")
-
添加一列
Month = MONTH([Date])
给我这个数据:
但这很奇怪,因为KPI可视化将包括“计划”数据,无论是在开始还是在结束时,它将被绘制为“当前”数字 .
预期输出是KPI可视化:
-
显示按年份(或月份,如果我的切片器设置为那样)的总销售额的绝对数量!)
-
,从计划数据中检索
Target goals
-
具有基于前几年的趋势(不包括在我的样本数据中)
我如何实现这一目标?
4 回答
有几种方法可以像这样连接表 . 您拥有的是具有不同粒度的2个表:一个销售表到达当天,目标表一直到月 . 这是一个相互建模的常见请求,它归结为具有两个事实表可以加入的查找表 .
我会推荐什么:
有一张真实数据表
有一个您的计划/目标数据表,使用该月的最后一天是好的
不要直接将这两个事实表联系起来
而是,有一个单独的日期查找表,两个表都连接到这个表 . 此日期维度至少应包含月份和年份列(例如2017年3月) .
将两个事实表加入日期表
隐藏2个事实表中的日期字段,这样您就不会想要在视觉效果中使用它们(您必须使用查找表中的日期字段)
然后,您可以创建度量以汇总实际和目标 . 然后是额外的措施,相互减去这两个措施(或将一个措施分成另一个) . 然后,所有这些措施都可以按日期表上的月份和年份进行分割 . (您也可以按日期对它们进行切片,但由于目标已分配到该月的最后一天,因此该粒度将不会有用 . )
这里有很多好的信息和例子:http://www.daxpatterns.com/handling-different-granularities/
我会这样做的方式:
将计算列添加到
real
和targets
表:Month = Date(Actual[Date].[Year],Actual[Date].[MonthNo],1)
Month = Date(Target[Date].[Year],Target[Date].[MonthNo],1)
在这些之间创建关系
Plot
SUM(RealData[Sales])
和Target[Sales]
针对Target[Month]
您可以使用PowerQuery转换数据 .
“真实”表:
“计划”表:
您获取数据的查询,我们将其命名为GetData:
您可以通过在报告级别对结果进行分组来避免使用最后一步,但这将使用户能够查看每笔销售的金额 . 如果这是预期的行为,只需删除
Group
步骤,或将其替换为Table.RemoveColumn
以删除[Date] .如果您需要 separate columns 用于计划和实际值,请转动源列 .
然后只在集群柱形图中使用GetData查询 .
您必须创建一个度量来计算实际总计和度量,以计算每个月或月末的计划 . 然后创建一个度量来比较计划总计和实际总计之间的差异 .
现在使用该度量和eEndOfMonthTargets表中的Date来构建矩阵:
对于ActualVSPlanned度量,使用条件格式化如下:
你会得到这样的东西: