Skip to content
bartovsky_
Theme
martin@bartovsky.com

Notes / · 10 min

A free SAP system on your laptop - and reading it from Power BI

SAP's ABAP Cloud Developer Trial runs in Docker on Windows. Set-up, a first custom table filled from SAP demo data, and the bridge to Power BI - without touching anyone's production system.

Martin BartovskySAPPower BIHow-toshare on LinkedIn

Reporting on SAP data is easier when you can see the tables yourself - and a client’s production system is not the place to experiment. SAP publishes a free trial system that runs in a Docker container. It is a real ABAP stack on a real HANA database, on your own laptop: SE11, SE38, SE16, your own Z-tables and programs.

What it contains: ABAP Platform, HANA database, demo data (the SFLIGHT flight scenario), full authorisations. What it doesn’t: S/4HANA business content. No FI/SD/MM transactions, no BSID/ACDOCA, no VA01. It’s a place to learn ABAP, the data dictionary and how data gets out of SAP - not to rehearse a finance process.

Tested in September 2026 on Windows 11, ThinkPad X1 with 32 GB RAM.

System parameters

Item Value
Image sapse/abap-cloud-developer-trial:2025
SID A4H
Hostname vhcala4hci
Instance 00
Client 001
User DEVELOPER (SAP_ALL, registered developer, no developer key needed)
Password ABAPtr2025#SP00 - published by SAP for this image
RAM 16 GB minimum for Docker (I give WSL 24 GB), HANA really uses ~18 GB
Disk ~125 GB

Prerequisite: Docker Desktop with enough memory

# PowerShell as administrator
(Get-CimInstance Win32_Processor).VirtualizationFirmwareEnabled      # must be True
Get-PSDrive C | Select-Object @{n='FreeGB';e={[math]::Round($_.Free/1GB)}}   # 170 GB+ free for SAP

wsl --install --no-distribution
wsl --update
winget install -e --id Docker.DockerDesktop
# restart the PC, start Docker Desktop, accept the terms

Docker containers are a Linux technology, so on Windows they run inside WSL2 - a small Linux virtual machine. That VM is where the memory limit is set, not in Docker. In a normal PowerShell:

@"
[wsl2]
memory=24GB
processors=6
swap=8GB

[experimental]
autoMemoryReclaim=gradual
"@ | Set-Content "$env:USERPROFILE\.wslconfig"

wsl --shutdown

Then quit Docker Desktop and start it again. memory=24GB is a ceiling, not a reservation - Windows keeps at least 8 GB. autoMemoryReclaim=gradual hands unused memory back as it goes.

Two settings worth changing in Docker Desktop:

  • Settings → General → switch off “Start Docker Desktop when you sign in”. Otherwise the WSL VM runs all the time.
  • If drive C: is short of space, move the disk image in Settings → Resources → Advanced → Disk image location.

Docker Desktop is free for personal use and small businesses (under 250 employees and under USD 10 million revenue).

Step 1: Hosts entry

PowerShell as administrator:

Add-Content C:\Windows\System32\drivers\etc\hosts "`n127.0.0.1 vhcala4hci"
Get-Content C:\Windows\System32\drivers\etc\hosts | Select-String vhcala4hci
ping vhcala4hci

SAP uses its own hostname in links and redirects, so the computer has to know that vhcala4hci means localhost.

Step 2: Pull the image

docker pull sapse/abap-cloud-developer-trial:2025

That’s over 22 GB. Current tags are on Docker Hub under Tags.

Step 3: Create and start the container - once

docker run --stop-timeout 7200 -i --name a4h -h vhcala4hci `
  -p 3200:3200 -p 3300:3300 -p 8443:8443 -p 30213:30213 `
  -p 50000:50000 -p 50001:50001 `
  sapse/abap-cloud-developer-trial:2025 `
  -skip-limits-check -agree-to-sap-license
  • --stop-timeout 7200 gives HANA enough time to shut down properly. It also applies to Stop in the Docker Desktop GUI.
  • -h vhcala4hci is the container’s hostname and must match the hosts entry.
  • Running docker run a second time fails - the name a4h already exists. From now on it’s only docker start.

It’s ready when the log says:

*** All services have been started. ***
*** Have fun! ***

On my laptop the first start took about 5 minutes: HANA ~4 minutes, the application server ~1.5 minutes. The sysctl ... below recommended values warning can be ignored on Windows/WSL.

Step 4: Starting and stopping

Docker Desktop GUI: triangle = Start, square = Stop. The Logs tab shows Have fun! when the system is up. The bin icon deletes the container - and everything you did in SAP.

docker start -ai a4h           # start with the log in the window (Ctrl+C = clean shutdown)
docker start a4h               # start in the background
docker logs -f a4h             # follow the log

docker stop -t 7200 a4h        # clean shutdown
wsl --shutdown                 # give RAM back to Windows - ONLY after the container shows Exited

Shutdown order matters: stop the container → wait for Exited → quit Docker Desktop or wsl --shutdown. Quitting Docker or shutting down WSL while HANA is running is a hard power-off for the database. You’ll see the memory in Task Manager as VmmemWSL; if it’s not there, WSL isn’t running.

Step 5: Connect

SAP GUI (recommended), new connection:

  • Application Server: vhcala4hci
  • Instance Number: 00
  • System ID: A4H

WebGUI in the browser:

https://vhcala4hci:50001/sap/bc/gui/sap/its/webgui

Accept the self-signed certificate warning.

Log on: client 001, user DEVELOPER, password ABAPtr2025#SP00.

Ports

Port Used for
3200 SAP GUI (dispatcher, 32 + instance 00)
3300 RFC gateway
50000 / 50001 HTTP / HTTPS - WebGUI, Fiori, web services
8443 HTTPS for ADT (Eclipse) and Cloud Connector
30213 SQL access to HANA - DBeaver, Power BI Desktop

First exercise: a custom table filled from another table

Demo data

SE38 → SAPBC_DATA_GENERATOR → F8. This fills SFLIGHT and related tables. Check in SE16 → SFLIGHT.

SE11 - table ZMB_FLIGHT

  • Delivery class: A
  • Package: $TMP (local object, no transport)
Field Key Data element
MANDT ✔ MANDT
CARRID ✔ S_CARR_ID
CONNID ✔ S_CONN_ID
FLDATE ✔ S_DATE
PRICE S_PRICE
CURRENCY S_CURRCODE
  • Tab Currency/Quantity Fields: PRICE → reference ZMB_FLIGHT-CURRENCY
  • Technical Settings: data class APPL0, size category 0
  • Save and activate (Ctrl+F3)

Tables can’t be created in SE38. Data dictionary objects are created in SE11 - or in ADT in Eclipse.

SE38 - program ZMB_COPY_FLIGHTS

REPORT zmb_copy_flights.

DATA lt_data TYPE STANDARD TABLE OF zmb_flight.

SELECT carrid, connid, fldate, price, currency
  FROM sflight
  INTO CORRESPONDING FIELDS OF TABLE @lt_data.

DELETE FROM zmb_flight.               " clears the table (current client only)
INSERT zmb_flight FROM TABLE @lt_data.
COMMIT WORK.

WRITE: / sy-dbcnt, 'rows inserted'.

Activate (Ctrl+F3) → run (F8) → check in SE16N → ZMB_FLIGHT.

  • MANDT is filled automatically because the table is client-dependent.
  • Without the DELETE, a second run would dump on a duplicate key (SAPSQL_ARRAY_INSERT_DUPREC).

The bridge: reading it from Power BI

Power BI Desktop → Get Data → SAP HANA database → server localhost:30213. The table lives in the ABAP system’s schema, typically SAPA4H. You need the SAP HANA ODBC client installed.

This is where the trial earns its keep for BI work. You can see what a Z-table looks like from the database side - client field, currency reference, technical names - before you ever ask a client’s basis team for access. In real projects SAP data rarely reaches Power BI this directly: usually through extracted tables, views or a dedicated read-only user. But knowing what sits underneath makes those conversations much shorter.

Licences

Licence Valid Renewal
HANA until 11 Feb 2028 nothing to do for now
AS ABAP ~3 months (temporary) via Minisap

Renewing the ABAP licence:

  1. In SAP, open SLICENSE and note the Hardware Key.
  2. On Minisap (go.support.sap.com/minisap) choose system A4H and enter the hardware key. Download the licence file.
  3. Upload it:
docker cp .\A4H_Multiple.txt a4h:/opt/sap/ASABAP_license
docker restart -t 7200 a4h

The licence is applied automatically on start. Alternatively, install the file manually in SLICENSE.

Security

  • The password is public and the ports listen on all network interfaces. If the firewall lets them through, the system is visible on the local network.
  • Don’t run it on hotel or client Wi-Fi, or block the ports in Windows Firewall.
  • The trial is for learning and demos only. Never put client data into it.

Removing everything

docker stop -t 7200 a4h
docker rm a4h
docker image rm sapse/abap-cloud-developer-trial:2025

The WSL virtual disk (.vhdx) doesn’t shrink by itself. To actually free the space: Docker Desktop → Troubleshoot → Clean / Purge data. The vhcala4hci line in hosts can be removed by hand.

Sources

[->] next step

Where do your numbers stop adding up?

Start with a short call. Bring one report nobody trusts - I'll trace it back to where the data gets captured.