状況によっては、ユーザーは特定の条件でフィルタリングされたデータのみを表示したい場合や、複数のデータテーブルを1つのレポートに結合したい場合があります。
ユーザーは、テンプレートセルにフィルタ条件を設定して、必要に応じてデータをフィルタリングできます。
デザイナでリボンメニューの「プレビューを閉じる」をクリックすると、テンプレートシートの設定を確認することができます。
「パネル」をクリックすると、テンプレートセルの設定を確認できます。
このサンプルでは3つのテンプレートシートがあり、A4セルまたはB4セルのフィルター設定が確認できます。
データのフィルタ機能の使用例を以下に示します。
静的な値でフィルタリングする
const spread = new GC.Spread.Sheets.Workbook('ss', { sheetCount: 1 });
const ordersTable = spread.dataManager().addTable('Orders', {
remote: {
read: {
url: 'https://demodata.mescius.io/northwind/api/v1/orders'
}
}
});
ordersTable.fetch().then(() => {
const reportSheet = spread.addSheetTab(0, 'report1', GC.Spread.Sheets.SheetType.reportSheet);
const templateSheet = reportSheet.getTemplate();
// データをテンプレートセルに連結します
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // 静的な値でフィルタリングします
and: [
{
column: "orderDate",
operator: "GreaterThan",
value: new Date("1997/1/1"),
},
{
column: "orderDate",
operator: "LessThan",
value: new Date("1997/12/31");
}
]
}
}
});
templateSheet.setTemplateCell(1, 1, {
type: 'List',
binding: `Orders[freight]`,
});
templateSheet.setTemplateCell(1, 2, {
type: 'List',
binding: `Orders[shipName]`,
});
// レポートを作成します
reportSheet.refresh();
});
数式を使用してデータをフィルタリングする
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // フィルタリングする数式条件
formula: "=YEAR([@orderDate])=1997"
}
}
});
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // フィルタリングする数式条件
column: "=YEAR([@orderDate])",
operator: "Equal",
value: 1997
}
}
});
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // フィルタリングする数式条件
column: "=YEAR([@orderDate])",
operator: "Equal",
formula: `=YEAR("1997-01-01")`
}
}
});
連結したテーブルを使用してフィルタリングする
const dataManager = spread.dataManager();
const ordersTable = dataManager.addTable('Orders', {
remote: {
read: {
url: 'https://demodata.mescius.io/northwind/api/v1/orders'
}
}
});
const employeesTable = dataManager.addTable('Employees', {
remote: {
read: {
url: 'https://demodata.mescius.io/northwind/api/v1/employees'
}
}
});
// employeeIdフィールドでordersTableとemployeesTable間のリレーションを追加します。
dataManager.addRelationship(ordersTable, "employeeId", "employeesTable", employeesTable, "employeeId", "ordersTable");
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`
});
templateSheet.setTemplateCell(1, 1, {
type: 'List',
binding: `Employees[firstName]`,
});
templateSheet.setTemplateCell(1, 2, {
type: 'List',
binding: `Orders[freight]`,
});
const dataManager = spread.dataManager();
const ordersTable = dataManager.addTable('Orders', {
remote: {
read: {
url: 'https://demodata.mescius.io/northwind/api/v1/orders'
}
}
});
const employeesTable = dataManager.addTable('Employees', {
remote: {
read: {
url: 'https://demodata.mescius.io/northwind/api/v1/employees'
}
}
});
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`
});
templateSheet.setTemplateCell(1, 1, {
type: 'List',
binding: `Employees[firstName]`,
filter: {
condition: { // 他のテーブルのフィールド値との比較をフィルタ条件に追加します
column: "employeeId",
operator: "equal",
dataColumn: {
tableName: "Orders",
columnName: "employeeId"
}
}
}
});
templateSheet.setTemplateCell(1, 2, {
type: 'List',
binding: `Orders[freight]`,
});