Datenexport

2 Seiten

Stand: 6. November 2026

SQL Views

Wenn direkter SQL-Zugriff auf die Kassa gefragt ist — meist weil APRO On-Premise neben bestehenden Systemen läuft — stellt die Kassendatenbank einen stabilen Satz lesender Views bereit. Sie sind gezielt auf die beiden häufigsten Konsumenten zugeschnitten:

  • On-Premise-Integrationen — Buchhaltungsbrücken, Küchenmonitore, Warenwirtschaft, Loyalty-Engines — alles, was im selben Netz läuft und einen schnellen Datenfluss ohne Umweg über REST braucht.
  • Bestehende BI-Workflows — Power BI, Tableau, Qlik, Metabase, Excel, SQL Server Analysis Services — jedes Tool, das bereits SQL-Server-Connections versteht. Connector auf die Views zeigen und du hast Belege, Positionen, Zahlungen und Artikelstamm in der Form, die ein Data Warehouse erwartet.

Die Views sind ausschließlich lesend, über das Standard-SQL-Server- Protokoll abfragbar und greifen nicht auf operative Tabellen zu, die unter Last mutieren — sie sind sicher für Dashboards und geplante ETL-Jobs.

Tipp: SQL Views oder Umsatz API?
Die SQL-Views und die Umsatz API liefern dieselben
Daten — wähle die passende Laufzeit:

- SQL Views (diese Seite) — flach, relational, On-Premise.
Perfekt für ETL, Power-BI-/Tableau-/Qlik-/Metabase-Konnektoren und
jeden Workflow, der SQL-Bulk-Zugriff will.
- Umsatz API — über den Cloud-Endpunkt my.apro.at, liefert ein
hierarchisches JSON-Dokument mit Positionen, Zahlungen und
Steuersätzen bereits pro Beleg verschachtelt. Besser für Realtime-
System-zu-System-Integrationen, SaaS-Clients und alles ausserhalb
des lokalen Netzes.
Hinweis
Der lesende SQL-User wird pro Deployment bereitgestellt. Freischaltung,
Servername, Datenbank und Zugangsdaten bekommst du über deine
APRO-Ansprechperson.

Übersicht

View

Inhalt

vw_Receipts

Eine Zeile pro Geschäftsvorfall.

vw_Receipt_Items

Positionen. Join über ReceiptId.

vw_Payments

Zahlungen. Join über ReceiptId.

vw_Transactions

Leichter Transaktions-Index.

vw_TransactionTypes

Lookup der Transaktionstypen.

vw_Bi_Export

Denormalisiertes Beleg × Position + Zahlungsübersicht — Startpunkt für Power BI.

vw_products_and_categories

Artikelstamm mit Sparte.

1. vw_Receipts

Eine Zeile pro Geschäftsvorfall. Die Spalte TransactionType sagt, was die Zeile repräsentiert; Beträge sind vorzeichenbehaftet — bei Stornos (TransactionType = 4) sind sie negiert, damit SUM(TotalAmount) direkt netto rechnet.

Spalte

Typ

Beschreibung

Id

GUID

Eindeutige ID des Geschäftsvorfalls.

TransactionId

GUID

Transaktions-ID (Join-Schlüssel für vw_Receipt_Items, vw_Payments).

TransactionType

enum

Siehe Transaktionstypen.

TransactionTypeName

string

Lesbarer Transaktionstyp.

ReceiptNr

string

Beleg-/Rechnungsnummer.

TotalAmount

decimal

Bruttosumme (signed — negativ bei Stornos).

TipAmount

decimal

Trinkgeld (signed).

ReceiptDiscountAmount

decimal

Rabatt auf Gesamtbeleg (signed).

BookDate

datetime

Buchungszeitpunkt.

BusinessDay

date

Virtueller Geschäftstag.

ParentId

GUID | null

Vorgänger-Beleg (z. B. bei Rückholung Verweis auf Original).

PaymentGroupId

integer | null

Zahlungsgruppen-ID (z. B. Umsatzwirksam).

PaymentGroupName

string | null

Name der Zahlungsgruppe — nützlich als Umsatzfilter.

BusinessId

integer

ID des durchführenden Unternehmens.

BusinessName

string

Firmenname.

TableId

integer

Tisch-ID.

TableNr

integer

Tischnummer.

TableName

string

Tischbezeichnung.

AreaId

integer

Bereichs-ID.

AreaNr

integer

Bereichsnummer.

AreaName

string

Bereichsname (Restaurant, Bar, Terrasse …).

StaffId

integer

Mitarbeiter-ID.

StaffNr

integer

Personalnummer.

StaffName

string

Mitarbeitername.

CustomerId

integer

Kunden-ID.

CustomerNr

integer

Kundennummer.

CustomerName

string

Kundenname.

DeviceId

integer

Ausführendes Gerät.

Transaktionstypen

Die View enthält nur Transaktionen mit TransactionType in (1, 2, 3, 4, 5, 14, 24, 25). Das autoritative Mapping liegt in vw_TransactionTypes und ist auch pro Zeile als TransactionTypeName beigefügt.

TransactionType

Bedeutung

1

Bestellung — Eingabe am Tisch oder SB.

2

Verschiebung — Tischwechsel.

3

Abrechnung — bezahlter Beleg.

4

Storno — Umkehr einer Bestellung (Beträge negiert).

5

Rechnung zurückholen — Umkehr einer Abrechnung.

14

Ausgangsrechnung erstellt.

24

Ausgangsrechnung — zusätzlich (siehe vw_TransactionTypes).

25

Ausgangsrechnung bezahlt.

2. vw_Receipt_Items

Positionen. Join mit vw_Receipts über ReceiptId / TransactionId. Werte sind wie beim Beleg vorzeichenbehaftet.

Spalte

Typ

Beschreibung

TransactionId

GUID

Transaktions-ID.

ReceiptId

GUID

Beleg-ID (Join auf vw_Receipts.Id).

ReceiptItemId

GUID

Eindeutige Positions-ID.

BookedItemId

GUID

Unterliegende Bonierungs-ID (gemeinsam zwischen Buchung und Storno).

BookedItemDate

datetime

Bonierungszeitpunkt.

ProductCategoryId

integer

Sparten-ID.

ProductCategoryNr

integer

Sparten-Nummer.

ProductCategoryName

string

Sparten-Bezeichnung.

ProductCategoryAccountingNr

string

Buchungskonto-Nummer der Sparte.

ProductId

integer

Artikel-ID.

ProductNr

integer

Artikelnummer.

ProductName

string

Artikelname.

Quantity

decimal

Stückzahl (signed bei Stornos / Rückholungen).

OriginalPrice

decimal

Ursprünglicher Einzelpreis zum Ausführungszeitpunkt (signed bei Stornos).

EffectivePrice

decimal

Tatsächlicher Einzelpreis nach Rabatt (signed bei Stornos).

OriginalAmount

decimal

Stück × Originalpreis (signed).

EffectiveAmount

decimal

Stück × Originalpreis × Rabattfaktor (signed).

DiscountAmount

decimal

Rabattbetrag in Geld (signed bei Stornos / Rückholungen).

DiscountPercentage

decimal

Rabatt in % des Originalpreises.

DiscountType

string

RABATT OFF für klassische Rabatte, sonst die Kampagnenbezeichnung (z. B. Happy Hour). Leer, wenn kein Rabatt.

TaxId

integer

Steuersatz-ID.

TaxName

string

Steuersatz-Name.

TaxAmount

decimal

Steuersatz als Dezimalwert.

TransactionTypeId

enum

Selbe Codes wie vw_Receipts.TransactionType.

3. vw_Payments

Zahlungen zu Belegen. Enthalten sind nur Abrechnungen und ihre Rückholungen (TransactionType in (3, 4, 5, 14, 24, 25)).

Spalte

Typ

Beschreibung

TransactionId

GUID

Transaktions-ID.

ReceiptId

GUID

Beleg-ID.

PaymentId

GUID

Eindeutige Zahlungs-ID.

TotalAmount

decimal

Gezahlter Betrag (signed).

PaymentTypeId

integer

Zahlungsmittel-ID.

PaymentTypeNr

integer

Zahlungsmittel-Nummer.

PaymentTypeName

string

Zahlungsmittel (z. B. Bar, Kreditkarte, Gutschein).

DateTime

datetime

Zahlungszeitpunkt.

PredecessorReceiptId

GUID | null

Bei Rückholung der Original-Beleg, den diese Zahlung aufhebt.

Details

string | null

Freitext-Metadaten zur Zahlung (z. B. maskierte PAN, Gutscheincode).

4. vw_Transactions

Leichter Index aller Transaktionen. Nützlich für Wasserzeichen-ETL (nur neue Zeilen seit dem letzten Checkpoint ziehen).

Spalte

Typ

Beschreibung

TransactionId

GUID

Transaktions-ID.

TransactionType

enum

Transaktionstyp.

TransactionTypeName

string

Lesbarer Name.

BookDate

datetime

Zeitpunkt der Transaktion.

DeviceId

integer

Ausführendes Gerät.

5. vw_TransactionTypes

Lookup aller Transaktionstypen, die die Kassa erzeugt.

Spalte

Typ

Beschreibung

Id

integer

Transaktionstyp-ID.

Bezeichnung

string

Lesbare Bezeichnung (deutsch).

6. vw_Bi_Export

Die One-Stop-View für BI-Tools. Denormalisierter Join aller umsatzrelevanten Belege mit all ihren Positionen, plus einer komma-separierten Zusammenfassung der verwendeten Zahlungsmittel. Power BI oder Tableau auf diese View zeigen — und du hast alles für Umsatz-, Marge-, Mix- und Zahlungsmittel-Dashboards, ohne Joins schreiben zu müssen.

Spalten sind die Vereinigung von vw_Receipts und vw_Receipt_Items (ohne TransactionTypeId, das nur auf der Belegseite vorkommt), plus:

Spalte

Typ

Beschreibung

Payments

string

Komma-separierte Liste der PaymentTypeName-Werte (z. B. "Bar,Kreditkarte"). NULL auf Nicht-Abrechnungszeilen.

Power-BI-Beispiel

  1. Daten abrufen → SQL-Server-Datenbank — Server + Datenbank wie bereitgestellt.
  2. Import- oder DirectQuery-Modus, lesender User.
  3. dbo.vw_Bi_Export als Fakt-Tabelle wählen.
  4. Optional dbo.vw_Transactions, dbo.vw_Payments, dbo.vw_products_and_categories als Dimensions-Tabellen hinzufügen und über TransactionId / ProductId verknüpfen.

Der Import-Modus reicht in der Regel — die Views sind bereits auf Transaktionsebene aggregiert und aktualisieren sich bei einem typischen Betrieb in Sekunden.

7. vw_products_and_categories

Artikelstamm mit Sparte. Eignet sich als Dimension neben vw_Bi_Export, wenn BI-Artikelnamen stabil bleiben sollen, auch wenn historische Zeilen vor einer Umbenennung liegen.

Spalte

Typ

Beschreibung

ProductId

integer

Artikel-ID.

ProductNr

integer

Artikelnummer.

ProductName

string

Artikelname.

ProductCategoryId

integer

Sparten-ID.

ProductCategoryNr

integer

Sparten-Nummer.

ProductCategoryName

string

Sparten-Name.

Price

decimal

Aktueller Listenpreis (Preis1).

Nur Artikel mit Geloescht = 0 (nicht soft-gelöscht) sind enthalten.

Beispiel-Queries

Umsatz pro Geschäftstag, nach Steuersatz — für einen Monats-KPI:

SELECT
  r.BusinessDay,
  ri.TaxName,
  SUM(ri.EffectiveAmount) AS netto_umsatz
FROM vw_Receipts AS r
JOIN vw_Receipt_Items AS ri ON ri.ReceiptId = r.Id
WHERE r.TransactionType IN (3, 4, 5)   -- Abrechnungen + Stornos rechnen netto
  AND r.BusinessDay BETWEEN @from AND @to
GROUP BY r.BusinessDay, ri.TaxName
ORDER BY r.BusinessDay, ri.TaxName;

Top-10-Artikel im aktuellen Monat — direkt über die BI-View:

SELECT TOP 10
  ProductName,
  SUM(Quantity)        AS stueck,
  SUM(EffectiveAmount) AS netto_umsatz
FROM vw_Bi_Export
WHERE BusinessDay >= DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)
  AND TransactionType IN (3, 4, 5)
GROUP BY ProductName
ORDER BY netto_umsatz DESC;

Bar vs. Karte für einen einzelnen Geschäftstag:

SELECT
  PaymentTypeName,
  SUM(TotalAmount) AS total
FROM vw_Payments
WHERE CAST(DateTime AS date) = @businessDay
GROUP BY PaymentTypeName;