0

私は約43人の人員のために毎月のコールタリーを保存するための最良の方法を決定しようとしています。クライアントは、いくつかの異なる方法でデータを表示できるようにしたいと考えています。YTDの呼び出しが最も多い/少ない人、上位10のグラフ、前年からの変化などです。

毎年、各個人の名前と毎月の通話集計を使用してXMLファイルを継続的に更新することを検討しましたが、MySQLを使用する場合よりも、さまざまな種類のデータを抽出するのが難しくなります。

MySQLが好ましい選択である場合、1人あたり1年に1行でデータを保存し、その年の各月に1列ずつデータを保存するのが最善でしょうか。または、毎月、年、月を行に追加して、集計を呼び出しますか?

アドバイスをいただければ幸いです。

これは、データを含むXMLファイルのサンプルです-

<?xml version="1.0" encoding="UTF-8" ?>
<report>
    <ReportHeader>
        <Section SectionNumber="0">
            <Picture Name="DeptPic1" GraphicType="BolbField"></Picture>
        </Section>
    </ReportHeader>
    <Group Level="1">
        <GroupFooter>
            <Section SectionNumber="1">
                <Field Name="Field11" FieldName="{IncdPers.PERSONNAME}">
                    <FormattedValue>Captain John Doe</FormattedValue>
                    <Value>Captain John Doe</Value>
                </Field>
                <Field Name="Field12" FieldName="{IncdPers.PERSONLOOKUPID}">
                    <FormattedValue>Doe, John</FormattedValue>
                    <Value>Doe, John</Value>
                </Field>
                <Field Name="Field13" FieldName="DistinctCount ({In5basic.GUIDIDNUMBER}, {IncdPers.PERSONLOOKUPID})">
                    <FormattedValue>6</FormattedValue>
                    <Value>6</Value>
                </Field>
                <Field Name="Field14" FieldName="{@PercentInc}">
                    <FormattedValue>54.55</FormattedValue>
                    <Value>54.55</Value>
                </Field>
                <Text Name="Text14">
                    <TextValue>%</TextValue>
                </Text>
            </Section>
        </GroupFooter>
    </Group>
    <Group Level="1">
        <GroupFooter>
            <Section SectionNumber="1">
                <Field Name="Field11" FieldName="{IncdPers.PERSONNAME}">
                    <FormattedValue>Firefighter Jane Smith</FormattedValue>
                    <Value>Firefighter Jane Smith</Value>
                </Field>
                <Field Name="Field12" FieldName="{IncdPers.PERSONLOOKUPID}">
                    <FormattedValue>Smith, Jane</FormattedValue>
                    <Value>Smith, Jane</Value>
                </Field>
                <Field Name="Field13" FieldName="DistinctCount ({In5basic.GUIDIDNUMBER}, {IncdPers.PERSONLOOKUPID})">
                    <FormattedValue>1</FormattedValue>
                    <Value>1</Value>
                </Field>
                <Field Name="Field14" FieldName="{@PercentInc}">
                    <FormattedValue>9.09</FormattedValue>
                    <Value>9.09</Value>
                </Field>
                <Text Name="Text14">
                    <TextValue>%</TextValue>
                </Text>
            </Section>
        </GroupFooter>
    </Group>
</report>
4

2 に答える 2

3

これはまさにリレーショナルデータベースが得意なことです。私はデータを最も詳細なレベルで保存します。データがある場合は個々の通話の記録を保存しますが、そうでない場合はユーザー/月ごとに保存します。毎月の列があると、クエリが難しくなります。

受信するデータが生の通話データではなく、ある種の月次サマリーである場合は、クエリを実行するときに最も柔軟性を持たせるために、その方法でデータベースに保存します。

于 2012-10-22T19:03:02.933 に答える
2

2つのテーブルがあります。1つ目は、単に電話をかける個人に関するものです。2番目の表は、その人が行った電話に関するものです。このような:

Table 1
-------
+----------------+
| id        name |
+----------------+
  0         bob
  1         john
  2         mary



Table 2
-------
+----------------------------------------------+
| id        user_id     calls       date       |
+----------------------------------------------+
  0         0           12          2012-10-21
  1         1           15          2012-10-21
  2         2           23          2012-10-21
  3         0           16          2012-10-22
  4         1           17          2012-10-22
  5         2           28          2012-10-22

ご覧のとおり、MySQLを使用して、毎日の通話情報や任意の間隔を保存できます。任意の期間の数値を追跡したり(上記の例では2日しか表示されていません)、それらの数値からレポートを生成したり、時間の経過に伴う傾向を表示したりできます。

于 2012-10-22T19:17:07.373 に答える