Leveraging OpenAI for Creating Compelling Sample Datasets for Microsoft Fabric and Power BI

Data analysis and visualization are key components of business intelligence, and Power BI stands as a leading platform in this domain. A pivotal part of working with Power BI involves dealing with datasets. Unfortunately, it isn’t always easy to access or generate datasets that perfectly illustrate the capabilities of Power BI. This is where ChatGPT, OpenAI’s powerful language model, can lend a hand. Today, we’ll delve into how you can use ChatGPT to create intriguing sample datasets for use in Power BI.

Step 1: Understanding the Desired Data Structure

Before generating your data, it’s essential to understand the structure you require. In Power BI, data is often organized into tables that consist of rows (records) and columns (fields). For example, a simple customer database could contain fields such as CustomerID, Name, Email, Country, and Purchase Amount.

You can sketch out your desired table and decide the kind of data you need for each column. For instance, for a column like “Country,” you might want a mix of countries worldwide, while for “Purchase Amount,” you may need a range of numerical values.

Step 2: Defining the Data Parameters with ChatGPT

Once you understand the structure of the data, the next step is to translate it into a form that ChatGPT can generate. This would typically involve providing the model with examples or templates of what you want. For instance, if you are creating a dataset for customer analysis, you can instruct ChatGPT as follows:

    data_template = """
    {
    "CustomerID": "random alphanumeric string of length 6",
    "Name": "random human name",
    "Email": "random email",
    "Country": "random country",
    "Purchase Amount": "random number between 100 and 5000"
    }
    """

Remember, your instructions need to be as clear and specific as possible to generate the right type of data.

Step 3: Generating the Data

After setting the data parameters, you can now instruct ChatGPT to generate the data. If you’re using the OpenAI API, you can use the openai.ChatCompletion.create() method, passing in the model you’re using (for instance, ‘text-davinci-002’) and the data template you’ve defined. Your code may look something like this:

    import openai
    import json

    openai.api_key = 'your-api-key'
    
    response = openai.ChatCompletion.create(
      model="text-davinci-002",
      messages=[
          {"role": "system", "content": "You are a helpful assistant that's generating a data sample."},
          {"role": "user", "content": data_template},
      ]
    )

    data_sample = json.loads(response['choices'][0]['message']['content'])

    print(data_sample)

This code will generate a single record. If you want to generate more records, you can loop through the data generation process as many times as you need.

Step 4: Compiling and Formatting the Data

Now that you have the data generated, you can compile it into a dataset. Each generated record can be appended to a list which can later be converted into a DataFrame using pandas. Here is how it might look:

    import pandas as pd

    data_records = []

    # Assume you have generated n number of records
    for i in range(n):
        data_records.append(generate_data()) # generate_data function includes the data generation code from step 3

    # Convert the list to DataFrame
    df = pd.DataFrame(data_records)

    # Save the DataFrame as a CSV file for use in Power BI
    df.to_csv('sample_dataset.csv', index=False)

Step 5: Importing the Dataset into Power BI

After your CSV file is ready, you can now import it into Power BI. In Power BI Desktop, you can import your CSV file by navigating to “Home” > “External Data” > “CSV”. From here, you can start creating your visualizations and dashboards.

Here is the complete code as a single block for easier reference:

import openai
import json
import pandas as pd

def generate_data():
    # Define your data template
    data_template = """
    {
    "CustomerID": "random alphanumeric string of length 6",
    "Name": "random human name",
    "Email": "random email",
    "Country": "random country",
    "Purchase Amount": "random number between 100 and 5000"
    }
    """

    # Initialize the OpenAI API
    openai.api_key = 'your-api-key'
    
    # Create a chat completion with the model and data template
    response = openai.ChatCompletion.create(
      model="text-davinci-002",
      messages=[
          {"role": "system", "content": "You are a helpful assistant that's generating a data sample."},
          {"role": "user", "content": data_template},
      ]
    )
    # Parse the response to JSON and return
    return json.loads(response['choices'][0]['message']['content'])

# Initialize a list for storing your data
data_records = []

# Decide the number of records you want to generate
n = 100

# Generate n number of records
for i in range(n):
    data_records.append(generate_data())

# Convert the list to a DataFrame
df = pd.DataFrame(data_records)

# Save the DataFrame as a CSV file
df.to_csv('sample_dataset.csv', index=False)

This script will generate 100 records based on the data template, compile them into a DataFrame, and save it as a CSV file. You can then import this CSV file into Power BI. Remember to replace 'your-api-key' with your actual OpenAI API key. Also, ensure that you have installed the openai and pandas libraries, which you can do with pip:

pip install openai pandas

Wrapping Up

Creating compelling sample datasets for Power BI is crucial for demonstrating its capabilities and experimenting with various features. By leveraging ChatGPT, you can create datasets that are tailored to your specific needs and can offer varied insights when analyzed in Power BI.

It’s important to remember that while ChatGPT is a powerful tool, it’s not perfect. Be sure to verify and clean the generated data before using it in your Power BI projects to ensure accuracy in your data visualizations and analysis.

This blogpost was created with help from ChatGPT Pro

Why ChatGPT Won’t Replace the Need for Data Analysts in the Future

Introduction

Artificial Intelligence (AI) has come a long way in recent years, thanks to groundbreaking research and technological advancements. One of the most notable AI innovations is ChatGPT, a large language model developed by OpenAI. With its advanced capabilities in natural language processing and understanding, ChatGPT has significantly influenced many industries, including data analysis.

However, despite the impressive performance of ChatGPT, it is crucial to understand that it will not replace the need for data analysts in the future. In this blog post, we will explore the reasons behind this assertion and discuss the unique value that data analysts bring to the table.

  1. Human Insight and Intuition

While ChatGPT is highly proficient in understanding and processing language, it lacks the human intuition and insight that data analysts possess. Data analysts are not only trained to interpret complex patterns and trends but also to provide context and reasoning behind the data. This level of understanding goes beyond simply recognizing patterns and requires a deep knowledge of the domain and the ability to make informed decisions based on that understanding. ChatGPT, as powerful as it is, cannot replicate the human touch that data analysts provide.

  1. The Art of Asking the Right Questions

Data analysts are experts in asking the right questions to drive actionable insights. They know how to tailor their approach to suit the specific needs of their clients, and they understand the importance of asking probing questions to uncover hidden trends and opportunities. ChatGPT, as an AI language model, is inherently limited in this regard, as it can only respond to the questions it is given, rather than proactively identifying areas of interest or potential pitfalls.

  1. Domain-Specific Expertise

Data analysts often specialize in specific industries or domains, bringing a wealth of knowledge and expertise to their work. They are familiar with the unique challenges and trends that characterize their chosen fields and are well-equipped to provide tailored solutions to these problems. While ChatGPT can process and analyze vast amounts of information, it lacks the domain-specific expertise that makes data analysts invaluable assets to their organizations.

  1. Data Quality and Data Preparation

A large part of a data analyst’s job involves cleaning, preparing, and transforming raw data into a format that can be easily analyzed. This process requires a deep understanding of the data, its sources, and its limitations, as well as the ability to identify and address any inconsistencies or inaccuracies. ChatGPT, on the other hand, is not designed to handle this crucial aspect of data analysis. It is, therefore, necessary to have data analysts in place to ensure that the data being used is accurate, relevant, and reliable.

  1. Ethical Considerations

Data analysts are trained to consider the ethical implications of their work, ensuring that data is collected, analyzed, and presented in a responsible and unbiased manner. This ethical awareness is particularly important given the increasing concerns surrounding data privacy and the potential for misuse of information. ChatGPT, while an impressive tool, is not equipped to navigate these complex ethical issues and cannot replace the thoughtful, human-driven approach that data analysts bring to their work.

Conclusion

Although ChatGPT has undoubtedly revolutionized the way we interact with and process data, it is essential to recognize that it cannot replace the need for data analysts in the future. Data analysts offer a unique blend of human insight, domain-specific expertise, and ethical awareness that simply cannot be replicated by an AI language model. By working together, ChatGPT and data analysts can complement each other’s strengths and drive more efficient and effective data-driven decision-making processes.

This blogpost was created with help from ChatGPT Pro.

Empowering Individuals with ADHD: The Benefits of ChatGPT

Introduction

Attention Deficit Hyperactivity Disorder (ADHD) is a neurodevelopmental disorder that affects millions of people worldwide. Characterized by difficulty paying attention, impulsivity, and hyperactivity, it can make everyday tasks and routines a challenge. In today’s fast-paced world, where there is an abundance of information and distractions, managing ADHD symptoms can be even more daunting.

Enter ChatGPT, an artificial intelligence language model developed by OpenAI. This cutting-edge technology has the potential to assist people with ADHD in a variety of ways. In this blog post, we will explore how ChatGPT can empower individuals with ADHD by enhancing organization, improving focus, and facilitating communication.

  1. Enhancing Organization

One of the most common challenges faced by people with ADHD is staying organized. ChatGPT can help in several ways:

  • Task management: ChatGPT can serve as a digital assistant, helping users create and manage to-do lists, set reminders, and prioritize tasks.
  • Structuring information: By providing clear and concise summaries of lengthy articles or documents, ChatGPT can make it easier for individuals with ADHD to process and retain information.
  • Habit formation: ChatGPT can be programmed to provide consistent reminders and positive reinforcement, assisting users in establishing and maintaining healthy habits and routines.
  1. Improving Focus

Maintaining focus can be difficult for individuals with ADHD, but ChatGPT can help users stay on track:

  • Filtering distractions: ChatGPT can be used to monitor incoming messages and notifications, only alerting users to high-priority items, allowing them to remain focused on the task at hand.
  • Mindfulness and relaxation techniques: ChatGPT can provide guided meditation and breathing exercises to help users reduce anxiety, improve focus, and achieve a calmer state of mind.
  • Customized focus strategies: ChatGPT can offer personalized suggestions and techniques for improving focus based on users’ preferences and needs.
  1. Facilitating Communication

People with ADHD may struggle with communication, whether it’s expressing themselves clearly or interpreting complex information. ChatGPT can help bridge these gaps:

  • Clear expression: ChatGPT can assist users in organizing their thoughts and presenting them in a clear, coherent manner, making communication more effective.
  • Active listening: By summarizing conversations, ChatGPT can help users maintain focus during discussions, ensuring they are better able to engage and respond.
  • Emotional support: ChatGPT can offer non-judgmental listening and encouragement, providing emotional support to users who may feel overwhelmed or isolated due to their ADHD.
  1. Capturing Creativity and Overcoming “Blank Page Syndrome”

People with ADHD often experience bursts of creativity, but may struggle to capture and develop these ideas due to challenges with focus and organization. Additionally, facing a blank page can be daunting for anyone, but particularly for individuals with ADHD who might struggle with initiating tasks. ChatGPT can support users in these areas:

  • Idea capturing: ChatGPT can serve as a readily available tool to record and store creative ideas as they arise. Users can easily input their thoughts, knowing that ChatGPT will save and organize them for future reference.
  • Idea development: ChatGPT can help users expand on their creative ideas by offering suggestions, asking thought-provoking questions, and providing relevant information or resources to fuel their brainstorming process.
  • Overcoming “blank page syndrome”: ChatGPT can help users break through the initial barrier of starting a project by providing writing prompts, outlines, or even drafting a brief introduction. By giving users a starting point, ChatGPT helps mitigate the anxiety and procrastination often associated with beginning a task.

Conclusion

ChatGPT offers valuable tools that can help individuals with ADHD better manage their symptoms and improve their daily lives. By enhancing organization, improving focus, facilitating communication, capturing creativity, and overcoming the challenges of starting with a blank page, this AI-powered technology can empower people with ADHD to thrive in today’s fast-paced world. As we continue to refine and develop ChatGPT, the potential applications and benefits for individuals with ADHD and other neurodevelopmental disorders will only continue to grow.

This blogpost was created with help from ChatGPT Pro.

Integrating OpenAI with Power BI Paginated Reports using Azure Functions

Introduction: Power BI Paginated Reports are ideal for creating highly formatted, pixel-perfect layouts optimized for printing or PDF generation. By integrating OpenAI with Power BI Paginated Reports using Azure Functions, you can enhance your reports with AI-generated insights and content. This blog post provides a step-by-step guide on how to integrate OpenAI with Power BI Paginated Reports using Azure Functions and an intermediary SQL Server database.

Prerequisites:

  • An OpenAI API key
  • An Azure account
  • Power BI Report Builder
  • Basic knowledge of Power BI Paginated Reports, Azure Functions, and C#

Step 1: Create a SQL Server database

  1. Set up a SQL Server database or use an existing one.
  2. Create a new table to store the AI-generated content:
CREATE TABLE OpenAI_Responses (
ID INT PRIMARY KEY IDENTITY(1,1),
Prompt NVARCHAR(MAX),
GeneratedText NVARCHAR(MAX),
DateGenerated DATETIME
);

Step 2: Create an Azure Function to call the OpenAI API and store the AI-generated content in the SQL Server database

  1. Set up an Azure Function App with an HTTP trigger and follow the instructions to create a new function.
  2. Add the necessary NuGet packages to call the OpenAI API (e.g., OpenAI) and connect to SQL Server (e.g., System.Data.SqlClient).
  3. Modify the Azure Function code to call the OpenAI API, and insert the AI-generated content into the SQL Server table.
using System.Data.SqlClient;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using Newtonsoft.Json;
using OpenAI;

public static class OpenAIIntegrationFunction
{
[FunctionName("OpenAIIntegrationFunction")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");

// Get the 'prompt' parameter from the query string
string prompt = req.Query["prompt"];

// Use OpenAI API Key
string openaiApiKey = Environment.GetEnvironmentVariable("OPENAI_API_KEY");

// Initialize the OpenAI API client
var apiClient = new OpenAIApiClient(apiKey: openaiApiKey);

// Set up the completion request
var completions = await apiClient.Completions.CreateAsync(
engine: "text-davinci-002",
new CompletionRequest
{
Prompt = prompt,
MaxTokens = 50,
N = 1,
Stop = null,
Temperature = 0.7,
}
);

string generated_text = completions.Choices[0].Text.Trim();

// Replace with your SQL Server connection string
string connectionString = "your_sql_server_connection_string";

using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("INSERT INTO OpenAI_Responses (Prompt, GeneratedText, DateGenerated) VALUES (@Prompt, @GeneratedText, @DateGenerated)", connection))
{
command.Parameters.AddWithValue("@Prompt", prompt);
command.Parameters.AddWithValue("@GeneratedText", generated_text);
command.Parameters.AddWithValue("@DateGenerated", DateTime.UtcNow);

await command.ExecuteNonQueryAsync();
}
}

return new OkObjectResult("Data saved to the database.");
}
}

Copy and paste this code into your Azure Function App. Replace the your_sql_server_connection_string placeholder with your actual SQL Server connection string. This code assumes you have already set up an OpenAI API key as an environment variable within your Azure Function App.

  1. Save the function and test it to ensure it inserts the AI-generated content into the SQL Server table.

Step 3: Create a Power BI Paginated Report

  1. Open Power BI Report Builder.
  2. Create a new report or open an existing one.
  3. Add a new “Parameter” to the report:
    • In the “Report Data” pane, right-click “Parameters” and click “Add Parameter.”
    • Name the parameter “Prompt.”
    • Set the data type to “Text.”
    • Provide a default value or leave it blank.
  4. Add a “Textbox” to the report and set its value to the “Prompt” parameter: =Parameters!Prompt.Value

Step 4: Connect the Power BI Paginated Report to the SQL Server database

  1. In the “Report Data” pane, right-click “Data Sources” and click “Add Data Source.”
  2. Choose “Microsoft SQL Server” as the connection type and provide a name for the data source.
  3. In the “Connection string” field, enter your SQL Server connection string.
  4. Click “OK” to add the data source.
  5. In the “Report Data” pane, right-click “Datasets” and click “Add Dataset.”
  6. Choose the SQL Server data source you just created and click “Query Designer.”
  7. In the “Query Designer,” enter a SQL query to fetch the latest AI-generated content for the given prompt:
SELECT TOP 1 GeneratedText
FROM OpenAI_Responses
WHERE Prompt = @Prompt
ORDER BY DateGenerated DESC

8. Add the “Prompt” parameter to the query by clicking

“Add Parameter” in the “Query Designer.” 9. Close the “Query Designer” and click “OK” to add the dataset.

  1. Add a “Textbox” to the report and set its value to the AI-generated text: =First(Fields!GeneratedText.Value, "Dataset1")

Conclusion: You now have a Power BI Paginated Report that displays AI-generated content based on the prompt parameter. When the report is run, it will retrieve the latest AI-generated content for the given prompt from the SQL Server database and display it in the report. To update the AI-generated content in the SQL Server database, you can manually call the Azure Function with the specified prompt, or you can create a separate application to automate this process. The Azure Function will then call the OpenAI API, generate the text, and insert it into the SQL Server table.

This approach allows you to leverage the Power BI Paginated Report’s native support for SQL Server as a data source while still incorporating AI-generated content from the OpenAI API. It involves additional steps and requires an intermediary database, but it provides a viable solution for integrating OpenAI with Power BI Paginated Reports

This blogpost was created with help from ChatGPT Pro and Paginated Report Bear.

Leveraging OpenAI for Automated Data Storytelling in Power BI

Introduction

Automated data storytelling is a powerful way to transform complex data visualizations into meaningful narratives. By leveraging OpenAI’s natural language generation capabilities, you can create engaging and informative stories based on your Power BI data visualizations. In this blog post, we’ll discuss the importance of automated data storytelling and guide you through the process of using OpenAI to generate narratives and summaries for your Power BI reports.

Note – Please be aware that this solution involves interacting with OpenAI’s API. I encourage users to familiarize themselves with OpenAI’s data usage policy (https://platform.openai.com/docs/data-usage-policy) and take necessary precautions to ensure the privacy and security of their data.

  1. The Importance of Automated Data Storytelling

Data visualizations in Power BI enable users to analyze and gain insights from their data. However, interpreting these visualizations can be challenging, especially for users without a background in data analysis. Automated data storytelling bridges this gap by:

  • Making data insights accessible: Narratives help users understand the context and significance of the data, making insights more accessible to a broader audience.
  • Enhancing decision-making: Clear and concise narratives can help users grasp the implications of the data, leading to better-informed decisions.
  • Saving time and resources: Generating data stories automatically reduces the time and effort required to create manual reports and analyses.
  1. Prerequisites and Setup

Before we begin, you’ll need the following:

  • Power BI data visualizations: Ensure that you have a Power BI report or dashboard with data visualizations that you’d like to generate narratives for.
  • OpenAI API key: Sign up for an OpenAI API key if you haven’t already. You’ll use this to access OpenAI’s natural language generation capabilities. Visit https://beta.openai.com/signup/ to sign up.
  • A development environment: You can use any programming language and environment that supports HTTP requests. For this tutorial, we’ll use Python and the requests library.
  1. Accessing Power BI Data

In order to generate narratives based on your Power BI data visualizations, you’ll first need to extract the data from the visualizations. You can do this using the Power BI API. Follow the instructions in the “Accessing Power BI Data” section of our previous blog post on creating a Power BI chatbot to set up the necessary API access and create a Python function to query the Power BI API: https://christopherfinlan.com/?p=1921

  1. Generating Narratives with OpenAI

Once you have access to your Power BI data, you can use OpenAI’s API to generate narratives based on the data. Create a Python function to send data to the OpenAI API, as demonstrated in the “Building the Chatbot with OpenAI” section of our previous blog post: https://christopherfinlan.com/?p=1921

  1. Crafting Data Stories

To create data stories, you’ll need to design prompts for the OpenAI API that effectively convey the context and purpose of the data visualizations. The prompts should include relevant data points, visualization types, and any specific insights you’d like the narrative to highlight. Here’s an example of a prompt for a sales report:

openai_prompt = f"""
Create a narrative based on the following sales data visualization:

- Data: {sales_data}
- Visualization type: Bar chart
- Time period: Last 12 months
- Key insights: Top 3 products, monthly growth rate, and seasonal trends
"""

narrative = chat_with_openai(openai_prompt)

Remember to replace {sales_data} with the actual data you’ve extracted from your Power BI visualization.

  1. Integrating Narratives into Power BI Reports

With the generated narratives, you can enhance your Power BI reports by embedding the narratives as text boxes or tooltips. Although Power BI doesn’t currently support direct integration with OpenAI, you can use the following workaround:

  • Manually copy the generated narrative and paste it into a text box or tooltip within your Power BI report.

For a more automated approach, you can build a custom web application that combines both Power BI data visualizations and generated narratives. To achieve this, follow these steps:

  1. Embed Power BI visuals using Power BI Embedded: Power BI Embedded allows you to integrate Power BI visuals into custom web applications. Follow the official documentation to learn how to embed Power BI reports and dashboards in your web application: https://docs.microsoft.com/en-us/power-bi/developer/embedded/embedding
  2. Create a web application with a user interface: Design a user interface for your web application that displays Power BI visuals alongside the generated narratives. You can use HTML, CSS, and JavaScript to create the user interface.
  3. Fetch narratives using JavaScript: When a user interacts with your Power BI visuals or requests a narrative, use JavaScript to send a request to your OpenAI-powered Python backend. The backend should return the generated narrative, which can then be displayed in your web application.

Here’s a simple example using JavaScript to fetch a narrative from your Python backend:

async function getNarrative() {
    const response = await fetch('http://localhost:5000/narrative', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({ data: yourData }),
    });

    const responseData = await response.json();
    document.getElementById('narrative-container').innerText = responseData.narrative;
}

Remember to replace yourData with the data you’ve extracted from your Power BI visualization.

Conclusion

Automated data storytelling enhances the value of Power BI data visualizations by providing users with engaging narratives that help them better understand their data. By leveraging OpenAI’s natural language generation capabilities, you can automatically generate insightful narratives and summaries based on your Power BI visuals. Although direct integration with Power BI is not currently available, you can still utilize OpenAI-generated narratives in your reports or create custom web applications to combine Power BI visuals with automated storytelling.

This blogpost was created with help from ChatGPT Pro.

Excel-based Chatbots Powered by OpenAI API: A Game Changer for Business Automation

Introduction

The integration of the OpenAI API with Microsoft Excel is revolutionizing the way businesses interact with their data. One of the most exciting developments is the creation of Excel-based chatbots, which have the potential to automate various functions such as:

  1. Customer Service: Automate customer support by creating a chatbot that can handle frequently asked questions, troubleshoot issues, and provide guidance on product usage.
  2. Sales: Develop a sales chatbot that can assist customers in finding the right product, offer personalized recommendations, and even process orders directly from Excel.
  3. HR and Recruitment: Design a chatbot to automate the screening process, answer candidate queries, and schedule interviews.
  4. Inventory Management: Build a chatbot to help users track inventory levels, place orders for restocking, and provide real-time updates on product availability.
  5. Knowledge Management: Create a chatbot that can quickly retrieve information from internal databases, streamlining the process of accessing company data.

In this blog post, we will provide a detailed, step-by-step walkthrough for creating a chatbot within Excel using the OpenAI API. This guide is designed for novice Excel users, with easy-to-follow instructions and ready-to-use code snippets.

Note – Please be aware that this solution involves interacting with OpenAI’s API. I encourage users to familiarize themselves with OpenAI’s data usage policy (https://platform.openai.com/docs/data-usage-policy) and take necessary precautions to ensure the privacy and security of their data.

Step 1: Setting up the OpenAI API

First, sign up for an API key on the OpenAI website (https://beta.openai.com/signup/) and follow the instructions to get started.

Step 2: Creating a Chatbot Interface in Excel

  1. Open a new Excel workbook.
  2. In cell A1, type “User Input”.
  3. In cell B1, type “Chatbot Response”.
  4. Format the cells as desired for better readability.

Step 3: Enable Excel Developer Tab

  1. Click on “File” > “Options” > “Customize Ribbon”.
  2. Check the box next to “Developer” in the right column and click “OK”.

Step 4: Add a Button to Trigger Chatbot

  1. Click the “Developer” tab.
  2. Click “Insert” and select “Button (Form Control)”.
  3. Draw the button below the “User Input” and “Chatbot Response” cells.
  4. Right-click the button, select “Edit Text,” and type “Submit”.

Step 5: Write VBA Code for OpenAI API Integration

  1. Right-click the “Submit” button and click “Assign Macro”.
  2. In the “Assign Macro” window, click “New”.
  3. Copy and paste the following code into the VBA editor:
Option Explicit

Private Sub Submit_Click()
    Dim userInput As String
    Dim chatbotResponse As String
    
    ' Get user input from cell A2
    userInput = Range("A2").Value
    
    ' Call OpenAI API to get chatbot response
    chatbotResponse = GetOpenAIResponse(userInput)
    
    ' Display chatbot response in cell B2
    Range("B2").Value = chatbotResponse
End Sub

Function GetOpenAIResponse(userInput As String) As String
    Dim objHTTP As Object
    Dim apiKey As String
    Dim apiUrl As String
    Dim jsonBody As String
    Dim jsonResponse As String
    Dim json As Object
    
    ' Set your OpenAI API key here
    apiKey = "your_openai_api_key"
    
    ' Set OpenAI API endpoint URL
    apiUrl = "https://api.openai.com/v1/chat/completions"
    
    ' Create JSON request body
    jsonBody = "{""messages"": [{""role"": ""system"", ""content"": ""You are a helpful assistant.""}, {""role"": ""user"", ""content"": """ & userInput & """}], ""max_tokens"": 50, ""n"": 1, ""stop"": ""\n"", ""temperature"": 0.7}"
    
    ' Create an HTTP object
    Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP.6.0")
    
    ' Send the request to OpenAI API
    With objHTTP
        .Open "POST", apiUrl, False
        .setRequestHeader "Content-Type", "application/json"
        .setRequestHeader "Authorization", "Bearer " & apiKey
        .send jsonBody
        jsonResponse = .responseText
    End With
    
    ' Create a JSON parser object
    Set json = CreateObject("MSXML2.DOMDocument.6.0")
    json.LoadXML jsonResponse
    
    ' Extract chatbot response from JSON and return it
    GetOpenAIResponse = json.SelectSingleNode("//content").Text
End Function

  1. Replace your_openai_api_key with your actual OpenAI API key.
  2. Save the VBA code by clicking the floppy disk icon or pressing Ctrl+S.
  3. Close the VBA editor by clicking the “X” in the top-right corner.

Step 6: Add Microsoft XML Reference for JSON Parsing

  1. Press Alt+F11 to open the VBA editor.
  2. Click “Tools” > “References” in the menu.
  3. Scroll down and check the box next to “Microsoft XML, v6.0” (or the latest version available).
  4. Click “OK” to close the “References” window.

Step 7: Test Your Excel Chatbot

  1. In cell A2, type a question or statement for your chatbot (e.g., “What is the capital of France?”).
  2. Click the “Submit” button.
  3. The chatbot’s response should appear in cell B2.

(Optional) Step 8: Add Context Awareness to Your Excel Chatbot

  1. In your Excel workbook, create a new sheet and rename it to “ConversationHistory”.
  2. In the VBA editor, modify the Submit_Click() subroutine by adding the following lines of code before the line chatbotResponse = GetOpenAIResponse(userInput):
    ' Save user input to ConversationHistory sheet
With Sheets("ConversationHistory")
.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1).Value = "User: " & userInput
End With

3. Modify the GetOpenAIResponse() function by adding a new argument called conversationHistory:

Function GetOpenAIResponse(userInput As String, conversationHistory As String) As String

4. Update the Submit_Click() subroutine to pass the conversation history when calling the GetOpenAIResponse() function. Replace the line chatbotResponse = GetOpenAIResponse(userInput) with the following code:

    ' Get conversation history
Dim conversationHistory As String
conversationHistory = Join(Application.Transpose(Sheets("ConversationHistory").UsedRange.Value), " ")

' Call OpenAI API to get chatbot response
chatbotResponse = GetOpenAIResponse(userInput, conversationHistory)

5. Modify the JSON request body in the GetOpenAIResponse() function to include the conversation history. Replace the line jsonBody = "{""prompt"": ""Chatbot: " & userInput & "\", ""max_tokens"": 50, ""n"": 1, ""stop"": ""\n"", ""temperature"": 0.7}" with the following code:

    ' Create JSON request body with conversation history
jsonBody = "{""prompt"": """ & conversationHistory & " Chatbot: " & userInput & "\", ""max_tokens"": 50, ""n"": 1, ""stop"": ""\n"", ""temperature"": 0.7}"

6. Finally, update the Submit_Click() subroutine to save the chatbot’s response in the “ConversationHistory” sheet. Add the following lines of code after the line Range("B2").Value = chatbotResponse:

    ' Save chatbot response to ConversationHistory sheet
With Sheets("ConversationHistory")
.Cells(.Cells(.Rows.Count, 1).End(xlUp).Row + 1, 1).Value = "Chatbot: " & chatbotResponse
End With

With this optional modification in place, your Excel chatbot will now maintain a conversation history in the “ConversationHistory” sheet, which will be used to provide context-aware responses. The chatbot will be able to give more accurate and relevant answers based on the user’s previous interactions.

Conclusion

You now have a working Excel-based chatbot powered by the OpenAI API. This guide has provided you with a simple, step-by-step approach to creating a chatbot interface within Excel and integrating it with the OpenAI API using VBA code. While this example uses basic functionality, you can expand and adapt the code to create chatbots for various applications, such as customer service, sales, HR, inventory management, and knowledge management. With the power of the OpenAI API and the familiar Excel interface, businesses can create powerful, user-friendly tools to enhance operations and boost productivity.

This blogpost was created with help from ChatGPT Pro.