Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 电力查询中的计算_Excel_Powerquery_Vba - Fatal编程技术网

Excel 电力查询中的计算

Excel 电力查询中的计算,excel,powerquery,vba,Excel,Powerquery,Vba,我正在尝试创建一个位于数百个CSV文件中的数据汇总表。我创建了一些power查询,将数据转换为一个包含五列(Name_Age、Events、MS、Name、Age)的表,并将其导入Excel中的表中。此表称为RawData。 在第二个选项卡中,我有一个VBA脚本将原始数据复制到第二个名为Prep的表中。第二个表是必需的,因为我有一个计算持续时间的第六列。第二个表是必需的,因为我不知道如何在Power Query中进行计算。 所以,MS代表毫秒。此字段表示事件发生的时间。我需要计算事件的持续时

我正在尝试创建一个位于数百个CSV文件中的数据汇总表。我创建了一些power查询,将数据转换为一个包含五列(Name_Age、Events、MS、Name、Age)的表,并将其导入Excel中的表中。此表称为RawData。

在第二个选项卡中,我有一个VBA脚本将原始数据复制到第二个名为Prep的表中。第二个表是必需的,因为我有一个计算持续时间的第六列。第二个表是必需的,因为我不知道如何在Power Query中进行计算。

所以,MS代表毫秒。此字段表示事件发生的时间。我需要计算事件的持续时间,即下一个事件的毫秒-当前事件的毫秒。以事件AR为例,我的公式取F(32635)的MS,减去AR(32301)的MS,得到334的持续时间。ER代表记录结束或主题的时间线结束。在Power Query中如何执行此操作


我可以在Excel中完成,但我正在使用宏将原始数据复制到Prep中。我更愿意在Power Query中完成所有操作。另一个原因是我有一个数据透视表来总结整个事情。如果我可以在Power Query中获得计算的持续时间,我可以跳过宏。

为了从当前行中减去下一行中的字段,您需要使用本文所述的相对单元格引用:

因为您希望使用透视表计算数据,我建议将数据加载到数据模型中,并使用Power Pivot执行计算。使用公式添加计算列

=CALCULATE(Min(Table1[MS]),FILTER(Table1,EARLIER(Table1[MS]) < Table1[MS]))
您还可以在第一个公式中添加其他过滤器,以便仅比较与相同“名称\年龄”相关的MS值:

=计算(最小值(表1[MS])、筛选(表1,更早的值(表1[MS])
有关previous()的更多信息,请参见尝试以下操作(电源查询代码):

//从源表列生成两个列表(时间和类型)

Time = Input[MS],
Type = Input[Event],
//创建要循环的整数列表,从0到时间列表的大小减去1

Loop = {0..(List.Count(Time)-1)},
//生成一个新的列表(增量),计算时间列表中的值减去的持续时间:值(位置+1)-值(位置)。如果类型(位置)=“ER”返回“NA”

//将增量列表添加到原始表中

Indexed = Table.AddIndexColumn(Input,"Duration"),
Output = Table.TransformColumns(Indexed, {"Duration", each Delta{_}})
in
Output
Time = Input[MS],
Type = Input[Event],
Loop = {0..(List.Count(Time)-1)},
Delta = List.Transform(Loop, each if Type{_}="ER" then "NA" else Time{(_+1)}-Time{_}),
Indexed = Table.AddIndexColumn(Input,"Duration"),
Output = Table.TransformColumns(Indexed, {"Duration", each Delta{_}})
in
Output