> ## Documentation Index
> Fetch the complete documentation index at: https://docs.introw.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Power BI

> Bring your existing Power BI reports into Introw and partner portals, with per-partner row-level security so each partner sees only their own data.

export const Headless = ({prompts = []}) => {
  const PromptRow = ({prompt}) => {
    const [copied, setCopied] = useState(false);
    const copy = () => {
      try {
        navigator.clipboard?.writeText(prompt);
      } catch {}
      setCopied(true);
      setTimeout(() => setCopied(false), 1600);
    };
    return <div className="group flex items-center justify-between gap-3 px-4 py-3 transition-colors hover:bg-[#FD90FF]/[0.06]">
        <span className="text-sm leading-relaxed text-zinc-700 dark:text-zinc-200">{prompt}</span>
        <button type="button" onClick={copy} aria-label={copied ? "Copied to clipboard" : "Copy prompt"} className={`shrink-0 rounded-md p-1.5 transition-all hover:bg-[#FD90FF]/10 focus:opacity-100 focus:outline-none ${copied ? "text-[#FD90FF] opacity-100" : "text-zinc-400 opacity-0 group-hover:opacity-100 dark:text-zinc-500"}`}>
          {copied ? <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M20 6L9 17l-5-5" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg> : <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <rect x="9" y="9" width="11" height="11" rx="2" stroke="currentColor" strokeWidth="2" />
              <path d="M5 15V5a2 2 0 0 1 2-2h10" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>}
        </button>
      </div>;
  };
  return <>
      <p>
        Introw is <strong>headless</strong> by design: run everything here in plain language from Claude, ChatGPT,
        Slack, Teams, or your own CRM through Introw's <a href="/features/developer/mcp">MCP server</a>, with every
        action written straight back to your CRM source of truth. The portal is one surface, never the only one.
      </p>

      {prompts.length > 0 ? <div className="not-prose my-6 overflow-hidden rounded-2xl border border-zinc-200/80 bg-white shadow-sm dark:border-white/10 dark:bg-white/[0.02]">
          <div className="flex items-center gap-2 border-b border-zinc-200/80 bg-gradient-to-r from-[#FD90FF]/10 via-[#FD90FF]/5 to-transparent px-4 py-2.5 dark:border-white/10">
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4 text-[#FD90FF]" aria-hidden="true">
              <path d="M12 2.5l2 5.5 5.5 2-5.5 2-2 5.5-2-5.5L4.5 10l5.5-2 2-5.5z" fill="currentColor" />
              <path d="M18.5 14l1 2.6 2.6 1-2.6 1-1 2.6-1-2.6-2.6-1 2.6-1 1-2.6z" fill="currentColor" opacity="0.55" />
            </svg>
            <span className="text-xs font-semibold uppercase tracking-wider text-zinc-500 dark:text-zinc-400">
              Try it from your LLM
            </span>
          </div>

          <div className="flex flex-col divide-y divide-zinc-100 dark:divide-white/[0.06]">
            {prompts.map(prompt => <PromptRow key={prompt} prompt={prompt} />)}
          </div>

          <a href="/headless" className="flex items-center justify-between gap-2 border-t border-zinc-200/80 px-4 py-2.5 text-sm font-medium text-zinc-600 no-underline transition-colors hover:text-[#FD90FF] dark:border-white/10 dark:text-zinc-300">
            <span>See the full headless playbook</span>
            <svg viewBox="0 0 24 24" fill="none" className="h-4 w-4" aria-hidden="true">
              <path d="M5 12h14M13 6l6 6-6 6" stroke="currentColor" strokeWidth="2" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
          </a>
        </div> : <Card title="See the headless motion" icon="wand-magic-sparkles" href="/headless">
          The agentic playbook - lifecycle deep dives and a Claude Code skill library that run your partner program
          from Claude, ChatGPT, Slack, and your CRM.
        </Card>}
    </>;
};

> If your analytics already live in Power BI, you should not have to rebuild them. Connect your tenant and embed your existing reports in Introw and partner portals, with row-level security that scopes data per partner.

## What it does

Power BI integration lets you embed your existing Power BI reports and dashboards inside Introw and
your partner portals. You connect your tenant once, register the reports or dashboards you want to
embed, and place them in portal experiences. Partners see polished, familiar analytics without you
recreating anything.

Crucially, you can apply per-partner row-level security so each partner only sees their own slice of
the data. Embeds are rendered with secure tokens and your configured dataset roles, so sensitive
analytics stay scoped correctly even when shared in a partner-facing portal.

## The problem it solves

Reusing existing BI in a partner context is usually risky or impossible:

* **Analytics are rebuilt twice** → Embed your existing Power BI reports directly.
* **Sharing BI exposes everyone's data** → Per-partner row-level security scopes each view.
* **Partners want richer analytics** → Surface full Power BI dashboards in their portal.
* **Embedding is a security project** → Secure tokens and dataset roles are handled for you.

## From problem to solution

Power BI integration brings your established analytics into the partner experience safely. Connect
once, embed your reports, and let row-level security ensure every partner sees only what they should.

```mermaid theme={"theme":{"light":"github-light","dark":"github-dark"}}
flowchart LR
  connect["Connect Power BI"] --> embed["Embed your reports"]
  embed --> rls["Row-level security scopes each partner"]
```

## Use cases

<CardGroup cols={2}>
  <Card title="Reuse existing BI" icon="circle-check">
    Embed your Power BI reports.
  </Card>

  <Card title="Scope data per partner" icon="circle-check">
    Apply row-level security.
  </Card>

  <Card title="Give partners rich analytics" icon="circle-check">
    Surface dashboards in portals.
  </Card>

  <Card title="Keep data secure" icon="circle-check">
    Render with secure tokens.
  </Card>
</CardGroup>

## Impact

* **Composability** - Embed existing BI rather than rebuilding it.
* **CRM-native** - Combine Power BI with CRM-sourced Introw analytics.

## Who it's for

<CardGroup cols={2}>
  <Card title="RevOps" icon="user">
    Connects Power BI and configures embeds.
  </Card>

  <Card title="Partner Operations" icon="user">
    Surfaces Power BI to partners safely.
  </Card>
</CardGroup>

## Works with

{/* CONNECTS:START - generated content goes here */}

<CardGroup cols={2}>
  <Card title="Report Builder" icon="chart-line" href="/features/reporting/report-builder">
    Extend reports into Power BI.
  </Card>

  <Card title="Partner Analytics" icon="chart-line" href="/features/reporting/partner-analytics">
    Pipe partner metrics to BI.
  </Card>
</CardGroup>

## Headless

<Headless
  prompts={[
"Which Gold partners are at risk?",
"Show partner-attached pipeline broken down by tier this quarter.",
"Which partners' activity has dropped off this month?",
]}
/>

## Going deeper

<CardGroup cols={2}>
  <Card title="How to" icon="screwdriver-wrench" href="./technical">
    Setup, configuration, and all how-to guides.
  </Card>

  <Card title="API reference" icon="code" href="/general/introduction">
    Integration surface and code.
  </Card>
</CardGroup>
