JSLで優先順位を保持するこんにちは、
一連の製品の合計列数を作成するスクリプトを作成しようとしています。 奇数の列はオンスの合計数を表し、偶数の列は容器の数を示します。 各ペアを乗算し、結果を合計する必要があります。 以下の簡単なスクリプトを思いつきましたが、列の結果の数式には、優先順位を維持するために必要な括弧が含まれておらず、列にはデータがありません。 明らかに何かが欠けていますが、何がわかりません。 サンプルデータとスクリプトを添付します。
ありがとう!
dt = currentdatatable();
New Column( "DET Current Total TD", Numeric, "Continuous", Format( "Best", 12 ), Formula(
(:Name( "DET_P51_AMT_NEW_1. TD" ) * :Name( "DET_P51_AMT_NEW_2. TD" )) +
(:Name( "DET_P51_AMT_NEW_3. TD" ) * :Name( "DET_P51_AMT_NEW_4. TD" )) +
(:Name( "DET_P51_AMT_NEW_5. TD" ) * :Name( "DET_P51_AMT_NEW_6. TD" )) +
(:Name( "DET_P51_AMT_NEW_7. TD" ) * :Name( "DET_P51_AMT_NEW_8. TD" )) +
(:Name( "DET_P51_AMT_NEW_9. TD" ) * :Name( "DET_P51_AMT_NEW_10. TD" )) ));
Re: JSL で優先順位を保持する統計セクションの関数は多くの場合、欠損値を無視しますが、すべてではありません。 それらをチェックしてください!
Re: JSL で優先順位を保持する落ち着いてヴィンス。あなたの頭をしっかりと固定する必要があります。
SUMダンの情報ありがとうございます。それは考えていませんでした!
Re: JSL で優先順位を保持するなんてこった、これは私の頭を爆発させました。
行方不明を心配しないオペレーターは他にいますか?
ウィッシュリストへ!!
Re: JSL で優先順位を保持するはい、最終的に「Sum」を使用して式を作成しましたが、それは魅力のように機能しました. みんな、ありがとう!
dt << New Column( "DET TOTAL CURRENT Ajax Powder",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula(
Sum(
:"DET_P1_AMT_NEW_1. Ajax Powder" * :"DET_P1_AMT_NEW_2. Ajax Powder",
:"DET_P1_AMT_NEW_3. Ajax Powder" * :"DET_P1_AMT_NEW_4. Ajax Powder",
:"DET_P1_AMT_NEW_5. Ajax Powder" * :"DET_P1_AMT_NEW_6. Ajax Powder",
:"DET_P1_AMT_NEW_7. Ajax Powder" * :"DET_P1_AMT_NEW_8. Ajax Powder",
:"DET_P1_AMT_NEW_9. Ajax Powder" * :"DET_P1_AMT_NEW_10. Ajax Powder"
)
)
);
Re: JSL で優先順位を保持するこれらはすべて、欠落している値を処理する方法を示す素晴らしいスクリプト例です。 しかし、これを処理する関数があります: Sum.
Sum 関数は、数式エディタの統計グループに表示されます。
Re: JSL で優先順位を保持する不足に対処する別の方法。
さらに詳しく説明すると、欠損値によって演算 (加算、減算、比較) された値は、通常、欠損値を返します。
Names default to here(1);
dt = currentdatatable();
// get all rows as matrix
m = dt[0, {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD"
, "DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD"
, "DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD"
, "DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD"
, "DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"
}];
// set all the missing to a value, 0 in this case
m[Loc(ismissing(m))] = 0;
// reset the table to the matrix
dt[0, {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD"
, "DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD"
, "DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD"
, "DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD"
, "DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"
}]; = m;
dt <<NEW column=""></NEW>Re: JSL で優先順位を保持するこのコードはおそらくより効率的です。
dt = currentdatatable();
col_list = {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD",
"DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD",
"DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD",
"DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD",
"DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
missing_rows = dt << get rows where(is missing(as column(dt, one_col)));
if (nrows(missing_rows) > 0,
column(dt, one_col)[missing_rows] = 0;
);
);Re: JSL で優先順位を保持するすべての欠損値のために失敗しています。より複雑な数式を記述するか、欠損値をすべて 0 に変換することができます。
dt = currentdatatable();
col_list = {"DET_P51_AMT_NEW_1. TD", "DET_P51_AMT_NEW_2. TD",
"DET_P51_AMT_NEW_3. TD", "DET_P51_AMT_NEW_4. TD",
"DET_P51_AMT_NEW_5. TD", "DET_P51_AMT_NEW_6. TD",
"DET_P51_AMT_NEW_7. TD", "DET_P51_AMT_NEW_8. TD",
"DET_P51_AMT_NEW_9. TD", "DET_P51_AMT_NEW_10. TD"};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
for (k = 1, k <= nrows(dt), k++,
if (is missing(column(dt, one_col)[k]),
column(dt, one_col)[k] = 0;
);
);
);Re: JSL で優先順位を保持する確かに、付いています。 お手伝いありがとう!
Re: JSL で優先順位を保持するJMP は不要な括弧を削除しました。優先順位は、最初に乗算、次に加算です。それはあなたの括弧がどうなるかに従います。小さなテーブルを試してみたところ、数字がチェックアウトされました。
テーブルを取り付けていただけますか?プロジェクト ファイルが存在しないファイルを探しました。
Re: JSL で優先順位を保持するありがとう、私はそれを試しましたが、括弧はまだ消えています。
:DET_P51_AMT_NEW_1. TD * :DET_P51_AMT_NEW_2. TD + :DET_P51_AMT_NEW_3. TD * :DET_P51_AMT_NEW_4. TD +
:DET_P51_AMT_NEW_5. TD * :DET_P51_AMT_NEW_6. TD + :DET_P51_AMT_NEW_7. TD * :DET_P51_AMT_NEW_8. TD +
:DET_P51_AMT_NEW_9. TD * :DET_P51_AMT_NEW_10. TD
Re: JSL で優先順位を保持する括弧は問題ないようです。メッセージをテーブルに送信する必要があります。
dt = currentdatatable();
dt << New Column( "DET Current Total TD", Numeric, "Continuous", Format( "Best", 12 ), Formula(
(:Name( "DET_P51_AMT_NEW_1. TD" ) * :Name( "DET_P51_AMT_NEW_2. TD" )) +
(:Name( "DET_P51_AMT_NEW_3. TD" ) * :Name( "DET_P51_AMT_NEW_4. TD" )) +
(:Name( "DET_P51_AMT_NEW_5. TD" ) * :Name( "DET_P51_AMT_NEW_6. TD" )) +
(:Name( "DET_P51_AMT_NEW_7. TD" ) * :Name( "DET_P51_AMT_NEW_8. TD" )) +
(:Name( "DET_P51_AMT_NEW_9. TD" ) * :Name( "DET_P51_AMT_NEW_10. TD" )) ));