Dax 计算与 power bi 数据分析中的逻辑
Dax Calculation with logic in power bi data analytics
在数据分析计算方面需要帮助。
目前,我正在获取如下消费历史数据:
根据以上数据,我正在添加自定义列以计算第 1 号中的确切消耗量(加仑)。天。喜欢:
现在,我必须为 2016 年各个 Meter ID 的消耗绘制月明智的条形图。但这里的问题是,我必须通过将 2016 年每个月的天数除以计算每个月的消耗量,然后我才能每月绘制它们,如:
y轴=每个月的消费
x 轴 = Jan Feb March Apr May Jun Jul Aug Sep Oct Nov Dec
所以,在 1 月份,消耗量应该是 = 10 + 100 + ((115/38) * 7) 加仑
注意:这里,在 ((115/38) * 7) 中:我们正在计算 1 月和整个 3 月单日 7 天的平均消耗量,然后获取 1 月的最后 7 天消耗量,以便我们可以将其添加到总消耗量的计算中一月
但是如何为这些计算添加 measure/custom column/new table?
谢谢
你需要做的比较复杂,但我的解决方案总结是:
- 计算每天的消耗量
- 计算每次阅读的开始和结束日期(例如上次阅读日期加一天,以及阅读日期)
- 将您的数据扩展为每天 1 行,而不是每次读数 1 行
您想在将数据加载到数据模型之前执行这些步骤(即在源系统中,或者在使用查询 Editor/Power 查询加载数据时)。
下面,我假设您使用的是查询 Editor/Power 查询。但是,如果您可以使用您的源系统,它通常是更好的选择(因为源系统可能是一个比您的桌面快得多的数据库)。
请注意,您的天数计算对我来说没有意义。 2016年1月24日到2016年3月31日之间有超过38天,1月10日到1月24日也有13天以上。因此,很难判断你是否想要一个新的读数算在那天以前的读数被读取,或者在下一个完整的一天。我假设是前者。另请注意,我是在您的天数计算正确的基础上进行的
计算每天的消耗量
这是最简单的步骤,因为您已经计算了消耗量和天数。把一个除以另一个。在查询编辑器中,您可以单击 Consumption (gallons) 列和 select Add Column > Standard > 除。在 值 下,选择 在列中使用值 ,然后选择 select 天数列。
计算每次阅读的开始和结束日期
阅读的日期是结束日期,因此您可以将日期重命名为结束日期(因为阅读是追溯应用的)。
对于开始日期,您需要在查询编辑器中添加索引列(添加列 > 索引列) .在执行此操作之前,您需要确保您的数据按仪表 ID 和日期升序 排序。调用列 Index.
接下来,添加列 > 自定义列 并从上一行中提取阅读日期。现在将新列命名为 Previous End Date。
// 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,因为我们希望读数适用于上次读数的次日,而不是上次读数的当天。
注意,如果您希望阅读日期计入前期,请从结束日期减去 1,而不是将开始日期(前一个结束日期)加 1。
将您的数据扩展为每天 1 行
此时,您应该有一个 Meter ID、Start Date、End Date 和 per day consumption 列来反映您的预期(即 per day consumption 在日期范围内是正确的)。
最后一步是为日期范围内的每个日期复制每一行。此线程 (https://community.powerbi.com/t5/Desktop/Convert-date-ranges-into-list-of-dates/td-p/129418), but personally, I recommend the technique (and video) posted by MarcelBeug (https://youtu.be/QSXzhb-EwHM) 中概述了几种解决方案。
你应该得到更像这样的东西(在删除和重命名列之后):
终于
现在每个计量和日期都有一行,并且已经计算了每天的消耗量,您可以构建一个视觉对象。例如,您可以在轴上使用 日期 并以 每日消耗量 作为值来制作柱形图。默认情况下,Power BI 会识别 Date 是一个日期,并将按年-季-月-日汇总。按年份和季度按小 'x',您将得到一个按月汇总每天消耗量的图表。您还可以向下钻取到单个日期。
进一步阅读
在数据分析计算方面需要帮助。 目前,我正在获取如下消费历史数据:
根据以上数据,我正在添加自定义列以计算第 1 号中的确切消耗量(加仑)。天。喜欢:
现在,我必须为 2016 年各个 Meter ID 的消耗绘制月明智的条形图。但这里的问题是,我必须通过将 2016 年每个月的天数除以计算每个月的消耗量,然后我才能每月绘制它们,如: y轴=每个月的消费 x 轴 = Jan Feb March Apr May Jun Jul Aug Sep Oct Nov Dec
所以,在 1 月份,消耗量应该是 = 10 + 100 + ((115/38) * 7) 加仑 注意:这里,在 ((115/38) * 7) 中:我们正在计算 1 月和整个 3 月单日 7 天的平均消耗量,然后获取 1 月的最后 7 天消耗量,以便我们可以将其添加到总消耗量的计算中一月
但是如何为这些计算添加 measure/custom column/new table?
谢谢
你需要做的比较复杂,但我的解决方案总结是:
- 计算每天的消耗量
- 计算每次阅读的开始和结束日期(例如上次阅读日期加一天,以及阅读日期)
- 将您的数据扩展为每天 1 行,而不是每次读数 1 行
您想在将数据加载到数据模型之前执行这些步骤(即在源系统中,或者在使用查询 Editor/Power 查询加载数据时)。
下面,我假设您使用的是查询 Editor/Power 查询。但是,如果您可以使用您的源系统,它通常是更好的选择(因为源系统可能是一个比您的桌面快得多的数据库)。
请注意,您的天数计算对我来说没有意义。 2016年1月24日到2016年3月31日之间有超过38天,1月10日到1月24日也有13天以上。因此,很难判断你是否想要一个新的读数算在那天以前的读数被读取,或者在下一个完整的一天。我假设是前者。另请注意,我是在您的天数计算正确的基础上进行的
计算每天的消耗量
这是最简单的步骤,因为您已经计算了消耗量和天数。把一个除以另一个。在查询编辑器中,您可以单击 Consumption (gallons) 列和 select Add Column > Standard > 除。在 值 下,选择 在列中使用值 ,然后选择 select 天数列。
计算每次阅读的开始和结束日期
阅读的日期是结束日期,因此您可以将日期重命名为结束日期(因为阅读是追溯应用的)。
对于开始日期,您需要在查询编辑器中添加索引列(添加列 > 索引列) .在执行此操作之前,您需要确保您的数据按仪表 ID 和日期升序 排序。调用列 Index.
接下来,添加列 > 自定义列 并从上一行中提取阅读日期。现在将新列命名为 Previous End Date。
// 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,因为我们希望读数适用于上次读数的次日,而不是上次读数的当天。
注意,如果您希望阅读日期计入前期,请从结束日期减去 1,而不是将开始日期(前一个结束日期)加 1。
将您的数据扩展为每天 1 行
此时,您应该有一个 Meter ID、Start Date、End Date 和 per day consumption 列来反映您的预期(即 per day consumption 在日期范围内是正确的)。
最后一步是为日期范围内的每个日期复制每一行。此线程 (https://community.powerbi.com/t5/Desktop/Convert-date-ranges-into-list-of-dates/td-p/129418), but personally, I recommend the technique (and video) posted by MarcelBeug (https://youtu.be/QSXzhb-EwHM) 中概述了几种解决方案。
你应该得到更像这样的东西(在删除和重命名列之后):
终于
现在每个计量和日期都有一行,并且已经计算了每天的消耗量,您可以构建一个视觉对象。例如,您可以在轴上使用 日期 并以 每日消耗量 作为值来制作柱形图。默认情况下,Power BI 会识别 Date 是一个日期,并将按年-季-月-日汇总。按年份和季度按小 'x',您将得到一个按月汇总每天消耗量的图表。您还可以向下钻取到单个日期。
进一步阅读