在PowerBI KPI可视化中组合实际数据和计划数据

时间:2017-03-08 09:50:55

标签: powerbi

我有两个主数据集:

  1. 包含所有销售交易的真实数据。

    例如RealData

    Date;Sales
    16-01-2017;1200
    20-01-2017;1500
    05-02-2017;800
    08-02-2017;1100
    13-02-2017;300
    

  2. 我希望实现的总销售额计划,每个月的最后一天总计。

    例如EndOfMonthTargets

    Date;Sales
    31-01-2017;3000
    28-02-2017;2500
    

  3. 在我的真实数据中,我(a)也有2017年之前的数据,显然我有2017年每个月的目标.RealData始终是实时/最新的。

    我要做的是展示KPI可视化:真实数据与计划的对比情况如何。但是,我无法弄清楚如何关联这两个数据集,因为它们实际上不能连接在一起。

    在PowerBI中执行此操作的惯用方法是什么?

    我试过了:

    • 为每个来源添加一个列及其各自的状态("real" vs "plan"
    • 创建联合(即“将查询添加为新”)
    • 添加列Month = MONTH([Date])

    给我这些数据:

    sample unioned data

    但这很奇怪,因为KPI可视化将在开始时包括“计划”数据,或者在结束时将其绘制为“当前”数字。

    预期输出是KPI可视化:

    • 显示按年份(或月份,如果我的切片器设置为那样)的总销售额绝对数量!)
    • 从计划数据中检索到Target goals
    • 基于前几年的趋势(未包含在我的样本数据中)

    我如何实现这一目标?

4 个答案:

答案 0 :(得分:2)

我会这样做:

  • 将计算列添加到realtargets表中:
    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]

enter image description here

enter image description here

enter image description here

enter image description here

答案 1 :(得分:2)

有几种方法可以像这样连接表格。您拥有的是具有不同粒度的2个表:一个销售表到达当天,目标表一直到月。这是一个相互建模的常见请求,它归结为具有两个事实表都可以加入的查找表。

我建议:

  1. 有一张真实数据表
  2. 使用当月的最后一天准备好您的计划/目标数据表
  3. 不要直接将这两个事实表联系起来
  4. 而是有一个单独的日期查找表,两个表都连接到这个表。这个日期维度至少应该有一个月和一个月。年份专栏(例如2017年3月)。
  5. 将两个事实表加入您的日期表
  6. 隐藏2个事实表中的日期字段,这样您就不会想要在视觉效果中使用它们(您必须使用查找表中的日期字段)
  7. 然后,您可以创建用于汇总实际和目标的度量。然后是额外的措施,相互减去这两个措施(或将一个措施分成另一个)。然后,所有这些措施都可以按月分类。你的日期表上的一年。 (您也可以按日期对它们进行切片,但由于目标已分配到该月的最后一天,因此该粒度将不太有用。)

    有很多好的信息和示例: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来构建矩阵:

enter image description here

对于ActualVSPlanned度量,使用条件格式化如下:

enter image description here

你会得到这样的东西:

enter image description here

答案 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查询。