在Power BI中推送数据集

时间:2018-03-30 14:18:00

标签: powerbi

我正在寻找一个从SQL Server获取数据并将其实时推送到PowerBI的示例代码,这基本上是使用Push Dataset选项。 我不知道如何从SQL推送数据

由于

4 个答案:

答案 0 :(得分:1)

微软发布了类似的演练。它必须通过SQL Server调用稍微扩展:

Push data into a Power BI dataset

---> Create Dataset

答案 1 :(得分:0)

您无法从SQL“推送”数据,但您可以使用DirectQuery而不是Import。那么您的数据将始终是实际的。

只需连接到SQL Server,然后选择“直接查询”,您就可以开始了。

编辑: 当然,使用@Alexander Volok,通过应用程序和/或API调用,您可以将数据推送到Power BI中。我的坏。

答案 2 :(得分:0)

为什么不创建自定义流数据集并直接“推送” SQL数据。在这种情况下,您可以使用Power应用程序(在插入时创建流和触发器),也可以简单地对一些代码以发布请求的形式推送数据。

例如,您的sql表包含要推送的值。因此,步骤应如下:

  1. 创建仪表板

  2. 添加图块

  3. 选择“自定义流数据集”作为源

  4. 定义要推送的数据列(例如train_number和department_time)

  5. 复制API
  6. 从您的代码(例如Python)中获取数据,将其转换为json并发布
  7. 返回power bi,从新创建的流数据集中添加一个图块,然后选择视觉类型。重要提示:视觉效果非常有限

这是python中的示例代码:

def data_generation(counter=None):
    # get your SQL data and save it into 2 variables (row by row)
    return [train_number, departure_time]
while True:
    data_raw = []
    # simple counter increment
    counter += 1
    for i in range(1):
       row = data_generation(counter)
       data_raw.append(row)
    # set the header record
    HEADER = ["train_number", "departure_time"]
    # generate a temp data frame to convert it to json
    data_df = pd.DataFrame(data_raw, columns=HEADER)
    # prepare date for post request (to be sent to Power BI)
    data_json = bytes(data_df.to_json(orient='records'), encoding='utf-8')
    # Post the data on the Power BI API
    req = requests.post(PowerBI_REST_API_URL, data_json)
    print("Data posted in Power BI API")
    print(data_json)
    # wait 5 seconds
    time.sleep(5)

答案 3 :(得分:0)

您可以使用Power Shell推送数据,在其中您需要添加api链接,并且必须放置sql连接字符串,然后您就可以通过将其声明为代码来对同一数据集进行查询,请参考下面的代码,该代码将帮助您了解如何在运行Power Shell脚本后将数据推送到数据集中,然后将数据推送到Power Bi数据集,然后您就可以看到自己的动态

$SqlServer = ''; #your server name
$SqlDatabase = ''; #your database name
$uid =""   #User id
$pwd = "*****" # your password
$SqlConnectionString = 'Data Source={0};Initial Catalog={1};Integrated Security=SSPI;uid=$uid;Password=$pwd' -f $SqlServer, $SqlDatabase;

$SqlQuery = "SELECT * FROM abc;";

$SqlCommand = New-Object System.Data.SqlClient.SqlCommand;
$SqlCommand.CommandText = $SqlQuery;
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection -ArgumentList $SqlConnectionString;
$SqlCommand.Connection = $SqlConnection;
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCommand
$SqlConnection.Open();
$SqlDataReader = $SqlCommand.ExecuteReader();

##you would find your own endpoint in the Power BI service
$endpoint = "" ## add your api link middle of endpoint ""


#Fetch data from your table and write out to files
while ($SqlDataReader.Read()) {
    $payload =  
    @{
    "Date" =$SqlDataReader['Date']
    "First Name" =$SqlDataReader['Name']
    "Production" =$SqlDataReader['prdt']
    } 
    Invoke-RestMethod -Method Post -Uri "$endpoint" -Body (ConvertTo-Json @($payload))
}


$SqlConnection.Close();
$SqlConnection.Dispose();

## every time you run script data will automaticaly pushed from sql server to your power bi report 

e流图表