import { useState } from 'react';
import {
BarChart,
LineChart,
DataTable,
Card,
CardHeader,
CardTitle,
CardContent,
} from '@databricks/appkit-ui/react';
import { useAnalyticsQuery } from '@databricks/appkit-ui/react';
import { sql } from '@databricks/appkit-ui/js';
function App() {
const [startDate, setStartDate] = useState('2024-01-01');
const [endDate, setEndDate] = useState('2024-12-31');
const params = {
start_date: sql.date(startDate),
end_date: sql.date(endDate),
};
// KPI 데이터 조회
const { data: monthlyData } = useAnalyticsQuery('monthly_revenue', params);
// KPI 계산
const totalRevenue = monthlyData
? monthlyData.reduce((sum, row) => sum + Number(row.revenue), 0)
: 0;
const totalOrders = monthlyData
? monthlyData.reduce((sum, row) => sum + Number(row.order_count), 0)
: 0;
const avgOrderValue = totalOrders > 0 ? totalRevenue / totalOrders : 0;
return (
<div className="container mx-auto p-6">
<h1 className="text-3xl font-bold mb-6">매출 분석 대시보드</h1>
{/* 날짜 필터 */}
<div className="flex gap-4 mb-6">
<input
type="date"
value={startDate}
onChange={(e) => setStartDate(e.target.value)}
className="border rounded p-2"
/>
<input
type="date"
value={endDate}
onChange={(e) => setEndDate(e.target.value)}
className="border rounded p-2"
/>
</div>
{/* KPI 카드 */}
<div className="grid grid-cols-3 gap-4 mb-8">
<Card>
<CardHeader><CardTitle>총 매출</CardTitle></CardHeader>
<CardContent>
<p className="text-2xl font-bold">
${Number(totalRevenue).toLocaleString()}
</p>
</CardContent>
</Card>
<Card>
<CardHeader><CardTitle>총 주문 수</CardTitle></CardHeader>
<CardContent>
<p className="text-2xl font-bold">
{Number(totalOrders).toLocaleString()}건
</p>
</CardContent>
</Card>
<Card>
<CardHeader><CardTitle>평균 주문 금액</CardTitle></CardHeader>
<CardContent>
<p className="text-2xl font-bold">
${Number(avgOrderValue).toFixed(2)}
</p>
</CardContent>
</Card>
</div>
{/* 월별 매출 추이 (라인 차트) */}
<Card className="mb-8">
<CardHeader><CardTitle>월별 매출 추이</CardTitle></CardHeader>
<CardContent>
<LineChart
queryKey="monthly_revenue"
parameters={params}
xKey="month"
yKey={["revenue", "order_count"]}
colors={['#FF3621', '#4462c9']}
height={400}
/>
</CardContent>
</Card>
{/* TOP 10 상품 (바 차트 + 테이블) */}
<div className="grid grid-cols-2 gap-4">
<Card>
<CardHeader><CardTitle>TOP 10 상품 매출</CardTitle></CardHeader>
<CardContent>
<BarChart
queryKey="top_products"
parameters={params}
xKey="product_name"
yKey="total_revenue"
colors={['#40d1f5']}
height={400}
/>
</CardContent>
</Card>
<Card>
<CardHeader><CardTitle>상세 데이터</CardTitle></CardHeader>
<CardContent>
<DataTable
queryKey="top_products"
parameters={params}
/>
</CardContent>
</Card>
</div>
</div>
);
}
export default App;