[]
データチャートでは、データを効果的に表示するためにチャートをデータソースに接続することが不可欠です。このトピックでは、データチャートでデータソースからデータを連携する方法について説明します。SpreadJSでは、データソースは通常、データマネージャーが管理するテーブルとして表され、データマネージャーからテーブル情報を連携することでデータの可視化処理が完了します。
データチャートを作成および管理するには、GC.Spread.Sheets.DataCharts 名前空間のIDataChartConfig
インターフェイスを使用します。このインターフェイスには、次のプロパティが含まれます。
プロパティ | 説明 |
---|---|
plots | [必須] チャートでのデータの表示方法を定義します。 |
config | [オプション] データチャートの追加設定オプション。 |
tableName | [オプション] データ連携用のテーブルの名前。 |
データチャートでは、config.tableName
を設定することで、連携されたフィールドの元となるテーブルを指定できます。
さらに、IPlotEncodingsOption
インターフェイスを使用すると、データチャート内のプロットのさまざまなエンコードオプションを定義できます。config.plots[0].encodings
で連携されたフィールド情報を設定し、データチャートにデータを表示できます。これには次のフィールドが含まれます。
フィールド | 説明 |
---|---|
values | Y 軸に沿ってプロットするフィールドを指定し、複数のサブプロパティをサポートします。データチャートに値が設定されていない場合、SpreadJSが提供するデフォルトデータに連携されます。ユーザーは、特定の要件に基づいて、各フィールドに異なるサマリータイプを割り当てることができます。valuesプロパティに複数のフィールドが設定されている場合、凡例フィールドの設定は有効ではありません。代わりに、データチャートは、異なるvaluesフィールドに基づいて凡例を生成します 円チャートやドーナツチャートなどの一部のデータチャートタイプでは、valuesは1つのフィールドにしか連携できないことに注意してください。 |
category | 軸またはディメンションによってデータを定義し、グループ化します。データをさまざまなカテゴリに分割することで、ユーザーがデータ内の分布や傾向を理解しやすくなります。棒チャートや折れ線チャートでは、通常、時間 (年や月など) またはさまざまな分類 (地域や製品タイプなど) を表します。円チャートでは、円の各スライスが表すカテゴリを示します。 categoryフィールドを連携するときに、適用される並べ替え情報も設定できます。並べ替えオプションには、Field、Aggregate、Orderがあります。 |
details | データを複数のサブセクションに分割し、チャート内でクラスター化または積み重ねることができます。データチャートでは、サンバーストチャートを除くすべてのチャート種類は、最大で1つのdetailsフィールドにのみ連携できます。 |
color | さまざまなシンボルを持つチャート種類で色の凡例を表示します。Colorフィールドには、文字列、ブール値、日付、数値など、さまざまな値の種類を指定できます。 |
size | プロットと凡例に連続したサイズベースのスケールを適用するフィールドを決定します。色の凡例と同様に、サイズの凡例は、ディメンション (通常は3次元) データを数値スケールで視覚化するために使用されます。バブルチャートにのみ適用できます。 |
tooltip | ツールチップ内に表示されるフィールドを決定します。データチャートは、ツールチップエンコーディングを使用して、各データポイントのツールチップとして表示されるフィールドを決定します。マウスをデータチャートの上に移動してツールチップが表示されると、他のすべてのラベル (軸ラベルや参照線ラベルなど) は無視されます。 |
filter | フィルタはソースデータに適用されます。つまり、フィルタ処理はデータが集計される前に実行されます。このフィールドは、データチャートの2種類のフィルタ処理方法をサポートしています。1つは数値データ型用、もう1つは文字列データ型用です。 データチャートで提供されるフィルタは、複数のレベルにネストできます。論理演算を使用すると、同じレベル内でANDまたはOR関係を設定できます。 |
メモ: データチャートでは、複数のテーブルからデータを連携することもできますが、これらのテーブルには既存のリレーションシップがあり、関連フィールドを介して接続されている必要があります。
次のサンプルコードは、データマネージャーを取得し、単一および複数のテーブルを連携する方法を示しています。
//データマネージャーを取得します。
const dataManager = spread.dataManager();
//1. データバインディング
// データマネージャーにテーブルを追加します。
const salesTable = createSalesTable(dataManager);
await salesTable.fetch();
const sheet = spread.getSheet(0);
sheet.name("Binding Data");
sheet.setColumnCount(25);
const dataChart = sheet.dataCharts.add('data-chart', 10, 10, 600, 400, GC.Spread.Sheets.DataCharts.DataChartType.column);
dataChart.setChartConfig({
tableName: 'Sales',
plots: [
{
type: GC.Spread.Sheets.DataCharts.DataChartType.column,
encodings: {
values: [ //Y軸に沿ってプロットするフィールドを指定します。
{
field: "Sales",
aggregate: GC.Spread.Sheets.DataCharts.Aggregate.sum
}
],
category: { //データをカテゴリに分割し、ユーザーがデータの分布や傾向をよりよく理解できるようにします。
field: "Product",
},
details: [ //詳細フィールドはデータを複数のサブセクションに分割し、プロット内でクラスター化または積み重ねることができます。 {
field: "Region"
}
],
color: { //プロットと凡例の色の割り当てを決定します。
field: "Product"
},
filter: { //データが集計される前にフィルタ処理が実行されます。
field: 'Region',
operate: GC.Spread.Sheets.DataCharts.StringOperator.contains,
value: 'East',
}
}
}
]
});
// 2. 複数のテーブルを連携します。
//データチャートでは、複数のテーブルからデータを連携できますが、これらのテーブルには既存のリレーションシップがあり、関連するフィールドを介して接続されている必要があります。
//データマネージャーにテーブルを追加します。
const orderDetailsTable = createOrderDetails(dataManager);
await orderDetailsTable.fetch();
// テーブル間のリレーションシップを追加します。
dataManager.addRelationship(ordersTable, "orderId", "orderDetailsTable", orderDetailsTable, "OrderId", "ordersTable");
let sheet2 = spread.getSheet(1);
sheet2.name("Binding Multiple Tables");
const dataChart3 = sheet2.dataCharts.add('data-chart-3', 10, 10, 600, 400, GC.Spread.Sheets.DataCharts.DataChartType.column);
dataChart3.setChartConfig({
tableName: 'Orders', //注文表
plots: [
{
type: GC.Spread.Sheets.DataCharts.DataChartType.column,
encodings: {
values: [
{ field: 'orderDetailsTable.OrderId', aggregate: GC.Spread.Sheets.DataCharts.Aggregate.sum }, //orderDetailsTableフィールドを参照します。
],
category: { field: 'shipRegion' },
color: { field: 'shipRegion' },
}
}
]
});
function createOrders(dataManager) {
const records = [
[10248, "VINET", 5, "1996-07-04T00:00:00", "1996-08-01T00:00:00", "1996-07-16T00:00:00", 3, 32.38, "Vins et alcools Chevalier", "59 rue de l'Abbaye", "Reims", null, "51100", "France"],
[10249, "TOMSP", 6, "1996-07-05T00:00:00", "1996-08-16T00:00:00", "1996-07-10T00:00:00", 1, 11.61, "Toms Spezialitäten", "Luisenstr. 48", "Münster", null, "44087", "Germany"],
[10250, "HANAR", 4, "1996-07-08T00:00:00", "1996-08-05T00:00:00", "1996-07-12T00:00:00", 2, 65.83, "Hanari Carnes", "Rua do Paço, 67", "Rio de Janeiro", "RJ", "05454-876", "Brazil"],
[10251, "VICTE", 3, "1996-07-08T00:00:00", "1996-08-05T00:00:00", "1996-07-15T00:00:00", 1, 41.34, "Victuailles en stock", "2, rue du Commerce", "Lyon", null, "69004", "France"],
[10252, "SUPRD", 4, "1996-07-09T00:00:00", "1996-08-06T00:00:00", "1996-07-11T00:00:00", 2, 51.3, "Suprêmes délices", "Boulevard Tirou, 255", "Charleroi", null, "B-6000", "Belgium"],
[10253, "HANAR", 3, "1996-07-10T00:00:00", "1996-07-24T00:00:00", "1996-07-16T00:00:00", 2, 58.17, "Hanari Carnes", "Rua do Paço, 67", "Rio de Janeiro", "RJ", "05454-876", "Brazil"],
[10254, "CHOPS", 5, "1996-07-11T00:00:00", "1996-08-08T00:00:00", "1996-07-23T00:00:00", 2, 22.98, "Chop-suey Chinese", "Hauptstr. 31", "Bern", null, "3012", "Switzerland"],
[10255, "RICSU", 9, "1996-07-12T00:00:00", "1996-08-09T00:00:00", "1996-07-15T00:00:00", 3, 148.33, "Richter Supermarkt", "Starenweg 5", "Genève", null, "1204", "Switzerland"],
[10256, "WELLI", 3, "1996-07-15T00:00:00", "1996-08-12T00:00:00", "1996-07-17T00:00:00", 2, 13.97, "Wellington Importadora", "Rua do Mercado, 12", "Resende", "SP", "08737-363", "Brazil"],
[10257, "HILAA", 4, "1996-07-16T00:00:00", "1996-08-13T00:00:00", "1996-07-22T00:00:00", 3, 81.91, "HILARION-Abastos", "Carrera 22 con Ave. Carlos Soublette #8-35", "San Cristóbal", "Táchira", "5022", "Venezuela"],
[10258, "ERNSH", 1, "1996-07-17T00:00:00", "1996-08-14T00:00:00", "1996-07-23T00:00:00", 1, 140.51, "Ernst Handel", "Kirchgasse 6", "Graz", null, "8010", "Austria"],
[10259, "CENTC", 4, "1996-07-18T00:00:00", "1996-08-15T00:00:00", "1996-07-25T00:00:00", 3, 3.25, "Centro comercial Moctezuma", "Sierras de Granada 9993", "México D.F.", null, "05022", "Mexico"],
[10260, "OTTIK", 4, "1996-07-19T00:00:00", "1996-08-16T00:00:00", "1996-07-29T00:00:00", 1, 55.09, "Ottilies Käseladen", "Mehrheimerstr. 369", "Köln", null, "50739", "Germany"],
[10261, "QUEDE", 4, "1996-07-19T00:00:00", "1996-08-16T00:00:00", "1996-07-30T00:00:00", 2, 3.05, "Que Delícia", "Rua da Panificadora, 12", "Rio de Janeiro", "RJ", "02389-673", "Brazil"],
[10262, "RATTC", 8, "1996-07-22T00:00:00", "1996-08-19T00:00:00", "1996-07-25T00:00:00", 3, 48.29, "Rattlesnake Canyon Grocery", "2817 Milton Dr.", "Albuquerque", "NM", "87110", "USA"],
[10263, "ERNSH", 9, "1996-07-23T00:00:00", "1996-08-20T00:00:00", "1996-07-31T00:00:00", 3, 146.06, "Ernst Handel", "Kirchgasse 6", "Graz", null, "8010", "Austria"],
[10264, "FOLKO", 6, "1996-07-24T00:00:00", "1996-08-21T00:00:00", "1996-08-23T00:00:00", 3, 3.67, "Folk och fä HB", "Åkergatan 24", "Bräcke", null, "S-844 67", "Sweden"],
[10265, "BLONP", 2, "1996-07-25T00:00:00", "1996-08-22T00:00:00", "1996-08-12T00:00:00", 1, 55.28, "Blondel père et fils", "24, place Kléber", "Strasbourg", null, "67000", "France"],
[10266, "WARTH", 3, "1996-07-26T00:00:00", "1996-09-06T00:00:00", "1996-07-31T00:00:00", 3, 25.73, "Wartian Herkku", "Torikatu 38", "Oulu", null, "90110", "Finland"],
[10267, "FRANK", 4, "1996-07-29T00:00:00", "1996-08-26T00:00:00", "1996-08-06T00:00:00", 1, 208.58, "Frankenversand", "Berliner Platz 43", "München", null, "80805", "Germany"],
[10268, "GROSR", 8, "1996-07-30T00:00:00", "1996-08-27T00:00:00", "1996-08-02T00:00:00", 3, 66.29, "GROSELLA-Restaurante", "5ª Ave. Los Palos Grandes", "Caracas", "DF", "1081", "Venezuela"],
[10269, "WHITC", 5, "1996-07-31T00:00:00", "1996-08-14T00:00:00", "1996-08-09T00:00:00", 1, 4.56, "White Clover Markets", "1029 - 12th Ave. S.", "Seattle", "WA", "98124", "USA"],
[10270, "WARTH", 1, "1996-08-01T00:00:00", "1996-08-29T00:00:00", "1996-08-02T00:00:00", 1, 136.54, "Wartian Herkku", "Torikatu 38", "Oulu", null, "90110", "Finland"],
[10271, "SPLIR", 6, "1996-08-01T00:00:00", "1996-08-29T00:00:00", "1996-08-30T00:00:00", 2, 4.54, "Split Rail Beer & Ale", "P.O. Box 555", "Lander", "WY", "82520", "USA"],
[10272, "RATTC", 6, "1996-08-02T00:00:00", "1996-08-30T00:00:00", "1996-08-06T00:00:00", 2, 98.03, "Rattlesnake Canyon Grocery", "2817 Milton Dr.", "Albuquerque", "NM", "87110", "USA"],
[10273, "QUICK", 3, "1996-08-05T00:00:00", "1996-09-02T00:00:00", "1996-08-12T00:00:00", 3, 76.07, "QUICK-Stop", "Taucherstraße 10", "Cunewalde", null, "01307", "Germany"],
[10274, "VINET", 6, "1996-08-06T00:00:00", "1996-09-03T00:00:00", "1996-08-16T00:00:00", 1, 6.01, "Vins et alcools Chevalier", "59 rue de l'Abbaye", "Reims", null, "51100", "France"],
[10275, "MAGAA", 1, "1996-08-07T00:00:00", "1996-09-04T00:00:00", "1996-08-09T00:00:00", 1, 26.93, "Magazzini Alimentari Riuniti", "Via Ludovico il Moro 22", "Bergamo", null, "24100", "Italy"],
[10276, "TORTU", 8, "1996-08-08T00:00:00", "1996-08-22T00:00:00", "1996-08-14T00:00:00", 3, 13.84, "Tortuga Restaurante", "Avda. Azteca 123", "México D.F.", null, "05033", "Mexico"],
[10277, "MORGK", 2, "1996-08-09T00:00:00", "1996-09-06T00:00:00", "1996-08-13T00:00:00", 3, 125.77, "Morgenstern Gesundkost", "Heerstr. 22", "Leipzig", null, "04179", "Germany"],
[10278, "BERGS", 8, "1996-08-12T00:00:00", "1996-09-09T00:00:00", "1996-08-16T00:00:00", 2, 92.69, "Berglunds snabbköp", "Berguvsvägen 8", "Luleå", null, "S-958 22", "Sweden"],
[10279, "LEHMS", 8, "1996-08-13T00:00:00", "1996-09-10T00:00:00", "1996-08-16T00:00:00", 2, 25.83, "Lehmanns Marktstand", "Magazinweg 7", "Frankfurt a.M.", null, "60528", "Germany"],
[10280, "BERGS", 2, "1996-08-14T00:00:00", "1996-09-11T00:00:00", "1996-09-12T00:00:00", 1, 8.98, "Berglunds snabbköp", "Berguvsvägen 8", "Luleå", null, "S-958 22", "Sweden"],
[10281, "ROMEY", 4, "1996-08-14T00:00:00", "1996-08-28T00:00:00", "1996-08-21T00:00:00", 1, 2.94, "Romero y tomillo", "Gran Vía, 1", "Madrid", null, "28001", "Spain"],
[10282, "ROMEY", 4, "1996-08-15T00:00:00", "1996-09-12T00:00:00", "1996-08-21T00:00:00", 1, 12.69, "Romero y tomillo", "Gran Vía, 1", "Madrid", null, "28001", "Spain"],
[10283, "LILAS", 3, "1996-08-16T00:00:00", "1996-09-13T00:00:00", "1996-08-23T00:00:00", 3, 84.81, "LILA-Supermercado", "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", "Barquisimeto", "Lara", "3508", "Venezuela"],
[10284, "LEHMS", 4, "1996-08-19T00:00:00", "1996-09-16T00:00:00", "1996-08-27T00:00:00", 1, 76.56, "Lehmanns Marktstand", "Magazinweg 7", "Frankfurt a.M.", null, "60528", "Germany"],
[10285, "QUICK", 1, "1996-08-20T00:00:00", "1996-09-17T00:00:00", "1996-08-26T00:00:00", 2, 76.83, "QUICK-Stop", "Taucherstraße 10", "Cunewalde", null, "01307", "Germany"],
[10286, "QUICK", 8, "1996-08-21T00:00:00", "1996-09-18T00:00:00", "1996-08-30T00:00:00", 3, 229.24, "QUICK-Stop", "Taucherstraße 10", "Cunewalde", null, "01307", "Germany"],
[10287, "RICAR", 8, "1996-08-22T00:00:00", "1996-09-19T00:00:00", "1996-08-28T00:00:00", 3, 12.76, "Ricardo Adocicados", "Av. Copacabana, 267", "Rio de Janeiro", "RJ", "02389-890", "Brazil"],
[10288, "REGGC", 4, "1996-08-23T00:00:00", "1996-09-20T00:00:00", "1996-09-03T00:00:00", 1, 7.45, "Reggiani Caseifici", "Strada Provinciale 124", "Reggio Emilia", null, "42100", "Italy"],
[10289, "BSBEV", 7, "1996-08-26T00:00:00", "1996-09-23T00:00:00", "1996-08-28T00:00:00", 3, 22.77, "B's Beverages", "Fauntleroy Circus", "London", null, "EC2 5NT", "UK"],
[10290, "COMMI", 8, "1996-08-27T00:00:00", "1996-09-24T00:00:00", "1996-09-03T00:00:00", 1, 79.7, "Comércio Mineiro", "Av. dos Lusíadas, 23", "Sao Paulo", "SP", "05432-043", "Brazil"],
[10291, "QUEDE", 6, "1996-08-27T00:00:00", "1996-09-24T00:00:00", "1996-09-04T00:00:00", 2, 6.4, "Que Delícia", "Rua da Panificadora, 12", "Rio de Janeiro", "RJ", "02389-673", "Brazil"],
[10292, "TRADH", 1, "1996-08-28T00:00:00", "1996-09-25T00:00:00", "1996-09-02T00:00:00", 2, 1.35, "Tradiçao Hipermercados", "Av. Inês de Castro, 414", "Sao Paulo", "SP", "05634-030", "Brazil"],
[10293, "TORTU", 1, "1996-08-29T00:00:00", "1996-09-26T00:00:00", "1996-09-11T00:00:00", 3, 21.18, "Tortuga Restaurante", "Avda. Azteca 123", "México D.F.", null, "05033", "Mexico"],
[10294, "RATTC", 4, "1996-08-30T00:00:00", "1996-09-27T00:00:00", "1996-09-05T00:00:00", 2, 147.26, "Rattlesnake Canyon Grocery", "2817 Milton Dr.", "Albuquerque", "NM", "87110", "USA"],
[10295, "VINET", 2, "1996-09-02T00:00:00", "1996-09-30T00:00:00", "1996-09-10T00:00:00", 2, 1.15, "Vins et alcools Chevalier", "59 rue de l'Abbaye", "Reims", null, "51100", "France"],
[10296, "LILAS", 6, "1996-09-03T00:00:00", "1996-10-01T00:00:00", "1996-09-11T00:00:00", 1, 0.12, "LILA-Supermercado", "Carrera 52 con Ave. Bolívar #65-98 Llano Largo", "Barquisimeto", "Lara", "3508", "Venezuela"],
[10297, "BLONP", 5, "1996-09-04T00:00:00", "1996-10-16T00:00:00", "1996-09-10T00:00:00", 2, 5.74, "Blondel père et fils", "24, place Kléber", "Strasbourg", null, "67000", "France"],
[10298, "HUNGO", 6, "1996-09-05T00:00:00", "1996-10-03T00:00:00", "1996-09-11T00:00:00", 2, 168.22, "Hungry Owl All-Night Grocers", "8 Johnstown Road", "Cork", "Co. Cork", null, "Ireland"],
[10299, "RICAR", 4, "1996-09-06T00:00:00", "1996-10-04T00:00:00", "1996-09-13T00:00:00", 2, 29.76, "Ricardo Adocicados", "Av. Copacabana, 267", "Rio de Janeiro", "RJ", "02389-890", "Brazil"],
];
const columns = ['orderId', 'customerId', 'employeeId', 'orderDate', 'requiredDate', 'shippedDate', 'shipVia', 'freight', 'shipName', 'shipAddress', 'shipCity', 'shipRegion', 'shipPostalCode', 'shipCountry'];
return dataManager.addTable('Orders', {
data: records.map((x) => {
const record = {};
columns.forEach((c, i) => record[c] = x[i]);
return record;
})
});
}
function createOrderDetails(dataManager) {
const records = [
[10248, 11, 14, 12, 0],
[10248, 42, 9.8, 10, 0],
[10248, 72, 34.8, 5, 0],
[10249, 14, 18.6, 9, 0],
[10249, 51, 42.4, 40, 0],
[10250, 41, 7.7, 10, 0],
[10250, 51, 42.4, 35, 0.15],
[10250, 65, 16.8, 15, 0.15],
[10251, 22, 16.8, 6, 0.05],
[10251, 57, 15.6, 15, 0.05],
[10251, 65, 16.8, 20, 0],
[10252, 20, 64.8, 40, 0.05],
[10252, 33, 2, 25, 0.05],
[10252, 60, 27.2, 40, 0],
[10253, 31, 10, 20, 0],
[10253, 39, 14.4, 42, 0],
[10253, 49, 16, 40, 0],
[10254, 24, 3.6, 15, 0.15],
[10254, 55, 19.2, 21, 0.15],
[10254, 74, 8, 21, 0],
[10255, 2, 15.2, 20, 0],
[10255, 16, 13.9, 35, 0],
[10255, 36, 15.2, 25, 0],
[10255, 59, 44, 30, 0],
[10256, 53, 26.2, 15, 0],
[10256, 77, 10.4, 12, 0],
[10257, 27, 35.1, 25, 0],
[10257, 39, 14.4, 6, 0],
[10257, 77, 10.4, 15, 0],
[10258, 2, 15.2, 50, 0.2],
[10258, 5, 17, 65, 0.2],
[10258, 32, 25.6, 6, 0.2],
[10259, 21, 8, 10, 0],
[10259, 37, 20.8, 1, 0],
[10260, 41, 7.7, 16, 0.25],
[10260, 57, 15.6, 50, 0],
[10260, 62, 39.4, 15, 0.25],
[10260, 70, 12, 21, 0.25],
[10261, 21, 8, 20, 0],
[10261, 35, 14.4, 20, 0],
[10262, 5, 17, 12, 0.2],
[10262, 7, 24, 15, 0],
[10262, 56, 30.4, 2, 0],
[10263, 16, 13.9, 60, 0.25],
[10263, 24, 3.6, 28, 0],
[10263, 30, 20.7, 60, 0.25],
[10263, 74, 8, 36, 0.25],
[10264, 2, 15.2, 35, 0],
[10264, 41, 7.7, 25, 0.15],
[10265, 17, 31.2, 30, 0],
[10265, 70, 12, 20, 0],
[10266, 12, 30.4, 12, 0.05],
[10267, 40, 14.7, 50, 0],
[10267, 59, 44, 70, 0.15],
[10267, 76, 14.4, 15, 0.15],
[10268, 29, 99, 10, 0],
[10268, 72, 27.8, 4, 0],
[10269, 33, 2, 60, 0.05],
[10269, 72, 27.8, 20, 0.05],
[10270, 36, 15.2, 30, 0],
[10270, 43, 36.8, 25, 0],
[10271, 33, 2, 24, 0],
[10272, 20, 64.8, 6, 0],
[10272, 31, 10, 40, 0],
[10272, 72, 27.8, 24, 0],
[10273, 10, 24.8, 24, 0.05],
[10273, 31, 10, 15, 0.05],
[10273, 33, 2, 20, 0],
[10273, 40, 14.7, 60, 0.05],
[10273, 76, 14.4, 33, 0.05],
[10274, 71, 17.2, 20, 0],
[10274, 72, 27.8, 7, 0],
[10275, 24, 3.6, 12, 0.05],
[10275, 59, 44, 6, 0.05],
[10276, 10, 24.8, 15, 0],
[10276, 13, 4.8, 10, 0],
[10277, 28, 36.4, 20, 0],
[10277, 62, 39.4, 12, 0],
[10278, 44, 15.5, 16, 0],
[10278, 59, 44, 15, 0],
[10278, 63, 35.1, 8, 0],
[10278, 73, 12, 25, 0],
[10279, 17, 31.2, 15, 0.25],
[10280, 24, 3.6, 12, 0],
[10280, 55, 19.2, 20, 0],
[10280, 75, 6.2, 30, 0],
[10281, 19, 7.3, 1, 0],
[10281, 24, 3.6, 6, 0],
[10281, 35, 14.4, 4, 0],
[10282, 30, 20.7, 6, 0],
[10282, 57, 15.6, 2, 0],
[10283, 15, 12.4, 20, 0],
[10283, 19, 7.3, 18, 0],
[10283, 60, 27.2, 35, 0],
[10283, 72, 27.8, 3, 0],
[10284, 27, 35.1, 15, 0.25],
[10284, 44, 15.5, 21, 0],
[10284, 60, 27.2, 20, 0.25],
[10284, 67, 11.2, 5, 0.25],
[10285, 1, 14.4, 45, 0.2],
[10285, 40, 14.7, 40, 0.2],
[10285, 53, 26.2, 36, 0.2],
[10286, 35, 14.4, 100, 0],
[10286, 62, 39.4, 40, 0],
[10287, 16, 13.9, 40, 0.15],
[10287, 34, 11.2, 20, 0],
[10287, 46, 9.6, 15, 0.15],
[10288, 54, 5.9, 10, 0.1],
[10288, 68, 10, 3, 0.1],
[10289, 3, 8, 30, 0],
[10289, 64, 26.6, 9, 0],
[10290, 5, 17, 20, 0],
[10290, 29, 99, 15, 0],
[10290, 49, 16, 15, 0],
[10290, 77, 10.4, 10, 0],
[10291, 13, 4.8, 20, 0.1],
[10291, 44, 15.5, 24, 0.1],
[10291, 51, 42.4, 2, 0.1],
[10292, 20, 64.8, 20, 0],
[10293, 18, 50, 12, 0],
[10293, 24, 3.6, 10, 0],
[10293, 63, 35.1, 5, 0],
[10293, 75, 6.2, 6, 0],
[10294, 1, 14.4, 18, 0],
[10294, 17, 31.2, 15, 0],
[10294, 43, 36.8, 15, 0],
[10294, 60, 27.2, 21, 0],
[10294, 75, 6.2, 6, 0],
[10295, 56, 30.4, 4, 0],
[10296, 11, 16.8, 12, 0],
[10296, 16, 13.9, 30, 0],
[10296, 69, 28.8, 15, 0],
[10297, 39, 14.4, 60, 0],
[10297, 72, 27.8, 20, 0],
[10298, 2, 15.2, 40, 0],
[10298, 36, 15.2, 40, 0.25],
[10298, 59, 44, 30, 0.25],
[10298, 62, 39.4, 15, 0],
[10299, 19, 7.3, 15, 0],
[10299, 70, 12, 20, 0],
];
const columns = ['OrderId', 'ProductId', 'UnitPrice', 'Quantity', 'Discount'];
const table = dataManager.addTable('OrderDetails', {
data: records.map((x) => {
const record = {};
columns.forEach((c, i) => record[c] = x[i]);
return record;
})
});
table.fetch().then(() => {
table.columns.Sales = {
value: "=[@UnitPrice]*[@Quantity]*(1-[@Discount])",
caption: "Sales"
};
});
return table;
}
function createSalesTable(dataManager) {
const records = [
['2021', 'East', 'SunLin', 'Drinks', 'Apple Juice', 140, 9],
['2021', 'East', 'JinShiPeng', 'Drinks', 'Apple Juice', 290, 17],
['2021', 'East', 'ZhangShang', 'Drinks', 'Apple Juice', 300, 28],
['2021', 'East', 'SunYang', 'Drinks', 'Apple Juice', 120, 10],
['2021', 'East', 'YuanChengJie', 'Drinks', 'Apple Juice', 220, 15],
['2021', 'North', 'ZhangYing', 'Drinks', 'Apple Juice', 250.0, 23],
['2021', 'North', 'WangWei', 'Drinks', 'Apple Juice', 180.0, 17],
['2021', 'North', 'ZhangWu', 'Drinks', 'Apple Juice', 233.0, 23],
['2021', 'North', 'HanWen', 'Drinks', 'Apple Juice', 123.0, 12],
['2021', 'East', 'SunLin', 'Drinks', 'Milk', 431.0, 38],
['2021', 'East', 'JinShiPeng', 'Drinks', 'Milk', 635.0, 56],
['2021', 'East', 'ZhangShang', 'Drinks', 'Milk', 324.0, 33],
['2021', 'East', 'SunYang', 'Drinks', 'Milk', 644.0, 68],
['2021', 'East', 'YuanChengJie', 'Drinks', 'Milk', 343.0, 19],
['2021', 'North', 'ZhangYing', 'Drinks', 'Milk', 234.0, 13],
['2021', 'North', 'WangWei', 'Drinks', 'Milk', 666.0, 39],
['2021', 'North', 'ZhangWu', 'Drinks', 'Milk', 700.0, 77],
['2021', 'North', 'HanWen', 'Drinks', 'Milk', 111.0, 8],
['2021', 'East', 'SunLin', 'Drinks', 'Orange Juice', 176.0, 18],
['2021', 'East', 'JinShiPeng', 'Drinks', 'Orange Juice', 500.0, 20],
['2021', 'East', 'ZhangShang', 'Drinks', 'Orange Juice', 340.0, 19],
['2021', 'East', 'SunYang', 'Drinks', 'Orange Juice', 540.0, 45],
['2021', 'East', 'YuanChengJie', 'Drinks', 'Orange Juice', 563.0, 56],
['2021', 'North', 'ZhangYing', 'Drinks', 'Orange Juice', 300.0, 19],
['2021', 'North', 'WangWei', 'Drinks', 'Orange Juice', 490.0, 44],
['2021', 'North', 'ZhangWu', 'Drinks', 'Orange Juice', 233.0, 25],
['2021', 'North', 'HanWen', 'Drinks', 'Orange Juice', 760.0, 78],
['2021', 'East', 'SunLin', 'Dessert', 'Chocolate', 333.0, 32],
['2021', 'East', 'JinShiPeng', 'Dessert', 'Chocolate', 420.0, 46],
['2021', 'East', 'ZhangShang', 'Dessert', 'Chocolate', 318.0, 37],
['2021', 'East', 'SunYang', 'Dessert', 'Chocolate', 256.0, 21],
['2021', 'East', 'YuanChengJie', 'Dessert', 'Chocolate', 583.0, 54],
['2021', 'North', 'ZhangYing', 'Dessert', 'Chocolate', 352.0, 33],
['2021', 'North', 'WangWei', 'Dessert', 'Chocolate', 384.0, 39],
['2021', 'North', 'ZhangWu', 'Dessert', 'Chocolate', 435.0, 42],
['2021', 'North', 'HanWen', 'Dessert', 'Chocolate', 356.0, 36],
['2021', 'East', 'SunLin', 'Dessert', 'Beef Jerky', 789.0, 73],
['2021', 'East', 'JinShiPeng', 'Dessert', 'Beef Jerky', 156.0, 14],
['2021', 'East', 'ZhangShang', 'Dessert', 'Beef Jerky', 289.0, 23],
['2021', 'East', 'SunYang', 'Dessert', 'Beef Jerky', 562.0, 45],
['2021', 'East', 'YuanChengJie', 'Dessert', 'Beef Jerky', 546.0, 56],
['2021', 'North', 'ZhangYing', 'Dessert', 'Beef Jerky', 218.0, 17],
['2021', 'North', 'WangWei', 'Dessert', 'Beef Jerky', 541.0, 56],
['2021', 'North', 'ZhangWu', 'Dessert', 'Beef Jerky', 219.0, 21],
['2021', 'North', 'HanWen', 'Dessert', 'Beef Jerky', 345.0, 21],
];
const columns = ['Year', 'Region', 'Salesman', 'ProductCategory', 'Product', 'Sales', 'Return'];
return dataManager.addTable('Sales', {
data: records.map((x) => {
const record = {};
columns.forEach((c, i) => record[c] = x[i]);
return record;
})
});
}