Skip to content
Back to Blog
1 min read

Power Platform Copilot: Low-Code Meets AI

I wrote “Power Platform Copilot: Low-Code Meets AI” to share practical, production-minded guidance on this topic.

Power Apps Copilot

Build apps by describing what you want:

class PowerAppsCopilot:
    """Generate Power Apps components from descriptions."""

    async def generate_app_from_description(
        self,
        description: str,
        data_sources: list[str]
    ) -> dict:
        """Generate app structure from description."""

        prompt = f"""Design a Power Apps canvas app.

Description: {description}
Available data sources: {', '.join(data_sources)}

Generate:
1. Screen structure (list each screen and purpose)
2. Data connections needed
3. Key components for each screen
4. Navigation flow
5. Business logic requirements

Format as structured specification."""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"app_specification": response.content}

    async def generate_formula(
        self,
        description: str,
        context: dict
    ) -> str:
        """Generate Power Fx formula."""

        context_str = f"""
Controls: {', '.join(context.get('controls', []))}
Data sources: {', '.join(context.get('data_sources', []))}
Current screen: {context.get('current_screen', 'Main')}
"""

        prompt = f"""Generate a Power Fx formula for Power Apps.

Context:
{context_str}

Request: {description}

Provide:
1. The formula
2. Where to use it (e.g., OnSelect, Items property)
3. Explanation"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}],
            temperature=0.1
        )

        return response.content

    async def suggest_improvements(
        self,
        app_structure: dict
    ) -> dict:
        """Suggest app improvements."""

        import json
        structure_str = json.dumps(app_structure, indent=2)

        prompt = f"""Review this Power Apps structure and suggest improvements.

App Structure:
{structure_str}

Analyze:
1. User experience improvements
2. Performance optimizations
3. Accessibility considerations
4. Mobile responsiveness
5. Error handling gaps"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"suggestions": response.content}

Power Automate Copilot

Create flows with natural language:

class PowerAutomateCopilot:
    """Generate Power Automate flows from descriptions."""

    async def generate_flow(
        self,
        description: str,
        trigger_type: str = None,
        connectors: list[str] = None
    ) -> dict:
        """Generate flow structure from description."""

        connectors_str = f"Available connectors: {', '.join(connectors)}" if connectors else ""

        prompt = f"""Design a Power Automate flow.

Description: {description}
{f'Trigger type: {trigger_type}' if trigger_type else ''}
{connectors_str}

Generate:
1. Trigger configuration
2. Step-by-step actions
3. Conditions and branches
4. Error handling
5. Variables needed

Format as a detailed flow specification."""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"flow_specification": response.content}

    async def explain_flow(
        self,
        flow_definition: dict
    ) -> str:
        """Explain what a flow does."""

        import json
        flow_str = json.dumps(flow_definition, indent=2)

        prompt = f"""Explain this Power Automate flow in plain language.

Flow Definition:
{flow_str}

Provide:
1. Overall purpose
2. Step-by-step explanation
3. When it triggers
4. What data it processes
5. Potential issues to watch"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return response.content

    async def troubleshoot_flow(
        self,
        flow_name: str,
        error_message: str,
        run_history: list[dict] = None
    ) -> dict:
        """Troubleshoot flow errors."""

        history_str = ""
        if run_history:
            import json
            history_str = f"\nRecent runs:\n{json.dumps(run_history[-5:], indent=2)}"

        prompt = f"""Troubleshoot this Power Automate flow error.

Flow: {flow_name}
Error: {error_message}
{history_str}

Provide:
1. What the error means
2. Likely causes
3. Steps to fix
4. How to prevent recurrence"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"troubleshooting": response.content}

Power BI Copilot

Create reports with natural language:

class PowerBICopilot:
    """Generate Power BI content from descriptions."""

    async def generate_dax_measure(
        self,
        description: str,
        table_context: dict
    ) -> dict:
        """Generate DAX measure from description."""

        import json
        tables_str = json.dumps(table_context, indent=2)

        prompt = f"""Generate a DAX measure for Power BI.

Data Model:
{tables_str}

Request: {description}

Provide:
1. The DAX formula
2. Measure name suggestion
3. Explanation of the calculation
4. Any related measures that might be useful"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[
                {"role": "system", "content": "You are a DAX expert."},
                {"role": "user", "content": prompt}
            ],
            temperature=0.1
        )

        return {"dax_measure": response.content}

    async def suggest_visualizations(
        self,
        data_description: str,
        business_question: str
    ) -> dict:
        """Suggest Power BI visualizations."""

        prompt = f"""Suggest Power BI visualizations.

Data available: {data_description}
Business question: {business_question}

Recommend:
1. Primary visualization and why
2. Supporting visuals
3. Filters and slicers needed
4. Color scheme suggestions
5. Layout recommendations"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"visualization_plan": response.content}

    async def generate_narrative(
        self,
        chart_data: dict,
        context: str
    ) -> str:
        """Generate narrative insights from chart data."""

        import json
        data_str = json.dumps(chart_data, indent=2)

        prompt = f"""Generate a narrative insight for this Power BI visual.

Data:
{data_str}

Context: {context}

Write a 2-3 sentence insight that:
1. Highlights the key finding
2. Provides context
3. Suggests action if appropriate"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return response.content

Copilot Studio

Build custom copilots for specific needs:

class CopilotStudio:
    """Build custom copilots with Copilot Studio."""

    async def design_copilot(
        self,
        purpose: str,
        capabilities: list[str],
        data_sources: list[str]
    ) -> dict:
        """Design a custom copilot."""

        caps_str = "\n".join(f"- {c}" for c in capabilities)
        sources_str = "\n".join(f"- {s}" for s in data_sources)

        prompt = f"""Design a custom copilot.

Purpose: {purpose}

Required capabilities:
{caps_str}

Available data sources:
{sources_str}

Design:
1. Conversation topics
2. Trigger phrases for each capability
3. Data integrations needed
4. Escalation scenarios
5. Persona and tone guidelines"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"copilot_design": response.content}

    async def generate_topic(
        self,
        topic_name: str,
        user_intent: str,
        required_info: list[str]
    ) -> dict:
        """Generate conversation topic."""

        info_str = "\n".join(f"- {i}" for i in required_info)

        prompt = f"""Create a conversation topic for a copilot.

Topic: {topic_name}
User intent: {user_intent}
Information to collect:
{info_str}

Generate:
1. Trigger phrases (5-10)
2. Conversation flow
3. Clarifying questions
4. Confirmation messages
5. Error handling responses"""

        response = await self.client.chat_completion(
            model="gpt-4",
            messages=[{"role": "user", "content": prompt}]
        )

        return {"topic_definition": response.content}

Best Practices

  1. Start simple - Begin with straightforward automation
  2. Validate output - Always review AI-generated formulas
  3. Test thoroughly - AI suggestions may need refinement
  4. Document - Record what Copilot helped create
  5. Iterate - Refine prompts for better results

Power Platform Copilot makes citizen development more accessible than ever. Combined with proper governance, it enables rapid digital transformation.\n\n## Takeaways\n\nAdd a concise, personal takeaway and recommended next steps here.\n

Michael John Pena

Michael John Pena

Senior Data Engineer based in Sydney. Writing about data, cloud, and technology.