圖型統計分析時,該如何一一呈現結果 |
尚未結案
|
goodjimmy
一般會員 發表:20 回覆:26 積分:9 註冊:2004-02-19 發送簡訊給我 |
各位高手:
在我設計的統計指標中,有分子和分母組成一個公式相除,形成每個月的結果
如今,要用長條圖,跑每一個月相除的結果,卻無法用迴圈控制?該如何設計呢? 分母的程式
public startday: string;//啟始日期 endday: string;//結束日期 Node: TTreeNode; pk: string;//日期欄位(主鍵) str: string;//sql判斷條件 table: string;//sql表格名稱 s1: array [1..10]of integer;//每月分子數值陣列 s2: array [1..10] of integer;//每月分母數值陣列 sqlmitem: string;//主程式分子 sqlditem: string;//主程式分母 function TForm2.mSQL(mitem: string; str: string): string; var i:integer; begin DataModule1.ADOQuery2.SQL.Text := 'Select ' mitem 'as count from ' table ' where ' str ' and ' pk ' between ' '''' startday '''' 'and ' '''' endday '''' ' group by ' pk; DataModule1.ADOQuery2.Open; DataModule1.ADOQuery2.First; for i:= 1 to 10 do begin s1[i] := DataModule1.ADOQuery2.FieldValues['count']; DataModule1.ADOQuery2.Next; end; end; 分子程式 function TForm2.dSQL(ditem: string): string; var i:integer; begin DataModule1.ADOQuery3.SQL.Clear; DataModule1.ADOQuery3.SQL.Text := 'Select ' ditem 'as count from ' table ' where ' pk ' between ' '''' startday '''' ' and ' '''' endday '''' ' group by ' pk; DataModule1.ADOQuery3.Open; DataModule1.ADOQuery3.First; for i:= 1 to 10 do begin s2[i] := DataModule1.ADOQuery3.FieldValues['count']; DataModule1.ADOQuery3.Next; end; end; 圖表主程式 function TForm2.SQL(pk: string; sqlmitem: string; sqlditem: string; table: string): string; var i:Integer; begin try Form4 := Tform4.Create(Application); Form4.TreeView1.LoadFromFile('c:\住院.txt'); Form4.DBChart2.LeftAxis.Title.Caption := '人數'; Form4.DBChart2.BottomAxis.Title.Caption := '日期'; Form4.DBChart3.Title.Text.Text := Node.Text; Form4.DBChart3.LeftAxis.Title.Caption := '人數'; Form4.DBChart3.BottomAxis.Title.Caption := '日期'; Form4.DBchart1.Title.text.Text := Node.Text; Form4.DBChart2.Title.Text.Text := Node.Text; DataModule1.ADOQuery1.SQL.Clear; DataModule1.ADOQuery1.SQL.Text := 'Select ' pk ',' sqlmitem '/' sqlditem ' from ' table ' where ' pk ' between ' '''' startday '''' ' and ' '''' endday '''' ' group by ' pk; DataModule1.ADOQuery1.Open; while not DataModule1.ADOQuery1.EOF do begin Form4.Series1.DataSource := DataModule1.ADOQUERY1; Form4.Series1.PieValues.ValueSource :=DataMoudle1.ADOQuery1.Fields[1].FieldName; Form4.Series3.DataSource := DataModule1.ADOQUERY1; Form4.Series3.XValues.ValueSource := DataModule1.ADOQuery1.Fields[0].FieldName; Form4.Series3.YValues.ValueSource := DataModule1.ADOQuery1.Fields[1].FieldName; Form4.Series2.DataSource := DataModule1.ADOQuery1; Form4.Series2.XLabelsSource := DataModule1.ADOQuery1.Fields[0].FieldName; Form4.Series2.YValues.ValueSource := DataModule1.ADOQuery1.Fields[1].FieldName; DataModule1.ADOQuery1.Next; end; Form4.ShowModal; finally Form4.Free; end; DataModule1.ADOQuery1.Close; end; 按鈕 procedure TForm2.Action5Execute(Sender: TObject); var i:integer; begin table := 'INH '; pk := 'INH_YYYMM'; mitem := 'SUM(INH_PTCT)'; str := 'INH_SEX= ' '1'; ditem := 'SUM(INH_PTCT)'; mSQL(mitem, str); dSQL(ditem); for i:=1 to 4 do begin sqlmitem:=IntToStr(s1[1]); sqlditem:=IntToStr(s2[1]); SQL(pk,sqlmitem,sqlditem,table); end; end; 第一次> 發表人 - |
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
goodjimmy 你好: 幫你縮排 Code, 可以用 【code】...【/code】 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=7326 有空看一下本站的新手使用指引. http://delphi.ktop.com.tw/topic.php?TOPIC_ID=19264 瞄了一下您的需求, 是否考慮過 "Decision Cube" 這組 VCL 呢 ? http://delphi.ktop.com.tw/topic.php?TOPIC_ID=26173 發表人 - Mickey 於 2004/06/24 22:30:54
|
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
Hi goodjimmy, 有兩種方法,範例如下
http://delphi.ktop.com.tw/loadfile.php?TOPICID=16361462&CC=365918 方法一(In TabSheet1):
建一個 Series,DataSource 指定為 Function,Funciotn 設為 Devide,來源分別為 Series1(分子) & Series2(分母) 方法二(In TabSheet2):
自己跑迴圈將直塞給該 Series ----------------------------------
小弟才疏學淺,若有謬誤尚請不吝指教
----------------------------------
------
Fishman |
goodjimmy
一般會員 發表:20 回覆:26 積分:9 註冊:2004-02-19 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |