
Datenexport
2 Seiten
Stand: 6. November 2026
Inhalt
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-Endpunktmy.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 |
|---|---|
Eine Zeile pro Geschäftsvorfall. | |
Positionen. Join über | |
Zahlungen. Join über | |
Leichter Transaktions-Index. | |
Lookup der Transaktionstypen. | |
Denormalisiertes Beleg × Position + Zahlungsübersicht — Startpunkt für Power BI. | |
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 |
|---|---|---|
| GUID | Eindeutige ID des Geschäftsvorfalls. |
| GUID | Transaktions-ID (Join-Schlüssel für |
| enum | Siehe Transaktionstypen. |
| string | Lesbarer Transaktionstyp. |
| string | Beleg-/Rechnungsnummer. |
| decimal | Bruttosumme (signed — negativ bei Stornos). |
| decimal | Trinkgeld (signed). |
| decimal | Rabatt auf Gesamtbeleg (signed). |
| datetime | Buchungszeitpunkt. |
| date | Virtueller Geschäftstag. |
| GUID | null | Vorgänger-Beleg (z. B. bei Rückholung Verweis auf Original). |
| integer | null | Zahlungsgruppen-ID (z. B. Umsatzwirksam). |
| string | null | Name der Zahlungsgruppe — nützlich als Umsatzfilter. |
| integer | ID des durchführenden Unternehmens. |
| string | Firmenname. |
| integer | Tisch-ID. |
| integer | Tischnummer. |
| string | Tischbezeichnung. |
| integer | Bereichs-ID. |
| integer | Bereichsnummer. |
| string | Bereichsname (Restaurant, Bar, Terrasse …). |
| integer | Mitarbeiter-ID. |
| integer | Personalnummer. |
| string | Mitarbeitername. |
| integer | Kunden-ID. |
| integer | Kundennummer. |
| string | Kundenname. |
| 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.
| Bedeutung |
|---|---|
| Bestellung — Eingabe am Tisch oder SB. |
| Verschiebung — Tischwechsel. |
| Abrechnung — bezahlter Beleg. |
| Storno — Umkehr einer Bestellung (Beträge negiert). |
| Rechnung zurückholen — Umkehr einer Abrechnung. |
| Ausgangsrechnung erstellt. |
| Ausgangsrechnung — zusätzlich (siehe |
| Ausgangsrechnung bezahlt. |
2. vw_Receipt_Items
Positionen. Join mit vw_Receipts über ReceiptId / TransactionId. Werte sind wie beim Beleg vorzeichenbehaftet.
Spalte | Typ | Beschreibung |
|---|---|---|
| GUID | Transaktions-ID. |
| GUID | Beleg-ID (Join auf |
| GUID | Eindeutige Positions-ID. |
| GUID | Unterliegende Bonierungs-ID (gemeinsam zwischen Buchung und Storno). |
| datetime | Bonierungszeitpunkt. |
| integer | Sparten-ID. |
| integer | Sparten-Nummer. |
| string | Sparten-Bezeichnung. |
| string | Buchungskonto-Nummer der Sparte. |
| integer | Artikel-ID. |
| integer | Artikelnummer. |
| string | Artikelname. |
| decimal | Stückzahl (signed bei Stornos / Rückholungen). |
| decimal | Ursprünglicher Einzelpreis zum Ausführungszeitpunkt (signed bei Stornos). |
| decimal | Tatsächlicher Einzelpreis nach Rabatt (signed bei Stornos). |
| decimal |
|
| decimal |
|
| decimal | Rabattbetrag in Geld (signed bei Stornos / Rückholungen). |
| decimal | Rabatt in % des Originalpreises. |
| string |
|
| integer | Steuersatz-ID. |
| string | Steuersatz-Name. |
| decimal | Steuersatz als Dezimalwert. |
| enum | Selbe Codes wie |
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 |
|---|---|---|
| GUID | Transaktions-ID. |
| GUID | Beleg-ID. |
| GUID | Eindeutige Zahlungs-ID. |
| decimal | Gezahlter Betrag (signed). |
| integer | Zahlungsmittel-ID. |
| integer | Zahlungsmittel-Nummer. |
| string | Zahlungsmittel (z. B. Bar, Kreditkarte, Gutschein). |
| datetime | Zahlungszeitpunkt. |
| GUID | null | Bei Rückholung der Original-Beleg, den diese Zahlung aufhebt. |
| 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 |
|---|---|---|
| GUID | Transaktions-ID. |
| enum | Transaktionstyp. |
| string | Lesbarer Name. |
| datetime | Zeitpunkt der Transaktion. |
| integer | Ausführendes Gerät. |
5. vw_TransactionTypes
Lookup aller Transaktionstypen, die die Kassa erzeugt.
Spalte | Typ | Beschreibung |
|---|---|---|
| integer | Transaktionstyp-ID. |
| 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 |
|---|---|---|
| string | Komma-separierte Liste der |
Power-BI-Beispiel
- Daten abrufen → SQL-Server-Datenbank — Server + Datenbank wie bereitgestellt.
- Import- oder DirectQuery-Modus, lesender User.
dbo.vw_Bi_Exportals Fakt-Tabelle wählen.- Optional
dbo.vw_Transactions,dbo.vw_Payments,dbo.vw_products_and_categoriesals Dimensions-Tabellen hinzufügen und überTransactionId/ProductIdverknü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 |
|---|---|---|
| integer | Artikel-ID. |
| integer | Artikelnummer. |
| string | Artikelname. |
| integer | Sparten-ID. |
| integer | Sparten-Nummer. |
| string | Sparten-Name. |
| decimal | Aktueller Listenpreis ( |
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;