roboflow / roboflow/inference

Workflows block: Power BI sink for streaming detection results

Open
#2,818 1 comment 0 reactions 0 assignees View on GitHub

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 predictions input (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, optional image_id), with an aggregate mode 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 contractfire_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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.