使用小时组成的数据绘制每周工作日的平均销售情况

时间:2019-04-08 18:34:47

标签: excel powerbi powerpivot powerquery

我正在使用PowerBI桌面,并且正在创建一个图表以显示每个工作日的平均销售额

enter image description here

我的数据采用以下格式:

(在Excel中进行采样以删除敏感信息,并添加了颜色以便于可视化)

sample_data

我的问题是:由于每天被分成24行(小时),因此我的平均值错误了24倍。

例如,如果我在具有五个星期二(工作日代码:2)的切片器中选择“ January-2019”,我想在条码2上看到:

  • (工作日= 2时的金额总和)/ 5

我正在计算:

  • (工作日= 2时的总金额)/(24 * 5)

我可以想到一些方法来解决这个问题,但是它们涉及自定义列或辅助表。我敢肯定,使用DAX和度量有一个简单的答案,但我仍在学习中。

如何正确计算呢?

2 个答案:

答案 0 :(得分:1)

据我所知,您正在使用3个不同的列。您可以更好地将其与日期时间结合使用,让power-bi处理它。

以下m语言将为您完成此操作:

let
    Source = Excel.Workbook(File.Contents("C:\....\Test.xlsx"), null, true),
    Sheet1_Sheet = Source{[Item="Sheet1",Kind="Sheet"]}[Data],
    #"Promoted Headers" = Table.PromoteHeaders(Sheet1_Sheet, [PromoteAllScalars=true]),
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{{"date", type datetime}, {"hour", type time}, {"amount", type number}}),
    #"Added Custom" = Table.AddColumn(#"Changed Type", "Date", each  [date]+ Duration.FromText(Time.ToText([hour]))),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"amount", "Date"}),
    #"Filtered Rows" = Table.SelectRows(#"Removed Other Columns", each ([amount] <> 0))
in
    #"Filtered Rows"

诀窍在添加的列中:#“添加的自定义” = Table.AddColumn(#“更改类型”,“日期”,每个[日期] + Duration.FromText(Time.ToText([hour])))

在这里我将时间添加到日期中。

我还删除了空行(零数量),您不需要它们。

enter image description here

我将“日期和工作日”添加到了Axis,以便用户现在可以从年,月,日到工作日向下钻取。 请注意,您需要计算金额的总和,而不是平均值。

答案 1 :(得分:1)

让我们假设您的表名是“ Data”。创建3个DAX 度量(未计算的列):

措施1:

Total Amount = SUM(Data[Amount])

措施2:

Number of Days = DISTINCTCOUNT(Data[Date])

措施3:

Average Amount per Day = DIVIDE( [Total Amount], [Number of Days])

将最后一个度量拖放到图表中,它将为您提供预期的结果。