Workflows block: Power BI sink for streaming detection results
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 2.5k
- Forks
- 319
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 133
Description
Hi! I'd like to contribute a Workflows sink block that pushes detection results to Power BI. It's listed as an example project for the Enterprise team, and I don't see an existing BI sink in inference/core/workflows/core_steps/sinks/ on main (the sinks there today are email, local_file, onvif_movement, roboflow/*, s3, slack, twilio, and webhook) — please correct me if I've missed one.
Proposed v1 — a power_bi_sink block that:
- takes a
predictionsinput (object detection / instance segmentation / keypoint) plus a Power BI streaming/push dataset URL, handled as a secret; - transforms detections into rows — one row per detection by default (
class_name,class_id,confidence,x,y,width,height,timestamp, optionalimage_id), with anaggregatemode that emits one row per class with a count; POSTs the rows to the push URL over HTTPS.
It would mirror the existing roboflow_core/webhook_sink@v1 contract — fire_and_forget, cooldown_seconds, disable_sink, and error_status / throttling_status / message outputs — so it composes in the UI like the other sinks. The push URL is treated as a secret end-to-end (marked private, never logged, and kept out of error messages, since connection errors otherwise embed the URL).
I'd scope Power BI first via the push-dataset URL (no OAuth / service principal — that's a much larger surface and unnecessary for v1). Tableau has no equivalent zero-auth push endpoint (it needs the Hyper API or Server REST publishing), so I'd treat Tableau as a separate follow-up.
Question before I open a PR: would you want this in core roboflow_core, or would you prefer it as an external plugin or an example?
I'm building it either way — I already have a working, tested external plugin version (mirrors the webhook sink, unit-tested including the secret-safety and cooldown paths, with a runnable local demo). I'd just rather match your preference before opening a core PR. If core is welcome, I'll add it under core_steps/sinks/, register it in loader.py, and include the unit + integration tests per the Workflows contribution checklist.
Thanks!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the existing roboflow_core/webhook_sink@v1 contract and the sinks under inference/core/workflows/core_steps/sinks/. Then inspect loader.py and the external plugin's tests and demo. Done means the preferred core, plugin, or example placement is confirmed, with the documented sink contract, secret-safety behavior, cooldown paths, and unit and integration tests covered.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- backend-api-design
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100