1

在数据分析计算方面需要帮助。目前,我得到的消费历史数据如下:

数据

在上述数据上,我添加了自定义列以计算精确消耗量(加仑)。天。喜欢:

计算数据

现在,我必须为 2016 年各个仪表 ID 的消耗绘制月份条形图。但这里的问题是,我必须通过将 2016 年每个月的天数除以来计算每个月的消费量,然后我才能每月绘制它们,如:y 轴 = 每个月的消费量 x 轴 = 1 月 2 月 3 月四月 五月 六月 七月 八月 九月 十月 十一月 十二月

所以,在一月份,消耗量应该是 = 10 + 100 + ((115/38) * 7) 加仑 注意:这里,在 ((115/38) * 7) :我们正在计算单日 7 天的平均消耗量1 月和整个 3 月,然后得到 1 月的最后 7 天消费量,以便我们可以将其添加到 1 月的总消费量中

但是如何为这些计算添加度量/自定义列/新表?

谢谢

4

1 回答 1

1

你需要做的相对复杂,但我的解决方案总结是:

  1. 计算每日消耗量
  2. 计算每次阅读的起止日期(如上一次阅读日期加一天,以及阅读日期)
  3. 将数据扩展为每天 1 行,而不是每次读数 1 行

您希望在将数据加载到数据模型(即在源系统中,或在使用查询编辑器/Power Query 加载数据时)之前执行这些步骤。

下面,我假设您使用的是查询编辑器/Power Query。但是,如果您可以使用您的源系统,它通常是更好的选择(因为源系统可能是一个比您的桌面快得多的数据库)。

请注意,您的天数计算对我来说没有意义。从 2016 年 1 月 24 日到 2016 年 3 月 31 日之间有超过 38 天。在 1 月 10 日到 1 月 24 日之间也有超过 13 天。因此,很难判断您是否要在当天计算新读数之前的读数是被读取的,或者是在接下来的一整天。我假设前者。另请注意,我是在您的天数计算正确的基础上进行的

计算每日消耗量

这是最简单的步骤,因为您已经计算了消耗量和天数。一个一个地分开。在查询编辑器中,您可以单击 Consumption (gallons) 列并选择Add Column > Standard > Divide。在Value下,选择Use values in a column,然后选择 No. of Days 列。

除以天数

计算每个读数的开始和结束日期

读数的日期是结束日期,因此您可以将 Date 重命名为End Date(因为追溯应用读数)。

对于开始日期,在查询编辑器中,您需要添加一个索引列(添加列>索引列)。在执行此操作之前,您需要确保您的数据按仪表 ID 和日期升序排序。调用列Index

接下来,添加列>自定义列并从前一行中提取阅读日期。暂时调用新列“上一个结束日期”。

// A try is necessary because we can't get the previous row if there is no previous row (we'll get an error, which we can handle in the 'otherwise' block)
try 
  if 
    // See if the previous row is for the same Meter ID
    [Meter ID] = #"Reordered Columns"{[Index] - 1}[Meter ID] 
  then 
    // If it is, grab the Reading Date from the previous row
    #"Reordered Columns"{[Index]-1}[End Date] 
  else 
    // If this is the first reading for a meter, calculate the Start Date by subtracting the No. of Days from the End Date
    Date.AddDays([End Date], -[No. of Days])
otherwise
  // If this is the first row in the table, also calculate the Start Date by subtracting the No. of Days from the End Date
  Date.AddDays([End Date], -[No. of Days])

接下来,您需要将 1 添加到开始日期,因为我们希望读数适用于上一次读数的第二天,而不是上一次读数的当天。

Date.AddDays([上一个结束日期], 1)

请注意,如果您希望阅读日期计入上一期间,请从结束日期减去 1,而不是在开始日期(上一个结束日期)上加 1。

将您的数据扩展为每天 1 行

此时,您应该有一个计量器 ID、开始日期、结束日期和反映您期望的每天消耗量列(即每天消耗量对于日期范围是正确的)。

到目前为止的数据(假设您的天数和每日消耗量列是正确的,但它们不是

最后一步是复制日期范围内每个日期的每一行。此线程中概述了几种解决方案(https://community.powerbi.com/t5/Desktop/Convert-date-ranges-into-list-of-dates/td-p/129418),但就个人而言,我推荐 MarcelBeug ( https://youtu.be/QSXzhb-EwHM ) 发布的技术(和视频)。

你最终应该得到更像这样的东西(在删除和重命名列之后):

最终数据模型

最后

现在您每米和日期有一行,并且已经计算了每天的消耗量,您可以构建一个视觉对象。例如,您可以使用轴上的日期每天的消耗作为值来制作柱形图。默认情况下,Power BI 将识别Date是一个日期,并将按年-季度-月-日汇总。按年份和季度的小“x”,你会得到一个图表,总结了每个月的每日消耗量。您还可以向下钻取到单个日期。

最终图表

延伸阅读

  1. 从 Power Query 中的前一行读取值
  2. Power Query 中的 If 语句
  3. Power Query 中的 AddDays 函数
  4. 在 Power Query 中添加注释
  5. 捕获 Power Query 中的错误
  6. 将日期范围转换为日期列表(Marcel Beug 的解决方案)
  7. 我之前回答的类似问题
于 2017-05-10T19:47:06.220 回答