我有问题连接到OData feed,因为我得到这个错误消息:"糟糕的OData格式。确保您使用的URL指向有效的OData数据源"
我可以在浏览器中访问url(并且我得到预期的JSON响应),并且我可以通过Excel (Power Query)连接到OData提要。
有人有类似的问题吗?你认为问题出在哪里?
我正在使用Tableau 8.1与Windows 8,我正在通过ASP开发我的OData服务。. NET Web API 2.
Tableau Version 9.0在使用Web API OData时仍然有这个问题,它这样做是因为Tableau要求数据是XML格式的,但没有发送Accept头让服务器知道它。
这是对我有用的。我修改了这段代码(替换了YourDatabaseEntities和YourTable),并将其添加到Microsoft scaffolding创建的每个控制器中:
/// <summary>
/// Class YourTableController.
/// </summary>
public class YourTableController : ODataController
{
/// <summary>
/// The database
/// </summary>
private YourDatabaseEntities db = new YourDatabaseEntities();
/// <summary>
/// Adds Accept header for Tableau which requires XML data but doesn't send a header requesting it
/// </summary>
protected void FTLP()
{
try
{
Request.Headers.Remove("Accept");
}
catch { }
try
{
Request.Headers.Add("Accept", "application/atom+xml");
}
catch { }
}
// GET: odata/YourTable
/// <summary>
/// Gets the Your Table.
/// </summary>
/// <returns>IQueryable<YourTable>.</returns>
[EnableQuery]
public IQueryable<YourTable> GetYourTable()
{
FTLP();//Add this to Fix Tableau XML requirement
return db.YourTable;
}
// GET: odata/YourTable(5)
/// <summary>
/// Gets the YourTable.
/// </summary>
/// <param name="key">The key.</param>
/// <returns>SingleResult<YourTable>.</returns>
[EnableQuery]
public SingleResult<YourTable> GetYourTable([FromODataUri] DateTime key)
{
FTLP();//Add this to Fix Tableau XML requirement
return SingleResult.Create(db.YourTable.Where(YourTable => YourTable.Date == key));
}
///////
检查Tableau日志中的错误信息:My Documents>My Tableau Repository> Logs> log.txt
在我们的例子中,我们看到Tableau将$inlinecount=allpages附加到OData URL,这在OData v4中失败了:
{"error":{"code":null,"message":"系统查询选项'$ inlinaccount '没有定义。
"}}
Tableau只支持OData v2。Denodo可以支持这两个版本。我们安装了v2,并且能够成功连接。以下是来自Tableau Support的反馈:
根据微软的这篇文章,内联帐户功能是没有包含在OData版本4中:https://msdn.microsoft.com/en-us/library/dd942040.aspx。这是其中之一Tableau Desktop无法连接到该版本的原因OData。
我能找到的关于OData V2需求的唯一Tableau文档是这样的:
Tableau连接到OData V2,不支持浏览OData服务文档。http://onlinehelp.tableau.com/current/pro/online/windows/en-us/help.htm examples_odata.html
基于这里的其他答案,我们最初关心json和atom格式,但这对我们来说不是问题。一旦连接正常,我们意识到Tableau不能使用与OData的实时连接,所以我们还是回到了ODBC !
请确保您使用的是OData V2,而不是OData服务文档(从2016年8月起,Tableau v 9.3.5及以下版本)。有两个选项可以解决这个问题:
- 在Accept头文件中添加'application/json'。
- 将$格式附加到原始URL,例如,~/Employees?application/json格式美元=
现在在最新的ODL(6.3)中,除了元数据文档之外,只有json支持有效负载