使用 adomd

问题描述

我对 xmla 完全陌生,并尝试使用 19.22.0.1 版本的 Microsoft.analysisservices.SdomdClient.NetCore.retail.amd64 连接到 Powerbi 高级工作区中的数据集。我从 analyze in excel 选项生成的 excel 文件提取了连接字符串,但尝试使用它会导致以下 AdomdConnectionException。根据文档 guidance 更新连接字符串会导致相同的行为。 excel 电子表格工作正常,我相信这意味着 xmla 端点设置设置得当。我可以通过 app.powerbi.com 访问数据集和链接的报告,这表明我拥有必要的权限。

var tenantId = "<AAD Tenant Guid>";
var credential = new DefaultAzureCredential(new DefaultAzureCredentialOptions
{
    VisualStudioTenantId = tenantId,VisualStudioCodeTenantId = tenantId,SharedTokenCacheTenantId = tenantId,InteractivebrowserTenantId = tenantId,});
var token = await credential.GetTokenAsync(new TokenRequestContext(scopes: new[] { "https://analysis.windows.net/powerbi/api" }));
// https://docs.microsoft.com/en-us/analysis-services/instances/connection-string-properties-analysis-services?view=asallproducts-allversions
var connectionString = @$"Provider=MSOLAP.8;Integrated Security=ClaimsToken;Persist Security Info=True;Initial Catalog=<DataSet Name>;Data Source=powerbi://api.powerbi.com/v1.0/myorg/<workspace>;MDX Compatibility=1;Safety Options=2;MDX Missing Member Mode=Error;Password={token.Token}";

例外 1 - URL 中的错误架构

Microsoft.analysisservices.AdomdClient.AdomdConnectionException: 远程服务器返回错误:(401) 未经授权。 ---> System.Net.WebException:远程服务器返回错误:(401) 未经授权。在 System.Net.HttpWebRequest.GetResponse() 在 Microsoft.analysisservices.AdomdClient.ASAzureUtility.PutHttpJsonData[TRequest,TResult](Uri uri、Dictionary`2 标头、TRequest requestObject、Int32 timeoutMs)
在 Microsoft.analysisservices.AdomdClient.ASAzureUtility.ResolvePowerBICluster(Uri discoverUrl、字符串标记、TimeLeft timeLeft、AsInstanceType asInstanceType) --- 内部异常堆栈跟踪结束 --- 在 Microsoft.analysisservices.AdomdClient.ASAzureUtility.ThrowConnectionException(WebException) 例如,AsInstanceType asInstanceType) 在 Microsoft.analysisservices.AdomdClient.ASAzureUtility.ResolvePowerBICluster(Uri discoverUrl、字符串标记、TimeLeft timeLeft、AsInstanceType asInstanceType) 在 Microsoft.analysisservices.AdomdClient.ConnectionInfo.ValidateAndSetPbiDatasourceAndLocation() 在 Microsoft.analysisservices.AdomdClient.ConnectionInfo.HandleAsAzureconnections() 在 Microsoft.analysisservices.AdomdClient.ConnectionInfo.ValidateAndCompleteConnectionConfiguration() 在 Microsoft.analysisservices.AdomdClient.ConnectionInfo.SetConnectionString(String cs) 在 Microsoft.analysisservices.AdomdClient.ConnectionInfo..ctor(字符串 连接字符串)在 Microsoft.analysisservices.AdomdClient.AdomdConnection.XmlaClientProvider.Microsoft.analysisservices.AdomdClient.AdomdConnection.IXmlaClientProviderEx.set_ConnectionString(String 值)在 Microsoft.analysisservices.AdomdClient.AdomdConnection.set_ConnectionString(String 值)在 Microsoft.analysisservices.AdomdClient.AdomdConnection..ctor(字符串 连接字符串)

更新 #1
进行一些调整以取得进一步进展。

  1. 我从 excel 中获得的连接字符串使用架构 azurebi 而不是 powerbi
  2. 将令牌范围转移到 https://analysis.windows.net/powebi/api

这允许实例化 AdomdConnection 但现在当尝试 open() 连接时它会抛出异常 #2 下面。

例外 2

Microsoft.analysisservices.AdomdClient.AdomdConnectionException: 远程服务器返回错误:(401) 未经授权。

技术细节:RootActivityId: 025c6866-1776-48e0-a43f-677cdde76a20 日期(UTC):7/8/2021 11:36:14 PM ---> System.Net.WebException:远程服务器返回错误:(401) 未经授权。在 System.Net.HttpWebRequest.GetResponse()
在 Microsoft.analysisservices.AdomdClient.HttpRequestResponseExtensions.GetResponseWithErrorHandling(HttpWebRequest httpWebRequest,Boolean isPbiPremium) 在 Microsoft.analysisservices.AdomdClient.HttpStream.WaitForAndUpdateHttpResponseContainingXmlaPayload() 在 Microsoft.analysisservices.AdomdClient.HttpStream.GetResponseStream() --- 内部异常堆栈跟踪结束 --- 在 Microsoft.analysisservices.AdomdClient.ASAzureUtility.ThrowConnectionException(WebException 例如,AsInstanceType asInstanceType) 在 Microsoft.analysisservices.AdomdClient.HttpStream.GetResponseStream() 在 Microsoft.analysisservices.AdomdClient.HttpStream.GetResponseDataType() 在 Microsoft.analysisservices.AdomdClient.CompressedStream.GetResponseDataType() 在 Microsoft.analysisservices.AdomdClient.XmlaClient.EndRequest(Boolean useBinaryXml) 在 Microsoft.analysisservices.AdomdClient.XmlaClient.EndRequest() 在 Microsoft.analysisservices.AdomdClient.XmlaClient.CreateSession(ListDictionary 属性,布尔值 sendNamespaceCompatibility,字符串 sessionToken)
在 Microsoft.analysisservices.AdomdClient.XmlaClient.CreateSession(ListDictionary 属性,布尔值 sendNamespaceCompatibility) 在 Microsoft.analysisservices.AdomdClient.AdomdConnection.XmlaClientProvider.Microsoft.analysisservices.AdomdClient.AdomdConnection.IXmlaClientProviderEx.CreateSession(Boolean sendNamespaceCompatibility) 在 Microsoft.analysisservices.AdomdClient.AdomdConnection.ConnectToXMLA(Boolean createSession,Boolean isHTTP) at Microsoft.analysisservices.AdomdClient.AdomdConnection.open()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)