このサンプルでは、「売上クロステーブル」シートで販売日や売上金額などを修正すると、修正後のデータが集計され、「販売店別年間平均売上」と「年間売上比較」列、「売上分析」ピボットテーブルに反映されます。
「売上クロステーブル」シート:
売上データに対して、テーブルシートを使用して関連するテーブル「商品マスタ」、「店舗マスタ」と「販売実績」を結合し、カスタムビューを表示しています。
列「販売店エリア」「販売店ID」「カテゴリー」「商品ID」「商品名」に対し、列ヘッダーフィットモードを設定し、列ヘッダーを積み上げで表示しています。
ビューの行と列をピン留め機能を使用し、重要な販売データや、販売店名と販売日を常に先頭に表示させます。
既存の行アクションのほか、アイコンや処理をカスタマイズしたカスタムアクションを追加しています。行アクションの感嘆符を押下すると警告を出す処理を実装しています。
トリガー数式機能を利用し、新しいレコードが追加されると、注文IDに連番を振ることや販売店と商品情報の列にデフォルト値が設定されます。また、データが更新されると更新日時が更新されます。
Window関数を使用して、各販売店に対して販売日の年別でデータを並べ替え、ひとつのwindow frameとして定義し、年単位での平均売上の分析を行います。また、各レコードと比較した結果をバリスパークラインとして表現しています。
販売店別年間平均売上列にて各商品の売上データに対して年間平均値を計算し、その結果を各行に格納します。
データソーススキーマのwindowプロパティでWINDOWDEFを使用してウィンドウを事前に定義しています。ここでFRAMEGROUPSを利用してグループ単位の集計を行っています。FRAMEGROUPS以外、FRAMEROWS(行単位)とFRAMERANGE(距離単位)の集計も提供していますが、今回は年単位のグループで集計を行うためFRAMEGROUPSを使用します。
年間売上比較列に各売上が販売店全体の年間平均売上を上回っているか、または下回っているかを視覚的に確認できるために、バリスパークラインを利用してデータの比較を行っています。
データを編集すると、Window関数を使用したデータ分析にも反映されます。
「売上ピボットレポート」シート:
複数のテーブルシートから結合したリレーショナルビューの「売上クロステーブル」をデータソースとして利用し、ピボットテーブルでデータの集計を行います。
小計の位置を集計フィールドの上にカスタマイズできます。
タイムラインスライサーを追加し、日付フィールドの集計を変更できます。
const spreadNS = GC.Spread.Sheets;
const spreadPT = GC.Spread.Pivot;
window.onload = function () {
// 初期化
var spread = new spreadNS.Workbook('ss', {
sheetCount: 0
});
// スプレッドシートのオプション設定
spread.options.allowDynamicArray = true;
spread.options.highlightInvalidData = true;
spread.options.calcOnDemand = true;
spread.options.autoFitType = spreadNS.AutoFitType.cellWithHeader;
spread.options.backColor = "#fafdff";
spread.options.grayAreaBackColor = "#ebf6f7";
spread.options.allowUserZoom = true;
spread.options.tabStripPosition = spreadNS.TabStripPosition.top;
spread.options.tabNavigationVisible = false;
spread.options.tabEditable = true;
spread.options.newTabVisible = false;
// 行アクションのコマンドを追加
registerCommands();
// シートの初期化
initSpread(spread);
// シートタブの順番の変更
spread.changeSheetPosition("売上クロステーブル", 0);
// アクティブタブの設定
spread.setActiveSheetTab(0);
// シートタブスタイル
const sheetTabStyle1 = {
backColor: '#c3d825',
foreColor: '#3e62ad',
font: 'normal 12pt Calibri'
};
const sheetTabStyle2 = {
backColor: '#f7b977',
foreColor: '#3e62ad',
font: 'normal 12pt Calibri'
};
const state = spreadNS.SheetTabState.normal;
const sheetNames1 = ['売上クロステーブル', '売上ピボットレポート'];
const sheetNames2 = ['商品マスタ', '店舗マスタ', '販売実績'];
spread.sheetTabStyles.add(state, sheetTabStyle1, sheetNames1);
spread.sheetTabStyles.add(state, sheetTabStyle2, sheetNames2);
spread.options.tabStripWidth = 500;
};
// スプレッド初期化
function initSpread(spread) {
spread.suspendPaint();
spread.addSheet(1);
// dataManagerの初期化
var dataManager = spread.dataManager();
// テーブルシートの初期化
initTableSheet(spread, dataManager);
spread.resumePaint();
}
// テーブルシート初期化
function initTableSheet(spread, dataManager) {
// productテーブルシートを作成
var productTable = dataManager.addTable("product", {
data: productData,
schema: {
columns: {
ProductID: { dataType: "number", lookup: "sales", defaultValue: "=MAX(OFFSET($A$1,0,COLUMN()-1,ROW()-1,1))+1", },
ProductName: { dataType: "string", lookup: "sales" },
Category: { dataType: "string", lookup: ["果物", "野菜", "ベーカリー"] }
}
}
});
productTable.primaryKey("ProductID");
var productSheet = spread.addSheetTab(1, "商品マスタ", spreadNS.SheetType.tableSheet);
var productView = productTable.addView("productView", [
{ value: 'ProductID', caption: "商品ID", width: 150 },
{ value: 'Category', caption: "商品分類", width: 150 },
{ value: 'ProductName', caption: "商品名", width: 150 },
],
undefined,
{ defaultColumnWidth: 30 }
);
productView.fetch().then(function () {
productSheet.setDataView(productView);
});
// storeテーブルシートを作成
var storeTable = dataManager.addTable("store", {
data: storeData,
schema: {
columns: {
StoreID: { dataType: "number", defaultValue: "=MAX(OFFSET($A$1,0,COLUMN()-1,ROW()-1,1))+1", },
Location: { dataType: "string" },
Area: { dataType: "string", lookup: ["東日本", "西日本"] },
StoreName: { dataType: "string" },
Address: { dataType: "string" },
PhoneNumber: { dataType: "string" }
}
}
});
storeTable.primaryKey("StoreID");
var storeSheet = spread.addSheetTab(2, "店舗マスタ", spreadNS.SheetType.tableSheet);
var storeView = storeTable.addView("storeView", [
{ value: 'StoreID', caption: "販売店ID", width: 150 },
{ value: 'Area', caption: "販売エリア", width: 150 },
{ value: 'Location', caption: "拠点", width: 150 },
{ value: 'StoreName', caption: "販売店名", width: 150 },
{ value: 'Address', caption: "所在地", width: 250 },
{ value: 'PhoneNumber', caption: "電話番号", width: 150 }
],
undefined,
{ defaultColumnWidth: 30 }
);
storeView.fetch().then(function () {
storeSheet.setDataView(storeView);
});
// salesテーブルシートを作成
var salesTable = dataManager.addTable("sales", {
data: salesData,
schema: {
columns: {
SaleID: {
dataType: "number", required: true,
defaultValue: "=MAX(OFFSET($A$1,0,COLUMN()-1,ROW()-1,1))+1",
},
SalesDate: {
dataType: "date", trigger: {
when: "onNew",
formula: "=TODAY()"
}
},
StoreID: {
dataType: "number",
lookup: {
name: 'store', columns: [
{ value: "StoreID", caption: "販売店ID" },
{ value: "Area", caption: "販売エリア", width: 100 },
{ value: "StoreName", caption: "販売店名", width: 100 },
{ value: "PhoneNumber", caption: "電話番号", width: 150 }
]
},
trigger: {
when: "onNew",
formula: "=201",
fields: "*"
}
},
ProductID: {
dataType: "number",
lookup: {
name: 'product', columns: [
{ value: 'ProductID', caption: "商品ID" },
{ value: 'ProductName', caption: "商品名", width: 100 },
{ value: 'Category', caption: "商品分類", width: 110 },
]
},
trigger: {
when: "onNew",
formula: "=101",
fields: "*"
}
},
UnitsSold: { dataType: "number" },
Revenue: {
dataType: "number",
trigger: {
when: "onNew",
formula: "=0",
fields: "*"
}
},
YearlyAverageRevenue: { dataType: 'formula', value: '=WINDOW(AVERAGE([Revenue]), "ProductYearly")' },
RevenueTrend: { dataType: 'formula', value: '=VARISPARKLINE(ROUND(([@Revenue] - [@YearlyAverageRevenue]) / [@Revenue], 2),0,,,,0.2,TRUE,"#4d5aaf","#e95295")' },
CreatedDateTime: {
dataType: "string",
defaultValue: '=TEXT(NOW(), "yyyy/MM/dd")'
},
LastUpdatedDateTime: {
dataType: "string",
trigger: {
when: "onNewAndUpdate",
formula: '=TEXT(NOW(), "yyyy/MM/dd")',
fields: "*"
}
},
},
window: {
ProductYearly: '=WINDOWDEF(PARTITIONBY([StoreID]), ORDERBY(VALUE(DATEPART([@SalesDate], "Y"))), FRAMEGROUPS([@], [@]))'
}
}
});
salesTable.primaryKey("SaleID");
var salesSheet = spread.addSheetTab(2, "販売実績", spreadNS.SheetType.tableSheet);
var salesView = salesTable.addView("salesView", [
{ value: 'SaleID', caption: "注文ID", width: 100 },
{ value: 'SalesDate', caption: "販売日", width: 150, style: { formatter: "yyyy/MM/dd" } },
{ value: 'StoreID', caption: "販売店ID", width: 100 },
{ value: 'ProductID', caption: "商品ID", width: 100 },
{ value: 'UnitsSold', caption: "販売数量", width: 100 },
{ value: 'Revenue', caption: "売上金額", width: 150, style: { formatter: "#,##0" }, },
],
undefined,
{ defaultColumnWidth: 30 }
);
salesView.fetch().then(function () {
salesSheet.setDataView(salesView);
});
// リレーションシップを追加
dataManager.addRelationship(salesTable, "ProductID", "product", productTable, "ProductID", "sales");
dataManager.addRelationship(salesTable, "StoreID", "store", storeTable, "StoreID", "sales");
// crossテーブルシートを作成
var crossSheet = spread.addSheetTab(0, "売上クロステーブル", spreadNS.SheetType.tableSheet);
crossSheet.setDefaultRowHeight(40, 1);
crossSheet.setDefaultRowHeight(40);
crossSheet.setDefaultRowHeight(20, spreadNS.SheetArea.colHeader);
crossSheet.applyTableTheme(spreadNS.Tables.TableThemes.light9);
crossSheet.zoom(0.9);
// スタイルルールを追加
var crossViewOptions = {
defaultColumnWidth: 30,
styleRules: {
"notAchieved": {
style: { foreColor: "red" },
rule: { formula: "[@Revenue]<1000" }
},
}
};
// ヘッダースタイルを追加
var fitModeHeaderStyle1 = {
backColor: "#bbdbf3",
foreColor: "#333333",
font: "bold 12pt 'Times New Roman', serif",
}
var fitModeHeaderStyle2 = {
backColor: "#C8D6E5",
foreColor: "#333333",
font: "bold 10pt 'Times New Roman', serif",
}
var fitModeHeaderStyle3 = {
backColor: "#FAFAD2",
foreColor: "#333333",
font: "bold 12pt 'Times New Roman', serif",
}
var timestampStyle = {
font: "bold 10pt 'Courier New', monospace",
color: "#FFFFFF",
foreColor: "#1E3A8A"
}
// 条件付き書式ルール
var formulaRule = {
ruleType: "formulaRule",
formula: "@<1000",
style: {
font: "bold 12pt 'Times New Roman', serif",
backColor: "#FFC0CB",
foreColor: "#8B0000"
}
};
var inputValidator = {
type: "formula",
formula: '@>0',
highlightStyle: {
type: 'icon',
color: "#ea5506",
position: 'outsideRight',
}
};
// ビュー追加
var crossView = salesTable.addView("crossView", [
{ value: 'SaleID', caption: "注文ID", width: 85, headerStyle: fitModeHeaderStyle1 },
{
value: 'StoreID', caption: "販売店ID", width: 75, headerFit: "stack", style: { backColor: "#E6E6FA", foreColor: "#374151" },
headerStyle: fitModeHeaderStyle1
},
{ value: 'store.Area', caption: "販売地域", width: 100, headerStyle: fitModeHeaderStyle1 },
{ value: 'store.StoreName', caption: "販売店名", width: 100, headerStyle: fitModeHeaderStyle1 },
{
value: 'ProductID', caption: "商品ID", width: 75, headerFit: "stack",
style: { backColor: "#E6E6FA", foreColor: "#374151" }, headerStyle: fitModeHeaderStyle1
},
{ value: 'product.Category', caption: "商品分類", headerFit: "stack", width: 90, headerStyle: fitModeHeaderStyle1 },
{ value: 'product.ProductName', caption: "商品名", width: 85, headerStyle: fitModeHeaderStyle1 },
{
value: 'SalesDate', caption: "販売日", width: 110, required: true,
style: { formatter: "yyyy/MM/dd", backColor: "#E6E6FA", foreColor: "#374151" }, headerStyle: fitModeHeaderStyle1
},
{
value: 'Revenue', caption: "売上金額", width: 100, required: true, conditionalFormats: [formulaRule], validator: inputValidator, style: {
formatter: "¥#,##0", backColor: "#E6E6FA", foreColor: "#1E3A8A", font: "bold 15px Arial, sans-serif",
border: "1px solid #000"
}, headerStyle: fitModeHeaderStyle1
},
{
value: 'YearlyAverageRevenue', caption: "販売店別年間平均売上", width: 165,
style: { formatter: "¥#,##0", backColor: "#dbebc4", foreColor: "#1E3A8A" }, headerStyle: fitModeHeaderStyle2
},
{ value: 'RevenueTrend', caption: "年間売上比較", width: 165, style: { backColor: "#dbebc4", foreColor: "#1E3A8A" }, headerStyle: fitModeHeaderStyle2 },
{ value: "CreatedDateTime", caption: "作成日", width: 100, readonly: true, style: timestampStyle, headerStyle: fitModeHeaderStyle3 },
{ value: "LastUpdatedDateTime", caption: "更新日", width: 100, readonly: true, style: timestampStyle, headerStyle: fitModeHeaderStyle3 },
],
undefined,
crossViewOptions
);
crossView.fetch(true).then(function () {
crossSheet.setDataView(crossView);
// 販売店名と販売日をピン留め
crossSheet.togglePinnedColumns([3, 7]);
// 売上金額がトップ3のデータをソートして行ピン留めを行う
const crossTableSheet = spread.getActiveSheetTab().getSheet();
crossTableSheet.rowFilter().sortColumn(8, false);
crossSheet.togglePinnedRows([0, 1, 2]);
crossTableSheet.rowFilter().sortColumn(2, true);
}).then(() => {
// ピボットテーブルを作成する
var pivotSheet = spread.getSheet(0);
pivotSheet.zoom(0.95);
pivotSheet.options.gridline = { showVerticalGridline: false, showHorizontalGridline: false };
pivotSheet.frozenRowCount(8);
pivotSheet.setColumnWidth(0, 20);
// セルを結合してラベルを設定する。
pivotSheet.addSpan(1, 1, 2, 8);
var titleStyle = new spreadNS.Style();
titleStyle.backColor = '#ffd900';
titleStyle.foreColor = 'black';
pivotSheet.setStyle(1, 1, titleStyle, spreadNS.SheetArea.viewport);
pivotSheet.getCell(1, 1).text('販売店別売上分析').font('italic bold 25px/35px "Didot", serif');
pivotSheet.getCell(1, 1).vAlign(spreadNS.VerticalAlign.center).hAlign(spreadNS.HorizontalAlign.center);
pivotSheet.name("売上ピボットレポート");
pivotSheet.setColumnWidth(1, 100);
pivotSheet.setColumnWidth(2, 100);
pivotSheet.setColumnWidth(3, 100);
pivotSheet.setColumnWidth(4, 100);
pivotSheet.setColumnWidth(5, 100);
pivotSheet.setColumnWidth(6, 100);
pivotSheet.setColumnWidth(7, 100);
pivotSheet.setColumnWidth(8, 100);
pivotSheet.setColumnWidth(9, 100);
pivotSheet.setColumnWidth(10, 100);
let option = {
showRowHeader: true,
showColumnHeader: true,
bandRows: true,
bandColumns: true,
enableDataValueEditing: true
};
var pivotTable = pivotSheet.pivotTables.add("PivotTable", "売上クロステーブル", 8, 1, spreadPT.PivotTableLayoutType.outline, spreadPT.PivotTableThemes.medium8, option);
pivotTable.suspendLayout();
pivotTable.add("商品分類", "商品別", spreadPT.PivotTableFieldType.columnField);
// ピボットグループ追加
let groupInfo = {
originFieldName: "販売日",
dateGroups: [
{ by: GC.Pivot.DateGroupType.years },
{ by: GC.Pivot.DateGroupType.quarters },
{ by: GC.Pivot.DateGroupType.months },
{ by: GC.Pivot.DateGroupType.days }
]
};
pivotTable.group(groupInfo);
pivotTable.add("年 (販売日)", "年", spreadPT.PivotTableFieldType.rowField);
pivotTable.add("四半期 (販売日)", "四半期", spreadPT.PivotTableFieldType.rowField);
pivotTable.add("月 (販売日)", "月", spreadPT.PivotTableFieldType.rowField);
pivotTable.add("売上金額", "売上金額", spreadPT.PivotTableFieldType.valueField, GC.Pivot.SubtotalType.sum);
pivotTable.subtotalPosition("四半期", spreadPT.SubtotalsPosition.top);
let style = new spreadNS.Style();
style.formatter = "#,##0";
style.foreColor = "#17184b";
pivotTable.setStyle({ dataOnly: true }, style);
pivotTable.theme(spreadPT.PivotTableThemes.light12);
initSlicer(pivotSheet, pivotTable);
pivotTable.resumeLayout();
});
// スタイルルールを設定する
var hoverStyle = new spreadNS.Style();
hoverStyle.backColor = '#fff462';
hoverStyle.foreColor = '#4B0082';
crossView.addStyleRule("hover-row", hoverStyle, {
state: GC.Data.RowColumnStates.hover,
direction: GC.Data.StateRuleDirection.row
});
crossView.addStyleRule("hover-column", hoverStyle, {
state: GC.Data.RowColumnStates.hover,
direction: GC.Data.StateRuleDirection.column
});
var pinStyle = new spreadNS.Style();
pinStyle.foreColor = 'yellow';
crossView.addStyleRule("pin-row", pinStyle, {
state: GC.Data.RowColumnStates.pin,
direction: GC.Data.StateRuleDirection.row,
area: GC.Data.ViewArea.viewport
});
// 行アクションを追加する
var rowActions = spreadNS.TableSheet.BuiltInRowActions;
let options = crossSheet.rowActionOptions();
options.push(
rowActions.saveRow,
{
name: 'attention',
icons: ["data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAACXBIWXMAAAsTAAALEwEAmpwYAAACMklEQVR4nO3XP2wScRTA8bdoQicdLlzCCSgeLeghhYCiCJZCPSgiFJpGUnUz0Vnn/ll11llnnXVxsVoXdTAFy5+WcgK1FIScxYrLM+hW82M0z+Q+yTdveMvvNz4AjUaj0VCxP595vX89g8zm0ytAWe9a8uf3bApZDfZA2d5cors3dxXZJTpAmZqern/LxJGVmo7XgDI1JRfUVBSHtA6Uda9MfegmLiO7qfdAWScWXulMh5FZLPwKKGvJoRdtOYSsWvLEc6BsNxJ81ooEkdVuJPAUKGuGLjxphvw4pMdA2U7A92gneB5ZfQn4HgJl237vg23/WRzSfaCs7vMsNnweZDXYA2U1r+te3etCVjWv6y5Qpricdz67zyCrqttxGyirOqWbilNCVlWn4wZQtiXZM1uSHZk5TqWBsorNGq3Yx5CdVQbKNkUxsDEqIjNRvAiUlS0Wd/nkCWRVslhcQNkns3m0eNyMrAZ7oKxoMAgF4zFkJggGoOyj0Xh03WBAVhWT6QhQtma3H87zPLJ6B3AIqMtx3Mscx+HB1jiO9jWmoQJvxUd62eRyL5sq97LJ/p+ZWsLZWR1QV4/HR9SZ2Ft1JoZ/F10l/4m2HFr+Gp1EVu3oJO2DpnnJX25O+HFIJaCs4fP0h52UjXOeH0CZ4pTKyriErKrjp4tA2YZNXNq0WZHZmHUBKFMEQVcwG1eLZhMerGA2vRnsgTpFEHQ5vX4xz/OlvF7f/z15fuG/eLxGo4F/7hctu5PvxZpySgAAAABJRU5ErkJggg=="],
tooltip: "Show Attention",
iconSelector: function (item) {
return item.Revenue ? item.Revenue < 1000 : false;
},
command: "ShowAttention"
});
crossSheet.rowActionOptions(options);
}
// 行アクションのコマンドを追加
function registerCommands() {
var Commands = spreadNS.Commands;
Commands["ShowAttention"] = {
canUndo: false,
execute: function (context, options) {
if (options.item.Revenue < 1000) {
alert("目標未達成です。売上は " + options.item.Revenue + " です。");
}
return true;
}
};
}
// ピボットテーブルのスライサーを追加
function initSlicer(sheet, pivottable) {
sheet.suspendPaint();
// 販売店名のスライサー
let slicer_area = sheet.slicers.add("slicer_area", pivottable.name(), "販売地域", spreadNS.Slicers.SlicerStyles.light1(),
spreadNS.Slicers.SlicerType.pivotTable);
setSlicerProp(slicer_area, 20, 75, 300, 80, 1, true, true);
slicer_area.columnCount(2);
let slicer_storeName = sheet.slicers.add("slicer_storeName", pivottable.name(), "販売店名", spreadNS.Slicers.SlicerStyles.light2(),
spreadNS.Slicers.SlicerType.pivotTable);
setSlicerProp(slicer_storeName, 320, 75, 500, 80, 1, true, true);
slicer_storeName.columnCount(5);
// タイムラインスライサーを追加
let timelineslicer_year = sheet.slicers.add("timelineslicer_year", pivottable.name(), "販売日", spreadNS.Slicers.TimelineStyles.dark3(),
spreadNS.Slicers.SlicerType.pivotTimeline);
timelineslicer_year.position(new spreadNS.Point(830, 200));
timelineslicer_year.level(spreadNS.Slicers.TimelineLevel.years);
timelineslicer_year.showSelectionLabel(false);
timelineslicer_year.showTimeLevel(false);
timelineslicer_year.showHorizontalScrollbar(false);
timelineslicer_year.height(100);
timelineslicer_year.captionName("年");
let timelineslicer_quarter = sheet.slicers.add("timelineslicer_quarter", pivottable.name(), "販売日", spreadNS.Slicers.TimelineStyles.light6(),
spreadNS.Slicers.SlicerType.pivotTimeline);
timelineslicer_quarter.position(new spreadNS.Point(830, 310));
timelineslicer_quarter.level(spreadNS.Slicers.TimelineLevel.quarters);
timelineslicer_quarter.captionName("四半期");
timelineslicer_quarter.showSelectionLabel(false);
let timelineslicer_month = sheet.slicers.add("timelineslicer_month", pivottable.name(), "販売日", spreadNS.Slicers.TimelineStyles.light5(),
spreadNS.Slicers.SlicerType.pivotTimeline);
timelineslicer_month.position(new spreadNS.Point(830, 460));
timelineslicer_quarter.level(spreadNS.Slicers.TimelineLevel.mouth);
timelineslicer_month.captionName("月");
sheet.resumePaint();
}
// スライサー設定
function setSlicerProp(slicer, x, y, width, height, columnCount, showHeader, showNoDataItemsInLast) {
slicer.position({ x, y });
slicer.width(width);
slicer.height(height);
if (columnCount) {
slicer.columnCount(columnCount);
}
slicer.showHeader(!!showHeader);
slicer.showNoDataItemsInLast(!!showNoDataItemsInLast);
slicer.allowMove(false);
slicer.allowResize(false);
}
<!DOCTYPE html>
<html style="height: 100%; font-size: 14px">
<head>
<meta name="spreadjs culture" content="ja-jp" />
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<link rel="stylesheet" type="text/css" href="style.css" />
<link rel="stylesheet" type="text/css" href="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/styles/gc.spread.sheets.excel2013white.css">
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets/dist/gc.spread.sheets.all.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-shapes/dist/gc.spread.sheets.shapes.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-slicers/dist/gc.spread.sheets.slicers.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-pivot-addon/dist/gc.spread.pivot.pivottables.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-tablesheet/dist/gc.spread.sheets.tablesheet.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/ja/purejs/node_modules/@mescius/spread-sheets-resources-ja/dist/gc.spread.sheets.resources.ja.min.js" type="text/javascript"></script>
<script src="$DEMOROOT$/spread/source/js/license.js" type="text/javascript"></script>
<script src="data.js" type="text/javascript"></script>
<script src="app.js" type="text/javascript"></script>
</head>
<body>
<div class="sample-tutorial">
<div id="ss" style="width:100%;height:100%"></div>
</div>
</body>
</html>
const productData = [
{
"ProductID": 101,
"ProductName": "りんご",
"Category": "果物"
},
{
"ProductID": 102,
"ProductName": "バナナ",
"Category": "果物"
},
{
"ProductID": 103,
"ProductName": "オレンジ",
"Category": "果物"
},
{
"ProductID": 104,
"ProductName": "にんじん",
"Category": "野菜"
},
{
"ProductID": 105,
"ProductName": "きゅうり",
"Category": "野菜"
},
{
"ProductID": 106,
"ProductName": "トマト",
"Category": "野菜"
},
{
"ProductID": 107,
"ProductName": "ドーナツ",
"Category": "ベーカリー"
},
{
"ProductID": 108,
"ProductName": "パン",
"Category": "ベーカリー"
},
{
"ProductID": 109,
"ProductName": "牛乳",
"Category": "飲料"
},
{
"ProductID": 110,
"ProductName": "ヨーグルト",
"Category": "飲料"
}
];
const storeData = [
{
"StoreID": 201,
"Location": "東京",
"Area": "東日本",
"StoreName": "東京本店",
"Address": "東京都千代田区1-1-1",
"PhoneNumber": "03-1234-5678"
},
{
"StoreID": 202,
"Location": "大阪",
"Area": "西日本",
"StoreName": "大阪支店",
"Address": "大阪府大阪市北区2-2-2",
"PhoneNumber": "06-1234-5678"
},
{
"StoreID": 203,
"Location": "名古屋",
"Area": "西日本",
"StoreName": "名古屋支店",
"Address": "愛知県名古屋市中区3-3-3",
"PhoneNumber": "052-1234-5678"
},
{
"StoreID": 204,
"Location": "福岡",
"Area": "西日本",
"StoreName": "福岡支店",
"Address": "福岡県福岡市博多区4-4-4",
"PhoneNumber": "092-1234-5678"
},
{
"StoreID": 205,
"Location": "仙台",
"Area": "東日本",
"StoreName": "仙台支店",
"Address": "宮城県仙台市青葉区6-6-6",
"PhoneNumber": "022-1234-5678"
}
];
const salesData = [
{
"SaleID": 1,
"SalesDate": "2023/10/05",
"StoreID": 204,
"ProductID": 108,
"UnitsSold": 1,
"Revenue": 622,
"CreatedDateTime": "2023/10/05"
},
{
"SaleID": 2,
"SalesDate": "2023/12/17",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 4844,
"CreatedDateTime": "2023/12/17"
},
{
"SaleID": 3,
"SalesDate": "2023/02/02",
"StoreID": 203,
"ProductID": 105,
"UnitsSold": 2,
"Revenue": 9630,
"CreatedDateTime": "2023/02/02"
},
{
"SaleID": 4,
"SalesDate": "2023/10/17",
"StoreID": 204,
"ProductID": 101,
"UnitsSold": 1,
"Revenue": 0,
"CreatedDateTime": "2023/10/17"
},
{
"SaleID": 5,
"SalesDate": "2023/11/10",
"StoreID": 204,
"ProductID": 104,
"UnitsSold": 5,
"Revenue": 5053,
"CreatedDateTime": "2023/11/10"
},
{
"SaleID": 6,
"SalesDate": "2023/10/16",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 1,
"Revenue": 1680,
"CreatedDateTime": "2023/10/16"
},
{
"SaleID": 7,
"SalesDate": "2023/09/20",
"StoreID": 203,
"ProductID": 106,
"UnitsSold": 5,
"Revenue": 8373,
"CreatedDateTime": "2023/09/20"
},
{
"SaleID": 8,
"SalesDate": "2023/01/21",
"StoreID": 201,
"ProductID": 105,
"UnitsSold": 6,
"Revenue": 953,
"CreatedDateTime": "2023/01/21"
},
{
"SaleID": 9,
"SalesDate": "2023/09/08",
"StoreID": 204,
"ProductID": 102,
"UnitsSold": 6,
"Revenue": 8172,
"CreatedDateTime": "2023/09/08"
},
{
"SaleID": 10,
"SalesDate": "2023/01/28",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 6,
"Revenue": 3510,
"CreatedDateTime": "2023/01/28"
},
{
"SaleID": 11,
"SalesDate": "2023/01/08",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 8,
"Revenue": 8809,
"CreatedDateTime": "2023/01/08"
},
{
"SaleID": 12,
"SalesDate": "2023/03/26",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 3,
"Revenue": 1570,
"CreatedDateTime": "2023/03/26"
},
{
"SaleID": 13,
"SalesDate": "2023/09/22",
"StoreID": 203,
"ProductID": 109,
"UnitsSold": 10,
"Revenue": 5996,
"CreatedDateTime": "2023/09/22"
},
{
"SaleID": 14,
"SalesDate": "2023/11/16",
"StoreID": 203,
"ProductID": 105,
"UnitsSold": 10,
"Revenue": 1295,
"CreatedDateTime": "2023/11/16"
},
{
"SaleID": 15,
"SalesDate": "2023/03/04",
"StoreID": 202,
"ProductID": 103,
"UnitsSold": 10,
"Revenue": 8871,
"CreatedDateTime": "2023/03/04"
},
{
"SaleID": 16,
"SalesDate": "2023/10/06",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 5,
"Revenue": 7923,
"CreatedDateTime": "2023/10/06"
},
{
"SaleID": 17,
"SalesDate": "2023/02/27",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 8346,
"CreatedDateTime": "2023/02/27"
},
{
"SaleID": 18,
"SalesDate": "2023/09/28",
"StoreID": 205,
"ProductID": 107,
"UnitsSold": 5,
"Revenue": 3642,
"CreatedDateTime": "2023/09/28"
},
{
"SaleID": 19,
"SalesDate": "2023/01/23",
"StoreID": 204,
"ProductID": 104,
"UnitsSold": 8,
"Revenue": 3135,
"CreatedDateTime": "2023/01/23"
},
{
"SaleID": 20,
"SalesDate": "2023/12/21",
"StoreID": 202,
"ProductID": 107,
"UnitsSold": 1,
"Revenue": 9299,
"CreatedDateTime": "2023/12/21"
},
{
"SaleID": 21,
"SalesDate": "2023/03/15",
"StoreID": 202,
"ProductID": 105,
"UnitsSold": 5,
"Revenue": 7518,
"CreatedDateTime": "2023/03/15"
},
{
"SaleID": 22,
"SalesDate": "2023/11/30",
"StoreID": 202,
"ProductID": 102,
"UnitsSold": 7,
"Revenue": 5119,
"CreatedDateTime": "2023/11/30"
},
{
"SaleID": 23,
"SalesDate": "2023/02/07",
"StoreID": 201,
"ProductID": 104,
"UnitsSold": 10,
"Revenue": 4241,
"CreatedDateTime": "2023/02/07"
},
{
"SaleID": 24,
"SalesDate": "2023/12/08",
"StoreID": 205,
"ProductID": 104,
"UnitsSold": 4,
"Revenue": 5253,
"CreatedDateTime": "2023/12/08"
},
{
"SaleID": 25,
"SalesDate": "2023/01/14",
"StoreID": 205,
"ProductID": 101,
"UnitsSold": 3,
"Revenue": 5281,
"CreatedDateTime": "2023/01/14"
},
{
"SaleID": 26,
"SalesDate": "2023/02/28",
"StoreID": 201,
"ProductID": 110,
"UnitsSold": 2,
"Revenue": 4530,
"CreatedDateTime": "2023/02/28"
},
{
"SaleID": 27,
"SalesDate": "2023/02/02",
"StoreID": 204,
"ProductID": 102,
"UnitsSold": 6,
"Revenue": 9432,
"CreatedDateTime": "2023/02/02"
},
{
"SaleID": 28,
"SalesDate": "2023/03/02",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 2,
"Revenue": 860,
"CreatedDateTime": "2023/03/02"
},
{
"SaleID": 29,
"SalesDate": "2023/11/18",
"StoreID": 202,
"ProductID": 102,
"UnitsSold": 7,
"Revenue": 6418,
"CreatedDateTime": "2023/11/18"
},
{
"SaleID": 30,
"SalesDate": "2023/11/06",
"StoreID": 204,
"ProductID": 103,
"UnitsSold": 5,
"Revenue": 2727,
"CreatedDateTime": "2023/11/06"
},
{
"SaleID": 31,
"SalesDate": "2023/02/08",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 3,
"Revenue": 5087,
"CreatedDateTime": "2023/02/08"
},
{
"SaleID": 32,
"SalesDate": "2023/05/18",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 7,
"Revenue": 3944,
"CreatedDateTime": "2023/05/18"
},
{
"SaleID": 33,
"SalesDate": "2023/09/20",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 1,
"Revenue": 4770,
"CreatedDateTime": "2023/09/20"
},
{
"SaleID": 34,
"SalesDate": "2023/09/24",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 10,
"Revenue": 3557,
"CreatedDateTime": "2023/09/24"
},
{
"SaleID": 35,
"SalesDate": "2023/12/12",
"StoreID": 201,
"ProductID": 102,
"UnitsSold": 3,
"Revenue": 5287,
"CreatedDateTime": "2023/12/12"
},
{
"SaleID": 36,
"SalesDate": "2023/08/17",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 10,
"Revenue": 1551,
"CreatedDateTime": "2023/08/17"
},
{
"SaleID": 37,
"SalesDate": "2023/03/16",
"StoreID": 202,
"ProductID": 109,
"UnitsSold": 3,
"Revenue": 5480,
"CreatedDateTime": "2023/03/16"
},
{
"SaleID": 38,
"SalesDate": "2023/07/22",
"StoreID": 204,
"ProductID": 105,
"UnitsSold": 10,
"Revenue": 9633,
"CreatedDateTime": "2023/07/22"
},
{
"SaleID": 39,
"SalesDate": "2023/01/27",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 6,
"Revenue": 2414,
"CreatedDateTime": "2023/01/27"
},
{
"SaleID": 40,
"SalesDate": "2023/08/26",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 10,
"Revenue": 1195,
"CreatedDateTime": "2023/08/26"
},
{
"SaleID": 41,
"SalesDate": "2023/02/02",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 4,
"Revenue": 7095,
"CreatedDateTime": "2023/02/02"
},
{
"SaleID": 42,
"SalesDate": "2023/09/22",
"StoreID": 205,
"ProductID": 105,
"UnitsSold": 3,
"Revenue": 1794,
"CreatedDateTime": "2023/09/22"
},
{
"SaleID": 43,
"SalesDate": "2023/03/10",
"StoreID": 202,
"ProductID": 103,
"UnitsSold": 8,
"Revenue": 7248,
"CreatedDateTime": "2023/03/10"
},
{
"SaleID": 44,
"SalesDate": "2023/10/13",
"StoreID": 205,
"ProductID": 102,
"UnitsSold": 8,
"Revenue": 5839,
"CreatedDateTime": "2023/10/13"
},
{
"SaleID": 45,
"SalesDate": "2023/10/08",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 4,
"Revenue": 3254,
"CreatedDateTime": "2023/10/08"
},
{
"SaleID": 46,
"SalesDate": "2023/09/26",
"StoreID": 205,
"ProductID": 107,
"UnitsSold": 9,
"Revenue": 6598,
"CreatedDateTime": "2023/09/26"
},
{
"SaleID": 47,
"SalesDate": "2023/12/29",
"StoreID": 202,
"ProductID": 106,
"UnitsSold": 2,
"Revenue": 1562,
"CreatedDateTime": "2023/12/29"
},
{
"SaleID": 48,
"SalesDate": "2023/02/21",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 3,
"Revenue": 762,
"CreatedDateTime": "2023/02/21"
},
{
"SaleID": 49,
"SalesDate": "2023/01/07",
"StoreID": 204,
"ProductID": 106,
"UnitsSold": 10,
"Revenue": 2350,
"CreatedDateTime": "2023/01/07"
},
{
"SaleID": 50,
"SalesDate": "2023/05/06",
"StoreID": 204,
"ProductID": 105,
"UnitsSold": 4,
"Revenue": 4428,
"CreatedDateTime": "2023/05/06"
},
{
"SaleID": 51,
"SalesDate": "2023/08/09",
"StoreID": 202,
"ProductID": 110,
"UnitsSold": 9,
"Revenue": 3576,
"CreatedDateTime": "2023/08/09"
},
{
"SaleID": 52,
"SalesDate": "2023/09/14",
"StoreID": 204,
"ProductID": 102,
"UnitsSold": 1,
"Revenue": 8357,
"CreatedDateTime": "2023/09/14"
},
{
"SaleID": 53,
"SalesDate": "2023/01/21",
"StoreID": 201,
"ProductID": 110,
"UnitsSold": 3,
"Revenue": 6168,
"CreatedDateTime": "2023/01/21"
},
{
"SaleID": 54,
"SalesDate": "2023/12/18",
"StoreID": 203,
"ProductID": 109,
"UnitsSold": 8,
"Revenue": 8838,
"CreatedDateTime": "2023/12/18"
},
{
"SaleID": 55,
"SalesDate": "2023/05/15",
"StoreID": 203,
"ProductID": 110,
"UnitsSold": 10,
"Revenue": 4249,
"CreatedDateTime": "2023/05/15"
},
{
"SaleID": 56,
"SalesDate": "2023/06/27",
"StoreID": 201,
"ProductID": 105,
"UnitsSold": 6,
"Revenue": 710,
"CreatedDateTime": "2023/06/27"
},
{
"SaleID": 57,
"SalesDate": "2023/07/11",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 9,
"Revenue": 7624,
"CreatedDateTime": "2023/07/11"
},
{
"SaleID": 58,
"SalesDate": "2023/02/28",
"StoreID": 204,
"ProductID": 105,
"UnitsSold": 4,
"Revenue": 8861,
"CreatedDateTime": "2023/02/28"
},
{
"SaleID": 59,
"SalesDate": "2023/10/14",
"StoreID": 204,
"ProductID": 101,
"UnitsSold": 6,
"Revenue": 5790,
"CreatedDateTime": "2023/10/14"
},
{
"SaleID": 60,
"SalesDate": "2023/10/14",
"StoreID": 201,
"ProductID": 109,
"UnitsSold": 9,
"Revenue": 9421,
"CreatedDateTime": "2023/10/14"
},
{
"SaleID": 61,
"SalesDate": "2023/03/22",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 1594,
"CreatedDateTime": "2023/03/22"
},
{
"SaleID": 62,
"SalesDate": "2023/09/21",
"StoreID": 203,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 1134,
"CreatedDateTime": "2023/09/21"
},
{
"SaleID": 63,
"SalesDate": "2023/01/02",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 2,
"Revenue": 7608,
"CreatedDateTime": "2023/01/02"
},
{
"SaleID": 64,
"SalesDate": "2023/11/03",
"StoreID": 201,
"ProductID": 105,
"UnitsSold": 1,
"Revenue": 8494,
"CreatedDateTime": "2023/11/03"
},
{
"SaleID": 65,
"SalesDate": "2023/04/17",
"StoreID": 204,
"ProductID": 106,
"UnitsSold": 6,
"Revenue": 1800,
"CreatedDateTime": "2023/04/17"
},
{
"SaleID": 66,
"SalesDate": "2023/04/15",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 9,
"Revenue": 9849,
"CreatedDateTime": "2023/04/15"
},
{
"SaleID": 67,
"SalesDate": "2023/06/28",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 4,
"Revenue": 3623,
"CreatedDateTime": "2023/06/28"
},
{
"SaleID": 68,
"SalesDate": "2023/01/05",
"StoreID": 205,
"ProductID": 103,
"UnitsSold": 9,
"Revenue": 8735,
"CreatedDateTime": "2023/01/05"
},
{
"SaleID": 69,
"SalesDate": "2023/10/20",
"StoreID": 205,
"ProductID": 110,
"UnitsSold": 1,
"Revenue": 4904,
"CreatedDateTime": "2023/10/20"
},
{
"SaleID": 70,
"SalesDate": "2023/07/27",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 1,
"Revenue": 8849,
"CreatedDateTime": "2023/07/27"
},
{
"SaleID": 71,
"SalesDate": "2023/11/11",
"StoreID": 203,
"ProductID": 105,
"UnitsSold": 2,
"Revenue": 5361,
"CreatedDateTime": "2023/11/11"
},
{
"SaleID": 72,
"SalesDate": "2023/01/11",
"StoreID": 205,
"ProductID": 105,
"UnitsSold": 8,
"Revenue": 4880,
"CreatedDateTime": "2023/01/11"
},
{
"SaleID": 73,
"SalesDate": "2023/12/14",
"StoreID": 205,
"ProductID": 105,
"UnitsSold": 5,
"Revenue": 1215,
"CreatedDateTime": "2023/12/14"
},
{
"SaleID": 74,
"SalesDate": "2023/08/02",
"StoreID": 202,
"ProductID": 104,
"UnitsSold": 5,
"Revenue": 9029,
"CreatedDateTime": "2023/08/02"
},
{
"SaleID": 75,
"SalesDate": "2023/11/05",
"StoreID": 202,
"ProductID": 102,
"UnitsSold": 1,
"Revenue": 9018,
"CreatedDateTime": "2023/11/05"
},
{
"SaleID": 76,
"SalesDate": "2023/08/24",
"StoreID": 203,
"ProductID": 104,
"UnitsSold": 2,
"Revenue": 6692,
"CreatedDateTime": "2023/08/24"
},
{
"SaleID": 77,
"SalesDate": "2023/02/08",
"StoreID": 203,
"ProductID": 110,
"UnitsSold": 6,
"Revenue": 7908,
"CreatedDateTime": "2023/02/08"
},
{
"SaleID": 78,
"SalesDate": "2023/03/26",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 4,
"Revenue": 2467,
"CreatedDateTime": "2023/03/26"
},
{
"SaleID": 79,
"SalesDate": "2023/07/10",
"StoreID": 201,
"ProductID": 110,
"UnitsSold": 7,
"Revenue": 3093,
"CreatedDateTime": "2023/07/10"
},
{
"SaleID": 80,
"SalesDate": "2023/07/10",
"StoreID": 203,
"ProductID": 105,
"UnitsSold": 5,
"Revenue": 9002,
"CreatedDateTime": "2023/07/10"
},
{
"SaleID": 81,
"SalesDate": "2023/10/08",
"StoreID": 204,
"ProductID": 108,
"UnitsSold": 8,
"Revenue": 1564,
"CreatedDateTime": "2023/10/08"
},
{
"SaleID": 82,
"SalesDate": "2023/11/12",
"StoreID": 203,
"ProductID": 106,
"UnitsSold": 9,
"Revenue": 4494,
"CreatedDateTime": "2023/11/12"
},
{
"SaleID": 83,
"SalesDate": "2023/08/31",
"StoreID": 202,
"ProductID": 102,
"UnitsSold": 6,
"Revenue": 8072,
"CreatedDateTime": "2023/08/31"
},
{
"SaleID": 84,
"SalesDate": "2023/03/11",
"StoreID": 205,
"ProductID": 102,
"UnitsSold": 10,
"Revenue": 5139,
"CreatedDateTime": "2023/03/11"
},
{
"SaleID": 85,
"SalesDate": "2023/09/09",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 1,
"Revenue": 7081,
"CreatedDateTime": "2023/09/09"
},
{
"SaleID": 86,
"SalesDate": "2023/11/03",
"StoreID": 202,
"ProductID": 108,
"UnitsSold": 6,
"Revenue": 3918,
"CreatedDateTime": "2023/11/03"
},
{
"SaleID": 87,
"SalesDate": "2023/12/28",
"StoreID": 202,
"ProductID": 108,
"UnitsSold": 10,
"Revenue": 588,
"CreatedDateTime": "2023/12/28"
},
{
"SaleID": 88,
"SalesDate": "2023/09/14",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 2508,
"CreatedDateTime": "2023/09/14"
},
{
"SaleID": 89,
"SalesDate": "2023/05/27",
"StoreID": 205,
"ProductID": 103,
"UnitsSold": 4,
"Revenue": 4015,
"CreatedDateTime": "2023/05/27"
},
{
"SaleID": 90,
"SalesDate": "2023/10/30",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 8,
"Revenue": 4573,
"CreatedDateTime": "2023/10/30"
},
{
"SaleID": 91,
"SalesDate": "2023/06/21",
"StoreID": 201,
"ProductID": 105,
"UnitsSold": 3,
"Revenue": 8960,
"CreatedDateTime": "2023/06/21"
},
{
"SaleID": 92,
"SalesDate": "2023/03/01",
"StoreID": 203,
"ProductID": 108,
"UnitsSold": 5,
"Revenue": 7227,
"CreatedDateTime": "2023/03/01"
},
{
"SaleID": 93,
"SalesDate": "2023/12/28",
"StoreID": 201,
"ProductID": 103,
"UnitsSold": 4,
"Revenue": 1677,
"CreatedDateTime": "2023/12/28"
},
{
"SaleID": 94,
"SalesDate": "2023/01/23",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 1,
"Revenue": 8028,
"CreatedDateTime": "2023/01/23"
},
{
"SaleID": 95,
"SalesDate": "2023/01/21",
"StoreID": 204,
"ProductID": 106,
"UnitsSold": 5,
"Revenue": 1254,
"CreatedDateTime": "2023/01/21"
},
{
"SaleID": 96,
"SalesDate": "2023/03/09",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 9,
"Revenue": 6148,
"CreatedDateTime": "2023/03/09"
},
{
"SaleID": 97,
"SalesDate": "2023/03/03",
"StoreID": 204,
"ProductID": 102,
"UnitsSold": 8,
"Revenue": 6644,
"CreatedDateTime": "2023/03/03"
},
{
"SaleID": 98,
"SalesDate": "2023/09/18",
"StoreID": 201,
"ProductID": 102,
"UnitsSold": 9,
"Revenue": 1356,
"CreatedDateTime": "2023/09/18"
},
{
"SaleID": 99,
"SalesDate": "2023/04/02",
"StoreID": 205,
"ProductID": 110,
"UnitsSold": 9,
"Revenue": 2568,
"CreatedDateTime": "2023/04/02"
},
{
"SaleID": 100,
"SalesDate": "2023/12/06",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 5,
"Revenue": 9676,
"CreatedDateTime": "2023/12/06"
},
{
"SaleID": 101,
"SalesDate": "2024/01/22",
"StoreID": 202,
"ProductID": 105,
"UnitsSold": 7,
"Revenue": 2617,
"CreatedDateTime": "2024/01/22"
},
{
"SaleID": 102,
"SalesDate": "2023/06/06",
"StoreID": 201,
"ProductID": 105,
"UnitsSold": 1,
"Revenue": 9553,
"CreatedDateTime": "2023/06/06"
},
{
"SaleID": 103,
"SalesDate": "2023/06/21",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 2,
"Revenue": 3528,
"CreatedDateTime": "2023/06/21"
},
{
"SaleID": 104,
"SalesDate": "2023/09/18",
"StoreID": 203,
"ProductID": 103,
"UnitsSold": 4,
"Revenue": 2725,
"CreatedDateTime": "2023/09/18"
},
{
"SaleID": 105,
"SalesDate": "2023/09/01",
"StoreID": 202,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 3437,
"CreatedDateTime": "2023/09/01"
},
{
"SaleID": 106,
"SalesDate": "2024/01/15",
"StoreID": 205,
"ProductID": 110,
"UnitsSold": 10,
"Revenue": 1833,
"CreatedDateTime": "2024/01/15"
},
{
"SaleID": 107,
"SalesDate": "2024/03/23",
"StoreID": 203,
"ProductID": 110,
"UnitsSold": 2,
"Revenue": 4900,
"CreatedDateTime": "2024/03/23"
},
{
"SaleID": 108,
"SalesDate": "2024/03/26",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 9,
"Revenue": 6270,
"CreatedDateTime": "2024/03/26"
},
{
"SaleID": 109,
"SalesDate": "2023/07/13",
"StoreID": 203,
"ProductID": 104,
"UnitsSold": 3,
"Revenue": 3016,
"CreatedDateTime": "2023/07/13"
},
{
"SaleID": 110,
"SalesDate": "2023/09/26",
"StoreID": 201,
"ProductID": 110,
"UnitsSold": 4,
"Revenue": 8589,
"CreatedDateTime": "2023/09/26"
},
{
"SaleID": 111,
"SalesDate": "2024/05/10",
"StoreID": 201,
"ProductID": 103,
"UnitsSold": 1,
"Revenue": 6214,
"CreatedDateTime": "2024/05/10"
},
{
"SaleID": 112,
"SalesDate": "2023/08/08",
"StoreID": 205,
"ProductID": 102,
"UnitsSold": 10,
"Revenue": 8875,
"CreatedDateTime": "2023/08/08"
},
{
"SaleID": 113,
"SalesDate": "2023/08/09",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 2,
"Revenue": 6663,
"CreatedDateTime": "2023/08/09"
},
{
"SaleID": 114,
"SalesDate": "2023/09/03",
"StoreID": 203,
"ProductID": 102,
"UnitsSold": 7,
"Revenue": 8588,
"CreatedDateTime": "2023/09/03"
},
{
"SaleID": 115,
"SalesDate": "2023/09/21",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 4,
"Revenue": 9734,
"CreatedDateTime": "2023/09/21"
},
{
"SaleID": 116,
"SalesDate": "2024/04/25",
"StoreID": 201,
"ProductID": 109,
"UnitsSold": 6,
"Revenue": 4423,
"CreatedDateTime": "2024/04/25"
},
{
"SaleID": 117,
"SalesDate": "2024/04/02",
"StoreID": 201,
"ProductID": 103,
"UnitsSold": 2,
"Revenue": 693,
"CreatedDateTime": "2024/04/02"
},
{
"SaleID": 118,
"SalesDate": "2023/06/21",
"StoreID": 203,
"ProductID": 106,
"UnitsSold": 5,
"Revenue": 2152,
"CreatedDateTime": "2023/06/21"
},
{
"SaleID": 119,
"SalesDate": "2024/04/08",
"StoreID": 204,
"ProductID": 106,
"UnitsSold": 9,
"Revenue": 2461,
"CreatedDateTime": "2024/04/08"
},
{
"SaleID": 120,
"SalesDate": "2024/02/16",
"StoreID": 205,
"ProductID": 101,
"UnitsSold": 6,
"Revenue": 2169,
"CreatedDateTime": "2024/02/16"
},
{
"SaleID": 121,
"SalesDate": "2023/09/26",
"StoreID": 202,
"ProductID": 105,
"UnitsSold": 10,
"Revenue": 9611,
"CreatedDateTime": "2023/09/26"
},
{
"SaleID": 122,
"SalesDate": "2023/10/10",
"StoreID": 205,
"ProductID": 104,
"UnitsSold": 4,
"Revenue": 1387,
"CreatedDateTime": "2023/10/10"
},
{
"SaleID": 123,
"SalesDate": "2024/05/17",
"StoreID": 205,
"ProductID": 110,
"UnitsSold": 3,
"Revenue": 4108,
"CreatedDateTime": "2024/05/17"
},
{
"SaleID": 124,
"SalesDate": "2023/12/02",
"StoreID": 204,
"ProductID": 103,
"UnitsSold": 8,
"Revenue": 2998,
"CreatedDateTime": "2023/12/02"
},
{
"SaleID": 125,
"SalesDate": "2024/01/20",
"StoreID": 204,
"ProductID": 103,
"UnitsSold": 5,
"Revenue": 4040,
"CreatedDateTime": "2024/01/20"
},
{
"SaleID": 126,
"SalesDate": "2024/05/22",
"StoreID": 205,
"ProductID": 103,
"UnitsSold": 9,
"Revenue": 4325,
"CreatedDateTime": "2024/05/22"
},
{
"SaleID": 127,
"SalesDate": "2023/09/05",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 10,
"Revenue": 1039,
"CreatedDateTime": "2023/09/05"
},
{
"SaleID": 128,
"SalesDate": "2023/06/17",
"StoreID": 203,
"ProductID": 104,
"UnitsSold": 8,
"Revenue": 5649,
"CreatedDateTime": "2023/06/17"
},
{
"SaleID": 129,
"SalesDate": "2024/01/05",
"StoreID": 202,
"ProductID": 106,
"UnitsSold": 1,
"Revenue": 8093,
"CreatedDateTime": "2024/01/05"
},
{
"SaleID": 130,
"SalesDate": "2023/11/19",
"StoreID": 202,
"ProductID": 101,
"UnitsSold": 7,
"Revenue": 8335,
"CreatedDateTime": "2023/11/19"
},
{
"SaleID": 131,
"SalesDate": "2023/07/02",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 10,
"Revenue": 9005,
"CreatedDateTime": "2023/07/02"
},
{
"SaleID": 132,
"SalesDate": "2023/11/14",
"StoreID": 201,
"ProductID": 102,
"UnitsSold": 6,
"Revenue": 7822,
"CreatedDateTime": "2023/11/14"
},
{
"SaleID": 133,
"SalesDate": "2023/12/19",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 9,
"Revenue": 9917,
"CreatedDateTime": "2023/12/19"
},
{
"SaleID": 134,
"SalesDate": "2023/11/05",
"StoreID": 203,
"ProductID": 103,
"UnitsSold": 3,
"Revenue": 3662,
"CreatedDateTime": "2023/11/05"
},
{
"SaleID": 135,
"SalesDate": "2023/11/16",
"StoreID": 204,
"ProductID": 105,
"UnitsSold": 8,
"Revenue": 6029,
"CreatedDateTime": "2023/11/16"
},
{
"SaleID": 136,
"SalesDate": "2024/03/24",
"StoreID": 201,
"ProductID": 104,
"UnitsSold": 10,
"Revenue": 2112,
"CreatedDateTime": "2024/03/24"
},
{
"SaleID": 137,
"SalesDate": "2023/11/17",
"StoreID": 203,
"ProductID": 104,
"UnitsSold": 1,
"Revenue": 742,
"CreatedDateTime": "2023/11/17"
},
{
"SaleID": 138,
"SalesDate": "2023/11/20",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 10,
"Revenue": 2825,
"CreatedDateTime": "2023/11/20"
},
{
"SaleID": 139,
"SalesDate": "2023/10/13",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 1,
"Revenue": 8005,
"CreatedDateTime": "2023/10/13"
},
{
"SaleID": 140,
"SalesDate": "2024/05/17",
"StoreID": 204,
"ProductID": 101,
"UnitsSold": 3,
"Revenue": 8005,
"CreatedDateTime": "2024/05/17"
},
{
"SaleID": 141,
"SalesDate": "2023/06/17",
"StoreID": 202,
"ProductID": 103,
"UnitsSold": 9,
"Revenue": 8668,
"CreatedDateTime": "2023/06/17"
},
{
"SaleID": 142,
"SalesDate": "2023/10/04",
"StoreID": 203,
"ProductID": 102,
"UnitsSold": 6,
"Revenue": 10265,
"CreatedDateTime": "2023/10/04"
},
{
"SaleID": 143,
"SalesDate": "2024/01/27",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 4,
"Revenue": 9672,
"CreatedDateTime": "2024/01/27"
},
{
"SaleID": 144,
"SalesDate": "2024/01/09",
"StoreID": 205,
"ProductID": 102,
"UnitsSold": 1,
"Revenue": 7912,
"CreatedDateTime": "2024/01/09"
},
{
"SaleID": 145,
"SalesDate": "2023/07/18",
"StoreID": 202,
"ProductID": 105,
"UnitsSold": 8,
"Revenue": 1929,
"CreatedDateTime": "2023/07/18"
},
{
"SaleID": 146,
"SalesDate": "2023/07/01",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 8,
"Revenue": 696,
"CreatedDateTime": "2023/07/01"
},
{
"SaleID": 147,
"SalesDate": "2023/10/01",
"StoreID": 203,
"ProductID": 106,
"UnitsSold": 7,
"Revenue": 3142,
"CreatedDateTime": "2023/10/01"
},
{
"SaleID": 148,
"SalesDate": "2023/09/10",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 10,
"Revenue": 3056,
"CreatedDateTime": "2023/09/10"
},
{
"SaleID": 149,
"SalesDate": "2023/12/12",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 8,
"Revenue": 8066,
"CreatedDateTime": "2023/12/12"
},
{
"SaleID": 150,
"SalesDate": "2023/06/17",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 6,
"Revenue": 4467,
"CreatedDateTime": "2023/06/17"
},
{
"SaleID": 151,
"SalesDate": "2023/10/02",
"StoreID": 203,
"ProductID": 102,
"UnitsSold": 1,
"Revenue": 7352,
"CreatedDateTime": "2023/10/02"
},
{
"SaleID": 152,
"SalesDate": "2023/12/22",
"StoreID": 204,
"ProductID": 105,
"UnitsSold": 7,
"Revenue": 8102,
"CreatedDateTime": "2023/12/22"
},
{
"SaleID": 153,
"SalesDate": "2023/07/02",
"StoreID": 203,
"ProductID": 109,
"UnitsSold": 7,
"Revenue": 7227,
"CreatedDateTime": "2023/07/02"
},
{
"SaleID": 154,
"SalesDate": "2023/10/11",
"StoreID": 201,
"ProductID": 102,
"UnitsSold": 7,
"Revenue": 4016,
"CreatedDateTime": "2023/10/11"
},
{
"SaleID": 155,
"SalesDate": "2024/01/11",
"StoreID": 201,
"ProductID": 104,
"UnitsSold": 6,
"Revenue": 5379,
"CreatedDateTime": "2024/01/11"
},
{
"SaleID": 156,
"SalesDate": "2024/04/02",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 7,
"Revenue": 5543,
"CreatedDateTime": "2024/04/02"
},
{
"SaleID": 157,
"SalesDate": "2024/03/13",
"StoreID": 205,
"ProductID": 103,
"UnitsSold": 7,
"Revenue": 4274,
"CreatedDateTime": "2024/03/13"
},
{
"SaleID": 158,
"SalesDate": "2023/10/10",
"StoreID": 205,
"ProductID": 106,
"UnitsSold": 2,
"Revenue": 6665,
"CreatedDateTime": "2023/10/10"
},
{
"SaleID": 159,
"SalesDate": "2023/10/16",
"StoreID": 201,
"ProductID": 107,
"UnitsSold": 8,
"Revenue": 5880,
"CreatedDateTime": "2023/10/16"
},
{
"SaleID": 160,
"SalesDate": "2024/04/28",
"StoreID": 205,
"ProductID": 101,
"UnitsSold": 7,
"Revenue": 710,
"CreatedDateTime": "2024/04/28"
},
{
"SaleID": 161,
"SalesDate": "2024/03/20",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 1,
"Revenue": 4754,
"CreatedDateTime": "2024/03/20"
},
{
"SaleID": 162,
"SalesDate": "2023/07/16",
"StoreID": 201,
"ProductID": 106,
"UnitsSold": 3,
"Revenue": 632,
"CreatedDateTime": "2023/07/16"
},
{
"SaleID": 163,
"SalesDate": "2024/04/12",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 5,
"Revenue": 10193,
"CreatedDateTime": "2024/04/12"
},
{
"SaleID": 164,
"SalesDate": "2024/01/27",
"StoreID": 202,
"ProductID": 104,
"UnitsSold": 1,
"Revenue": 6607,
"CreatedDateTime": "2024/01/27"
},
{
"SaleID": 165,
"SalesDate": "2024/01/14",
"StoreID": 203,
"ProductID": 105,
"UnitsSold": 2,
"Revenue": 9167,
"CreatedDateTime": "2024/01/14"
},
{
"SaleID": 166,
"SalesDate": "2023/08/07",
"StoreID": 201,
"ProductID": 104,
"UnitsSold": 4,
"Revenue": 5588,
"CreatedDateTime": "2023/08/07"
},
{
"SaleID": 167,
"SalesDate": "2024/03/17",
"StoreID": 202,
"ProductID": 108,
"UnitsSold": 9,
"Revenue": 1396,
"CreatedDateTime": "2024/03/17"
},
{
"SaleID": 168,
"SalesDate": "2023/12/01",
"StoreID": 202,
"ProductID": 103,
"UnitsSold": 3,
"Revenue": 2693,
"CreatedDateTime": "2023/12/01"
},
{
"SaleID": 169,
"SalesDate": "2023/12/26",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 6,
"Revenue": 3960,
"CreatedDateTime": "2023/12/26"
},
{
"SaleID": 170,
"SalesDate": "2023/11/14",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 4,
"Revenue": 3926,
"CreatedDateTime": "2023/11/14"
},
{
"SaleID": 171,
"SalesDate": "2023/07/07",
"StoreID": 201,
"ProductID": 101,
"UnitsSold": 9,
"Revenue": 1274,
"CreatedDateTime": "2023/07/07"
},
{
"SaleID": 172,
"SalesDate": "2023/10/21",
"StoreID": 202,
"ProductID": 103,
"UnitsSold": 8,
"Revenue": 8422,
"CreatedDateTime": "2023/10/21"
},
{
"SaleID": 173,
"SalesDate": "2024/03/07",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 1,
"Revenue": 10061,
"CreatedDateTime": "2024/03/07"
},
{
"SaleID": 174,
"SalesDate": "2023/08/07",
"StoreID": 204,
"ProductID": 110,
"UnitsSold": 6,
"Revenue": 9018,
"CreatedDateTime": "2023/08/07"
},
{
"SaleID": 175,
"SalesDate": "2024/05/22",
"StoreID": 204,
"ProductID": 103,
"UnitsSold": 6,
"Revenue": 3823,
"CreatedDateTime": "2024/05/22"
},
{
"SaleID": 176,
"SalesDate": "2024/04/11",
"StoreID": 203,
"ProductID": 101,
"UnitsSold": 7,
"Revenue": 7550,
"CreatedDateTime": "2024/04/11"
},
{
"SaleID": 177,
"SalesDate": "2024/02/07",
"StoreID": 203,
"ProductID": 109,
"UnitsSold": 5,
"Revenue": 3831,
"CreatedDateTime": "2024/02/07"
},
{
"SaleID": 178,
"SalesDate": "2024/02/24",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 10,
"Revenue": 3909,
"CreatedDateTime": "2024/02/24"
},
{
"SaleID": 179,
"SalesDate": "2024/01/23",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 3,
"Revenue": 912,
"CreatedDateTime": "2024/01/23"
},
{
"SaleID": 180,
"SalesDate": "2023/10/10",
"StoreID": 204,
"ProductID": 107,
"UnitsSold": 1,
"Revenue": 3564,
"CreatedDateTime": "2023/10/10"
},
{
"SaleID": 181,
"SalesDate": "2024/03/04",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 7,
"Revenue": 10214,
"CreatedDateTime": "2024/03/04"
},
{
"SaleID": 182,
"SalesDate": "2023/11/10",
"StoreID": 205,
"ProductID": 110,
"UnitsSold": 1,
"Revenue": 3831,
"CreatedDateTime": "2023/11/10"
},
{
"SaleID": 183,
"SalesDate": "2023/09/14",
"StoreID": 201,
"ProductID": 110,
"UnitsSold": 1,
"Revenue": 9457,
"CreatedDateTime": "2023/09/14"
},
{
"SaleID": 184,
"SalesDate": "2023/09/05",
"StoreID": 202,
"ProductID": 109,
"UnitsSold": 3,
"Revenue": 2688,
"CreatedDateTime": "2023/09/05"
},
{
"SaleID": 185,
"SalesDate": "2024/05/16",
"StoreID": 203,
"ProductID": 101,
"UnitsSold": 1,
"Revenue": 6907,
"CreatedDateTime": "2024/05/16"
},
{
"SaleID": 186,
"SalesDate": "2024/05/24",
"StoreID": 202,
"ProductID": 106,
"UnitsSold": 7,
"Revenue": 8086,
"CreatedDateTime": "2024/05/24"
},
{
"SaleID": 187,
"SalesDate": "2023/12/10",
"StoreID": 205,
"ProductID": 108,
"UnitsSold": 10,
"Revenue": 10371,
"CreatedDateTime": "2023/12/10"
},
{
"SaleID": 188,
"SalesDate": "2023/09/04",
"StoreID": 204,
"ProductID": 101,
"UnitsSold": 1,
"Revenue": 7216,
"CreatedDateTime": "2023/09/04"
},
{
"SaleID": 189,
"SalesDate": "2023/07/27",
"StoreID": 201,
"ProductID": 103,
"UnitsSold": 5,
"Revenue": 4556,
"CreatedDateTime": "2023/07/27"
},
{
"SaleID": 190,
"SalesDate": "2023/12/08",
"StoreID": 205,
"ProductID": 107,
"UnitsSold": 8,
"Revenue": 7501,
"CreatedDateTime": "2023/12/08"
},
{
"SaleID": 191,
"SalesDate": "2024/02/21",
"StoreID": 202,
"ProductID": 105,
"UnitsSold": 9,
"Revenue": 8795,
"CreatedDateTime": "2024/02/21"
},
{
"SaleID": 192,
"SalesDate": "2023/10/27",
"StoreID": 204,
"ProductID": 109,
"UnitsSold": 9,
"Revenue": 3011,
"CreatedDateTime": "2023/10/27"
},
{
"SaleID": 193,
"SalesDate": "2024/03/26",
"StoreID": 201,
"ProductID": 109,
"UnitsSold": 9,
"Revenue": 10202,
"CreatedDateTime": "2024/03/26"
},
{
"SaleID": 194,
"SalesDate": "2024/05/06",
"StoreID": 201,
"ProductID": 109,
"UnitsSold": 6,
"Revenue": 9989,
"CreatedDateTime": "2024/05/06"
},
{
"SaleID": 195,
"SalesDate": "2024/05/04",
"StoreID": 204,
"ProductID": 105,
"UnitsSold": 1,
"Revenue": 3129,
"CreatedDateTime": "2024/05/04"
},
{
"SaleID": 196,
"SalesDate": "2023/11/13",
"StoreID": 204,
"ProductID": 104,
"UnitsSold": 7,
"Revenue": 8811,
"CreatedDateTime": "2023/11/13"
},
{
"SaleID": 197,
"SalesDate": "2023/08/07",
"StoreID": 203,
"ProductID": 107,
"UnitsSold": 3,
"Revenue": 8272,
"CreatedDateTime": "2023/08/07"
},
{
"SaleID": 198,
"SalesDate": "2023/10/17",
"StoreID": 205,
"ProductID": 107,
"UnitsSold": 5,
"Revenue": 6715,
"CreatedDateTime": "2023/10/17"
},
{
"SaleID": 199,
"SalesDate": "2024/01/28",
"StoreID": 201,
"ProductID": 108,
"UnitsSold": 6,
"Revenue": 6980,
"CreatedDateTime": "2024/01/28"
},
{
"SaleID": 200,
"SalesDate": "2023/07/22",
"StoreID": 204,
"ProductID": 108,
"UnitsSold": 1,
"Revenue": 7944,
"CreatedDateTime": "2023/07/22"
}
];