動態數據匯總分析我需要總結一個複雜的數據集。數據集包含一堆在過去 2 週內處理過的項目及其執行情況。為了衡量性能,我們對不同類別進行了評級。類別從 XZ001 到 XZ100。我也有子每個主要類別的類別。例如 - XZ008 有 YZ801 到 YZ809 子類別。
數據集是動態的。意味著 1 週的數據集可能有 YZ 899,但其他周可能沒有。
我將某些類別和子類別分為bucket1 和bucket2。所有其他類別將成為bucket3 的一部分。
下面是我嘗試編寫但似乎不起作用的腳本。
任何幫助表示讚賞。
cdt = open("C:\Documents\Data\out.csv");
cdt=current data table();
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If( Contains( {"XZ008","XZ010","XZ015","XZ053","YZ1374","YZ1375","YZ9429","YZ9792","YZ9908", "YZ1930","YZ1933","YZ2744","YZ4621","YZ4625","YZ4630","YZ4640","YZ4681","YZ4830"}, colname ) |(colname >= "YZ901" & colname <= "YZ916") |(colname >= "YZ954" & colname <= "YZ965") |(colname >= "YZ1360" & colname <= "YZ1371") |(colname >= "YZ2581" & colname <= "YZ2586") | (colname >= "YZ2900" & colname <= "YZ2950") | (colname >= "YZ3400" & colname <= "YZ3450"),
Insert Into( sum_lst2, col_lst2[i] )
); //Bucket1
If( Contains( {"XZ098","XZ090"}, colname ) | (colname >= "YZ9700" & colname <= "YZ9791") | (colname >= "YZ9793" & colname <= "YZ9799"),
Insert Into( sum_lst4, col_lst2[i] )
);
);//Bucket2
If(!Contains( {"XZ008","XZ010","XZ015","XZ053","XZ098","XZ090","YZ1374","YZ1375","YZ9429","YZ9792","YZ9908", "YZ1930","YZ1933","YZ2744","YZ4621","YZ4625","YZ4630","YZ4640","YZ4681","YZ4830"}, colname ) |(colname >= "YZ901" & colname <= "YZ916") |(colname >= "YZ954" & colname <= "YZ965") |(colname >= "YZ1360" & colname <= "YZ1371") |(colname >= "YZ2581" & colname <= "YZ2586") | (colname >= "YZ2900" & colname <= "YZ2950") | (colname >= "YZ3400" & colname <= "YZ3450")| (colname >= "YZ9700" & colname <= "YZ9791") | (colname >= "YZ9793" & colname <= "YZ9799"),
Insert Into( sum_lst3, col_lst2[i] )
); //Bucket3
Eval( Eval Expr( cdt << New Column( "Bucket1", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "Bucket3", formula( Sum( Expr( sum_lst3 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "Bucket2", formula( Sum( Expr( sum_lst4 ) ) ) ) ) );
樣本數據集:
| 物品 |
YZ0100 |
YZ0801 |
YZ0805 |
YZ0806 |
YZ0807 |
YZ0813 |
YZ0814 |
YZ0815 |
YZ0817 |
YZ0871 |
YZ0874 |
YZ0881 |
YZ1367 |
YZ1374 |
YZ1541 |
YZ1571 |
YZ1573 |
YZ1575 |
YZ1577 |
YZ1583 |
YZ1585 |
YZ1590 |
YZ1591 |
YZ1594 |
YZ1933 |
YZ2701 |
YZ2708 |
YZ2737 |
YZ2740 |
YZ2744 |
YZ2745 |
YZ2749 |
YZ2750 |
YZ3404 |
YZ3407 |
YZ3415 |
YZ3416 |
YZ3417 |
YZ3418 |
YZ3422 |
YZ3423 |
YZ3492 |
YZ3493 |
YZ3502 |
YZ3534 |
YZ4621 |
YZ4625 |
YZ4821 |
YZ9031 |
YZ9429 |
YZ9901 |
YZ9908 |
XZ001 |
XZ008 |
XZ013 |
XZ015 |
XZ019 |
XZ027 |
XZ034 |
XZ035 |
XZ046 |
XZ048 |
XZ090 |
XZ094 |
XZ099 |
| AAA666 |
455 |
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
1 |
5 |
|
1 |
|
|
1 |
|
|
|
1 |
|
|
|
|
|
5 |
3 |
1 |
|
|
|
|
22 |
455 |
2 |
|
|
1 |
7 |
2 |
5 |
4 |
|
|
|
22 |
| AAA755 |
118 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
118 |
|
|
|
|
|
|
|
|
|
|
|
6 |
| AAA757 |
324 |
1 |
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
1 |
|
|
|
33 |
|
3 |
|
|
|
|
1 |
|
3 |
1 |
|
|
1 |
|
3 |
|
1 |
1 |
|
1 |
|
8 |
324 |
2 |
|
|
7 |
37 |
6 |
3 |
1 |
1 |
|
1 |
8 |
| BBA696 |
480 |
|
|
|
|
|
|
|
|
1 |
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
1 |
|
|
1 |
|
|
|
|
|
|
|
|
|
5 |
|
3 |
1 |
|
|
|
100 |
480 |
4 |
|
|
1 |
1 |
1 |
5 |
3 |
1 |
|
|
100 |
| BBA786 |
155 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
|
1 |
155 |
|
|
|
|
1 |
1 |
|
1 |
|
|
|
1 |
| BBA787 |
197 |
|
|
|
|
|
|
|
|
1 |
|
|
|
|
1 |
|
1 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|
7 |
|
1 |
1 |
|
|
|
59 |
197 |
1 |
|
2 |
1 |
2 |
|
7 |
1 |
1 |
|
|
59 |
| CCA613 |
233 |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
1 |
1 |
|
1 |
1 |
|
|
2 |
|
1 |
|
|
|
|
12 |
233 |
1 |
|
|
|
1 |
4 |
2 |
1 |
|
|
|
12 |
| CCA614 |
551 |
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
2 |
1 |
|
|
|
7 |
|
|
|
|
|
|
2 |
|
|
|
1 |
|
4 |
|
4 |
|
|
1 |
|
69 |
551 |
1 |
|
|
1 |
10 |
3 |
4 |
4 |
|
|
1 |
69 |
| CCA642 |
382 |
|
|
|
|
1 |
|
|
|
|
1 |
2 |
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
2 |
|
|
|
|
2 |
|
1 |
|
4 |
|
|
1 |
4 |
1 |
4 |
|
|
|
|
91 |
382 |
4 |
|
2 |
|
2 |
7 |
5 |
5 |
|
|
|
91 |
| CCA642R |
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
|
3 |
57 |
|
|
|
|
|
1 |
|
|
|
|
|
3 |
| CCB613 |
165 |
|
|
|
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
1 |
|
|
1 |
2 |
|
|
2 |
|
|
|
1 |
1 |
1 |
|
1 |
|
1 |
1 |
|
|
|
|
|
52 |
165 |
1 |
|
1 |
|
4 |
6 |
1 |
1 |
|
|
|
52 |
| DDA624 |
113 |
6 |
|
4 |
|
|
|
7 |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
113 |
19 |
|
|
|
1 |
1 |
|
|
|
|
|
16 |
| DDA631 |
561 |
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
|
5 |
6 |
3 |
|
|
|
3 |
|
|
2 |
|
1 |
1 |
1 |
|
|
3 |
|
|
|
1 |
1 |
1 |
1 |
1 |
1 |
|
|
|
1 |
|
3 |
|
|
1 |
|
30 |
561 |
|
2 |
17 |
2 |
6 |
6 |
1 |
3 |
|
|
1 |
30 |
| DDA634 |
569 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
1 |
|
1 |
|
1 |
1 |
1 |
|
1 |
|
|
|
|
|
|
3 |
|
|
|
1 |
3 |
|
1 |
7 |
1 |
1 |
2 |
|
3 |
|
5 |
|
1 |
|
1 |
8 |
569 |
|
|
8 |
1 |
3 |
16 |
3 |
5 |
|
1 |
|
9 |
| EEA624 |
228 |
|
1 |
1 |
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
1 |
2 |
2 |
1 |
|
|
|
|
|
|
|
15 |
2 |
54 |
228 |
3 |
|
|
|
3 |
6 |
|
|
|
|
15 |
56 |
| EEA627 |
495 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
12 |
15 |
7 |
|
|
|
3 |
|
|
|
|
1 |
|
|
|
|
1 |
2 |
2 |
1 |
1 |
|
1 |
3 |
5 |
2 |
1 |
|
|
7 |
|
3 |
|
1 |
2 |
|
28 |
495 |
|
|
37 |
|
4 |
16 |
7 |
3 |
|
1 |
2 |
28 |
數據表Re: 動態數據匯總分析我在您的代碼中發現的唯一錯誤是您關閉了“)”
For( i = 1, i <= N Items( col_lst2 ), i++,
放在 Bucket 2 之後,而不是 Bucket 3 之後。
我做了一些額外的小修改,但據我所知,代碼有效
Names Default To Here( 1 );
cdt = Open( "C:\Documents\Data\out.csv" );
Current Data Table( cdt );
sum_lst2 = {};
sum_lst3 = {};
sum_lst4 = {};
col_lst2 = cdt << get column names( Numeric );
For( i = 1, i <= N Items( col_lst2 ), i++,
colname = Column( col_lst2[i] ) << get name;
If(
Contains(
{"XZ008", "XZ010", "XZ015", "XZ053", "YZ1374", "YZ1375", "YZ9429", "YZ9792", "YZ9908", "YZ1930", "YZ1933", "YZ2744",
"YZ4621", "YZ4625", "YZ4630", "YZ4640", "YZ4681", "YZ4830"},
colname
) | (colname >= "YZ901" & colname <= "YZ916") | (colname >= "YZ954" & colname <= "YZ965") | (colname >= "YZ1360" &
colname <= "YZ1371") | (colname >= "YZ2581" & colname <= "YZ2586") | (colname >= "YZ2900" & colname <= "YZ2950") | (
colname >= "YZ3400" & colname <= "YZ3450"),
Insert Into( sum_lst2, col_lst2[i] )
); //Bucket1
If(
Contains( {"XZ098", "XZ090"}, colname ) | (colname >= "YZ9700" & colname <= "YZ9791") | (colname >= "YZ9793" & colname
<= "YZ9799"),
Insert Into( sum_lst4, col_lst2[i] )
);//Bucket2
If(
!Contains(
{"XZ008", "XZ010", "XZ015", "XZ053", "XZ098", "XZ090", "YZ1374", "YZ1375", "YZ9429", "YZ9792", "YZ9908", "YZ1930",
"YZ1933", "YZ2744", "YZ4621", "YZ4625", "YZ4630", "YZ4640", "YZ4681", "YZ4830"},
colname
) | (colname >= "YZ901" & colname <= "YZ916") | (colname >= "YZ954" & colname <= "YZ965") | (colname >= "YZ1360" &
colname <= "YZ1371") | (colname >= "YZ2581" & colname <= "YZ2586") | (colname >= "YZ2900" & colname <= "YZ2950") | (
colname >= "YZ3400" & colname <= "YZ3450") | (colname >= "YZ9700" & colname <= "YZ9791") | (colname >= "YZ9793" &
colname <= "YZ9799"),
Insert Into( sum_lst3, col_lst2[i] )
); //Bucket3
);
Eval( Eval Expr( cdt << New Column( "Bucket1", formula( Sum( Expr( sum_lst2 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "Bucket3", formula( Sum( Expr( sum_lst3 ) ) ) ) ) );
Eval( Eval Expr( cdt << New Column( "Bucket2", formula( Sum( Expr( sum_lst4 ) ) ) ) ) );Re: 動態數據匯總分析更改 barcket 位置後,我的代碼正在工作,謝謝。但是 bucket3 中的數字是錯誤的。那是因為項目列中的 bucket3 值也被添加了。如何只包含列名稱以 XZ 和 YZ 開頭的列在第 3 桶?Re: 動態數據匯總分析我不明白這個問題。以下列是為 Bucket 3 添加的列。
{YZ0100, YZ0801, YZ0805, YZ0806, YZ0807, YZ0813, YZ0814, YZ0815, YZ0817, YZ0871,
YZ0874、YZ0881、YZ1367、YZ1541、YZ1571、YZ1573、YZ1575、YZ1577、YZ1583、YZ1585、
YZ1590、YZ1591、YZ1594、YZ2701、YZ2708、YZ2737、YZ2740、YZ2745、YZ2749、YZ2750、
YZ3404、YZ3407、YZ3415、YZ3416、YZ3417、YZ3418、YZ3422、YZ3423、YZ3492、YZ3493、
YZ3502、YZ3534、YZ4821、YZ9031、YZ9901、XZ001、XZ013、XZ019、XZ027、XZ034、XZ035、
XZ046、XZ048、XZ094、XZ099}
哪些列不應該在那裡?
Re: 動態數據匯總分析我有一個 !contains 語句用於 bucket3。這些列都不需要添加。所有從“XZ”和“YZ”開始的列,除了在 bucket1 和 2 中添加的那些需要添加到 bucket3。Re: 動態數據匯總分析啊,鑑於我錯過的邏輯,我認為需要如何陳述它是:
If(
Contains(
{"XZ008", "XZ010", "XZ015", "XZ053", "XZ098", "XZ090", "YZ1374", "YZ1375", "YZ9429", "YZ9792", "YZ9908", "YZ1930", "YZ1933", "YZ2744",
"YZ4621", "YZ4625", "YZ4630", "YZ4640", "YZ4681", "YZ4830"},
colname
) == 0,
If(
(colname >= "YZ901" & colname <= "YZ916") | (colname >= "YZ954" & colname <= "YZ965") | (colname >= "YZ1360" & colname <= "YZ1371") | (colname
>= "YZ2581" & colname <= "YZ2586") | (colname >= "YZ2900" & colname <= "YZ2950") | (colname >= "YZ3400" & colname <= "YZ3450") | (colname
>= "YZ9700" & colname <= "YZ9791") | (colname >= "YZ9793" & colname <= "YZ9799"),
Insert Into( sum_lst3, col_lst2[i] )
)
); //Bucket3