تحلیل داده‌های مالی در سپیدار با SQL Server | آموزش کوئری‌نویسی پیشرفته

Sql server در سپیدار سیستم

تحلیل داده‌های مالی در سپیدار با استفاده از کوئری‌های پیشرفته SQL Server

در تحلیل داده‌های مالی نرم‌افزار سپیدار، نخستین و اساسی‌ترین گام، شناخت دقیق ساختار دیتابیس آن است. دیتابیس سپیدار در محیط SQL Server پیاده‌سازی شده و شامل تعداد زیادی جدول، نما (View)، کلیدهای اصلی (Primary Key) و خارجی (Foreign Key) است که داده‌های حسابداری، مالی، فروش، دریافت و پرداخت را ذخیره می‌کند.

مهم‌ترین جداول دیتابیس سپیدار

از مهم‌ترین جداول حسابداری می‌توان به:

  • Accounting.DailyAccountingDocument: ذخیره اسناد حسابداری
  • Accounting.DailyAccountingDocumentItem: نگهداری اطلاعات ردیف‌های بدهکار، بستانکار و کد حساب معین
  • Accounting.Account: شامل حساب‌های کل، معین و تفضیلی
  • Sell.SellInvoice: ذخیره فاکتورهای فروش
  • Sell.SellInvoiceItem: ذخیره اقلام هر فاکتور فروش
  • CRM.Customer: اطلاعات کامل مشتریان
  • ReceivePay.ReceivePayDoc: اسناد دریافت و پرداخت
  • ReceivePay.ReceivePayDocItem: جزئیات اسناد دریافت و پرداخت
  • ReceivePay.Cheque: اطلاعات چک‌ها
  • Inventory.Goods: اطلاعات کالاها و محصولات
  • Inventory.WarehouseReceipt: رسیدهای انبار
  • Asset.Asset: اطلاعات دارایی‌های ثابت
  • Asset.AssetDepreciation: استهلاک دارایی‌ها

نماهای مهم (View) در سپیدار

  • Vw_AllAccountTransactions: مشاهده همه تراکنش‌های حسابداری
  • Vw_CustomerBalance: مانده حساب مشتریان
  • Vw_InventoryStatus: وضعیت موجودی انبار

مبانی کوئری نویسی در SQL Server

بازیابی اطلاعات با SELECT

SELECT AccountCode, AccountTitle 
FROM Accounting.Account
WHERE AccountType = 'معین'

ترکیب داده‌ها با JOIN

SELECT si.InvoiceNumber, si.InvoiceDate, c.Name AS CustomerName, sii.TotalPrice
FROM Sell.SellInvoice si
JOIN CRM.Customer c ON si.CustomerId = c.CustomerId
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId

فیلتر داده‌ها با WHERE

SELECT DocumentNumber, Amount 
FROM Accounting.DailyAccountingDocumentItem
WHERE Amount > 50000000

چندین شرط با AND و GROUP BY

SELECT si.InvoiceNumber, c.Name, SUM(sii.TotalPrice) AS TotalAmount
FROM Sell.SellInvoice si
JOIN CRM.Customer c ON si.CustomerId = c.CustomerId
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
WHERE si.InvoiceDate BETWEEN '2024-01-01' AND '2024-12-31'
AND c.City = 'تهران'
GROUP BY si.InvoiceNumber, c.Name

توابع تجمعی (Aggregation)

SELECT
    YEAR(si.InvoiceDate) AS SalesYear,
    SUM(sii.TotalPrice) AS TotalRevenue
FROM Sell.SellInvoice si
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
GROUP BY YEAR(si.InvoiceDate)

شرطی‌سازی با CASE WHEN

SELECT 
    CASE WHEN si.PaymentType = 'نقدی' THEN 'نقدی' ELSE 'اعتباری' END AS PaymentMode,
    SUM(sii.TotalPrice) AS TotalSales
FROM Sell.SellInvoice si
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
GROUP BY CASE WHEN si.PaymentType = 'نقدی' THEN 'نقدی' ELSE 'اعتباری' END

محاسبه سود ناخالص

SELECT 
    si.InvoiceNumber,
    SUM(sii.TotalPrice) AS Revenue,
    SUM(sii.CostPrice * sii.Quantity) AS Cost,
    SUM(sii.TotalPrice) - SUM(sii.CostPrice * sii.Quantity) AS GrossProfit
FROM Sell.SellInvoice si
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
GROUP BY si.InvoiceNumber

توابع تحلیلی (Window Functions)

رتبه‌بندی مشتریان با RANK

SELECT 
    c.Name,
    SUM(sii.TotalPrice) AS TotalPurchase,
    RANK() OVER (ORDER BY SUM(sii.TotalPrice) DESC) AS RankCustomer
FROM CRM.Customer c
JOIN Sell.SellInvoice si ON c.CustomerId = si.CustomerId
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
GROUP BY c.Name

مقایسه فروش ماه‌های متوالی با LAG

SELECT
    YEAR(si.InvoiceDate) AS SaleYear,
    MONTH(si.InvoiceDate) AS SaleMonth,
    SUM(sii.TotalPrice) AS TotalSales,
    LAG(SUM(sii.TotalPrice)) OVER (ORDER BY YEAR(si.InvoiceDate), MONTH(si.InvoiceDate)) AS PrevMonthSales
FROM Sell.SellInvoice si
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
GROUP BY YEAR(si.InvoiceDate), MONTH(si.InvoiceDate)

میانگین متحرک سه ماهه فروش

SELECT 
    YEAR(si.InvoiceDate) AS SaleYear,
    MONTH(si.InvoiceDate) AS SaleMonth,
    SUM(sii.TotalPrice) AS TotalSales,
    AVG(SUM(sii.TotalPrice)) OVER (ORDER BY YEAR(si.InvoiceDate), MONTH(si.InvoiceDate) ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS MovingAvg
FROM Sell.SellInvoice si
JOIN Sell.SellInvoiceItem sii ON si.InvoiceId = sii.InvoiceId
GROUP BY YEAR(si.InvoiceDate), MONTH(si.InvoiceDate)

سوالات متداول

  1. برای یادگیری بیشتر SQL Server چه منابعی پیشنهاد می‌شود؟
    W3Schools SQL Tutorial
    مستندات رسمی مایکروسافت SQL Server
  2. اتصال سپیدار به Power BI چگونه است؟
    از طریق Direct Query در Power BI و اتصال به SQL Server می‌توانید داده‌ها را به‌صورت Live بارگذاری کنید.
  3. آیا سپیدار امکان ارائه API برای داده‌های مالی دارد؟
    در حال حاضر سپیدار مستقیما API عمومی ارائه نمی‌دهد اما دسترسی به دیتابیس SQL Server این امکان را به توسعه‌دهندگان می‌دهد.

جمع‌بندی

این دانش پایه‌ای از ساختار دیتابیس سپیدار، اصول کوئری‌نویسی و توابع تحلیلی به مدیران مالی، حسابداران و تحلیل‌گران کمک می‌کند تا به بینشی عمیق از وضعیت مالی، روند فروش، سودآوری و عملکرد مشتریان دست یابند. توانایی تحلیل با SQL در سپیدار نه‌تنها امکان استخراج اطلاعات دقیق را فراهم می‌کند، بلکه مسیر هوش تجاری و تصمیم‌گیری‌های استراتژیک در سازمان‌ها را هموار می‌کند.

نظرات کاربران