使用功率双数据分析中的逻辑进行Dax计算

时间:2017-03-23 10:59:49

标签: powerbi dax customcolumn

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

Data

对于上述数据,我正在添加用于计算精确消耗(加仑)的自定义列。天。像:

calculated data

现在,我必须绘制月份明智的条形图,以便在2016年消费相应的Meter ID。但这里的问题是,我将不得不计算每个月的消费量,将其除以2016年各个月的天数,然后我才能每月绘制一次,如: y轴=每个月的消耗量 x轴= 1月2月3月4月5月6月7月8月9月10月11月11月

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

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

由于

1 个答案:

答案 0 :(得分:1)

您需要做的事情相对复杂,但我的解决方案摘要是:

  1. 计算每日消费量
  2. 计算每次阅读的开始和结束日期(例如,上一个阅读日期加上一天和阅读日期)
  3. 将您的数据扩展为每天1行,而不是每次读取1行
  4. 您希望在将数据加载到数据模型之前(即在源系统中,或者使用查询编辑器/电源查询加载数据时)执行这些步骤。

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

    请注意,您的天数计算对我来说没有意义。在2016年1月24日到2016年3月31日之间有超过38天。在1月10日到1月24日期间还有超过13天。因此,很难说您是否希望新的阅读量计入当天以前的阅读,或在下一整天。我假设前者。另请注意,我已根据您的天数计算正确进行

    计算每日消费量

    这是最简单的步骤,因为您已经计算了消耗量和天数。只是分开一个。在查询编辑器中,您可以单击消耗(加仑)列并选择添加列> 标准>的鸿沟即可。在下,选择使用列中的值,然后选择天数列。

    Divide by No. Of Days

    计算开始&每次阅读的结束日期

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

    对于开始日期,在查询编辑器中,您需要添加索引列(添加列> 索引列)。您需要确保您的数据按照Meter ID和日期升序排序之前进行排序。调用列索引

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

    // 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([Previous End Date], 1)

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

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

    此时,您应该有一个Meter ID,开始日期,结束日期和每日消费列,它反映了您的预期(即每日消费量对于日期范围是正确的)。

    Data so far (assuming your No. of Days and Per Day Consumption columns are correct, which they aren't

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

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

    Final data model

    <强>最后

    现在你每米有一排&amp;日期,已经计算出每日消费量,您可以构建视觉效果。例如,您可以在轴上使用日期执行柱形图,并将每日消耗量作为值。默认情况下,Power BI会识别 Date 是一个日期,并将按年 - 季 - 月 - 日进行累计。按下小&#39; x&#39;按年和季度,您将有一个图表,按月汇总每日消费量。您还可以深入查看个人日期。

    Final chart

    进一步阅读

    1. Reading a value from a previous row in Power Query
    2. If Statements in Power Query
    3. The AddDays function in Power Query
    4. Adding Comments in Power Query
    5. Catching Errors in Power Query
    6. Converting a date range into a list of dates(Marcel Beug&#39;解决方案)
    7. A similar problem I previously answered