|
ピポットテーブルの様な累計
売上目標と受注残がありまして、日別の目標達成率(日割りの予定額に対しての進捗率)を出したいのですが、納期の前日に上がる場合(出荷日の前日)もあれば、そうでない場合(工事の完了後)もありますし、土日の休日も変則的で、かつ工事は土日もあるので休日の前日に入れたいのです。 それはおいておいて、先ず、実際に累計を出そうとすると難しい。 日にちのみの単純な累計は出来たのですが、複数の条件だと皆目見当が付きません。 御教授いただけませんでしょうか?
hashtbl 注残 dim 計[1][1000] id = Fopen("", F_READ or F_WRITE) Fput(id,データ, F_ALLTEXT) for i = 2 to fget(id, F_LINECOUNT) 注残[fget(id, i, 1)] = 0 next for s = 2 to fget(id, F_LINECOUNT) for i = 0 to Length(注残)-1 ifb 注残[i, HASH_KEY] >= fget(id, s, 1) then 計[0][i] = 注残[i, HASH_KEY] IF CHKNUM(計[1][i]) = FALSE THEN 計[1][i] = 0 計[1][i] = 計[1][i] + fget(id, s, 2) endif next next for i = 0 to Length(注残)-1 print i+"-"+ 計[0][i] + " = " +計[1][i] next fclose(id)
TEXTBLOCK データ 納期,金額 20141115,100 20141115,200 20141116,200 20141116,300 20141117,400 20141117,500 ENDTEXTBLOCK
↓
納期,得意先,出荷区分,金額 20141115,A社,前日,100 20141115,A社,当日,200 20141116,B社,翌日,100 20141116,B社,翌日,200
|
No.438 2014/11/15(Sat) 10:43:15
|
☆ Re: ピポットテーブルの様な累計 / しゅん |
|
|
気持ちは伝わりますが、データが不足していて、誰も回答できないと思います。
書かれているのは、納期と金額だけですが、求めるものには納期・得意先・出荷区分・金額と、情報が増えています。 また、20141117のデータが対象外となる理由の仕様明記もありません。
不足している情報を補えば、回答がもらえるかもしれませんよ!
|
No.442 2014/11/15(Sat) 22:22:52
|
|
☆ Re: ピポットテーブルの様な累計 / sen |
|
|
>☆ Re: ピポットテーブルの様な累計 / しゅん >気持ちは伝わりますが、データが不足していて、誰も回答できないと思います。
文章がおかしくて済みません。 自分でも何を質問しているのか分からなくなってましたが、落ち着いて頭を整理した結果、納期と得意先でクロス累計を出したい事が判明しました。(^_^) 御教授いただけませんでしょうか?
自分で作成できた単純な累計 TEXTBLOCK データ 納期,金額 20141115,100 20141115,200 20141116,200 20141116,300 20141117,400 20141117,500 ENDTEXTBLOCK ↓ 結果 20141115 300 20141116 800 20141117 1700
作成したい累計 TEXTBLOCK データ 納期,得意先,金額 20141115,A社,100 20141115,B社,100 20141115,C社,100 20141116,A社,200 20141116,B社,200 20141116,C社,200 20141117,A社,300 20141117,B社,300 20141117,C社,300 ENDTEXTBLOCK ↓ 結果 得意先 A社 B社 C社 合計 20141115 100 100 100 300 20141116 300 300 300 900 20141117 600 600 600 2800
|
No.478 2014/11/23(Sun) 15:43:23
|
|
☆ Re: ピポットテーブルの様な累計 / Liners |
|
|
まだデータ不足で、累計なのでさらに話がややこしいですね。正直、表計算の方が楽です。 しかし、出来ないわけではないので、連想配列を使った方法の例を示します。
ただ、連想配列は一対一の対応なので、基本的には多次元化はできません。 今回はキーを工夫することで疑似的に複数扱いますが、ユニークコードであることに注意してください。
また、連想配列をインデックス用とデータ用に分けて、キーを合成[納期+社名]して複数に対応、データは 日ごとの合計までを格納して、累計は計算で求めます。
TEXTBLOCK データ 納期,得意先,金額 20141115,A社,100 20141115,B社,100 20141115,C社,100 20141116,A社,200 20141116,B社,200 20141116,C社,200 20141117,A社,300 20141117,B社,300 20141117,C社,300 ENDTEXTBLOCK
hashtbl 納期 = HASH_SORT hashtbl 得意先
data = split(データ, "<#cr>")
for i = 1 to length(data) -1 d = split(data[i], ",") k = d[0] t = d[1] n = d[2] 納期[k] = 納期[k] + val(n) 得意先[k + t] = 得意先[k + t] + val(n) next
print "得意先 A社 B社 C社 合計"
k = 納期[0, hash_key] a = 得意先[k + "A社"] b = 得意先[k + "B社"] c = 得意先[k + "C社"] s = 納期[k]
for i = 0 to length(納期) -1 if i <> 0 k = 納期[i , hash_key] a = a + 得意先[k + "A社"] b = b + 得意先[k + "B社"] c = c + 得意先[k + "C社"] s = s + 納期[k] endif print k + format(a, 6) + format(b, 6) + format(c, 6) + format(s, 6) next sleep(60)
|
No.480 2014/11/23(Sun) 18:45:17
|
|
☆ Re: ピポットテーブルの様な累計 / sen |
|
|
有り難うございます。 見事に集計されています。 でも、難しい。(^_^)
|
No.520 2014/11/30(Sun) 23:15:13
|
|
☆ Re: ピポットテーブルの様な累計 / satocha |
|
|
分かりやすい書き方になったでしょうか
const 納期=0 const 得意先=1 const 金額=2 data=split(データ,"<#cr>") dlen=length(data) - 1 dim 各項[ dlen ] for i = 1 to dlen 各項[ i ]=split( data[ i ], "," ) next
//納期で集計するならこんな感じ dim sum=0 for i = 1 to dlen if 各項[ i ][ 納期 ] = "20141116" then sum = sum + val( 各項[ i ][ 金額 ] ) next msgbox( "20141116の集計は" + sum )
//得意先で集計するならこんな感じ sum=0 for i = 1 to dlen if 各項[ i ][ 得意先 ] = "C社" then sum = sum + val( 各項[ i ][ 金額 ] ) next msgbox( "C社の集計は" + sum )
TEXTBLOCK データ 納期,得意先,金額 20141115,B社,100 20141115,C社,100 20141116,A社,200 20141116,B社,200 20141116,C社,200 20141117,A社,300 20141117,B社,300 20141117,C社,300 ENDTEXTBLOCK
|
No.527 2014/12/02(Tue) 21:57:02
|
|