こんばんは。
UiPath Studio 2024.10.0 Community editionのユーザです。
1.やりたいこと
扱うDataTableはi_dt_Datatable2、dt_Datatable2_work1の2つで、前者からデータを抽出、計算して後者を作成しています。
io_dt_Datatable2
[Date,Start,End,TimeSpan,Status
2024/06/06,06:58:14,06:59:54,00:01:40,〇
2024/06/06,12:14:53,12:16:16,00:01:23,〇
2024/06/06,13:00:01,13:01:21,00:01:20,〇
2024/06/06,15:01:55,15:03:24,00:01:29,〇
2024/06/06,15:49:52,15:51:10,00:01:18,〇
2024/06/06,16:01:02,16:02:21,00:01:19,〇
2024/06/06,16:25:49,16:27:04,00:01:15,〇
]
dt_Datatable2_work1
例外発生のため値は確認できず。
具体的には、i_dt_Datatable2の(“Date”)でグループ単位にして、(“Start”)が9:00~12:00までの(“TimeSpan”)平均値を計算してdt_Datatable2_work1の(“Date”)に年月日(2024/06/06)を、
dt_Datatable2_work1の(“AVG TimeSpan”)にTimeSpan平均値を書き込みます。
構文は下記のとおりです。
dt_Datatable2_work1=i_dt_Datatable2.AsEnumerable.Where(Function(x) Timespan.Parse(x("Start").ToString) >= TimeSpan.FromHours(9) AndAlso TimeSpan.Parse(x("Start").ToString) < TimeSpan.FromHours(12)).groupBy(Function(x) x("Date").ToString).Select(Function(x) dt_Datatable2_work1.LoadDataRow({x.Key, x.Sum(Function(y) TimeSpan.Parse(y("TimeSpan").ToString).TotalSeconds)/ x.Count},False)).CopyToDataTable
2.相談したいこと
i_dt_Datatable2の(“Date”)でグループ単位にして、(“Start”)が9:00~12:00までのデータが無い場合は、 The source contains no DataRows.という例外が発生します。
i_dt_Datatable2の(“Date”)でグループ単位にして、(“Start”)が9:00~12:00までのデータが無い場合は、dt_Datatable2_work1(“AVG TimeSpan”)列に0を書き込みたいが、前述の構文をどう修正すれば良いでしょうか。
※同じ質問をCopilotにしたところ、下記のコードが回答として返ってきました。
invoke codeアクティビティで下記のコードが使えそうであれば、下記のコードをinvoke codeアクティビティに貼った場合の事例を回答としていただいても構いません。
dt_Datatable2_work1 = i_dt_Datatable2.AsEnumerable()
.GroupBy(Function(x) x("Date").ToString)
.Select(Function(g)
Dim rows = g.Where(Function(x) TimeSpan.Parse(x("Start").ToString) >= TimeSpan.FromHours(9) AndAlso TimeSpan.Parse(x("Start").ToString) < TimeSpan.FromHours(12)).ToList()
If rows.Any() Then
Return dt_Datatable2_work1.LoadDataRow({g.Key, rows.Sum(Function(y) TimeSpan.Parse(y("TimeSpan").ToString).TotalSeconds) / rows.Count}, False)
Else
Return dt_Datatable2_work1.LoadDataRow({g.Key, 0}, False)
End If
End Function)
.Where(Function(x) x IsNot Nothing)
.CopyToDataTable()