사용자가 특정 조건을 기준으로 필터링된 데이터만 보거나 한 보고서에서 기본-외래 키를 기준으로 여러 데이터 표를 결합하려고 하는 경우가 있습니다.
사용자는 보고서 템플릿 셀의 데이터 필터를 사용하여 원하는 대로 데이터를 필터링할 수 있습니다.
데이터 필터링 방법은 여러 가지가 있습니다.
다음은 정적 값을 기준으로 데이터를 필터링하는 방법입니다.
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();
// set value and binding for the template
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // filter value by static value.
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]`,
});
// refresh the report
reportSheet.refresh();
});
다음은 수식을 사용하여 데이터를 필터링하는 방법입니다.
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // filter value formula.
formula: "=YEAR([@orderDate])=1997"
}
}
});
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // filter value formula.
column: "=YEAR([@orderDate])",
operator: "Equal",
value: 1997
}
}
});
templateSheet.setTemplateCell(1, 0, {
type: 'List',
binding: `Orders[customerId]`,
filter: {
condition: { // filter value formula.
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'
}
}
});
// add relationship between ordersTable and employeesTable by employeeId.
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: { // add table join filter condition.
column: "employeeId",
operator: "equal",
dataColumn: {
tableName: "Orders",
columnName: "employeeId"
}
}
}
});
templateSheet.setTemplateCell(1, 2, {
type: 'List',
binding: `Orders[freight]`,
});