[英]Conversion failure using OPENQUERY from OLAP
我正在嘗試使用OPENQUERY和SQL中的MDX字符串從SSAS多維數據集中檢索一些簡單的數據。
無法從鏈接服務器“ OLAP_LIVE”的OLE DB提供程序“ MSOLAP”獲取行的數據。 轉換失敗,因為數據值溢出了提供程序使用的數據類型。
查詢很簡單:
select
StockCode = "[Product].[Stock Code].[Stock Code].[MEMBER_CAPTION]",
LiveReturnPercent = "[Measures].[Live Return %]"
from openquery(
My_OLAP_SERVER,
'select
non empty
{
[Measures].[Live Return %]
}
on columns,
non empty
{
[Product].[Stock Code].allmembers
}
on rows
from
[Document DW]')
在數據到達SQL“之前”時發生錯誤-即,我無法通過將第三行更改為以下內容來解決該問題:
LiveReturnPercent = left("[Measures].[Live Return %]", 1)
由於它仍然返回相同的錯誤。 我不知道如何在MDX端格式化/修剪查詢,因此它以較短的字符串形式返回度量。
如果我在SSAS中本機運行MDX,則可以正常運行。
似乎SSAS在內部定義了[Measures].[Live Return %]
字符串的長度,然后嘗試傳遞回一個更長的字符串。
我該如何解決?
請注意, [Live Return %]
返回一個長浮點值,如12.34632456
但我不需要該精度級別,因此將其修整為12.34
得到足夠的答案。
我也不能修改多維數據集本身上度量的定義-不是我的多維數據集; 在其他地方等廣泛使用
編輯:我也嘗試過:
...
LiveReturnPercent = "[Measures].[Live Return % Friendly]"
from openquery(
My_OLAP_SERVER,
'with member [Measures].[Live Return % Friendly] as
[Measures].[Live Return %],
FORMAT_STRING = "Percent"
select
non empty
{
[Measures].[Live Return % Friendly]
}
on columns,
...
但這也會導致相同的錯誤-也使用FORMAT_STRING
例如"#.##%"
問題似乎與返回的inf
值有關,因為該度量定義為:
[Measures].[Some Measure] / [Measures].[Some Other Measure]
其中[Some Other Measure]
可以為零。 本地mdx查詢在結果集中整潔地輸出inf
而不出錯,但是通過openquery似乎會導致溢出錯誤。
我發現Divide
函數返回null
而不是inf
因此我可以通過將MDX更改為來解決此問題:
with member [Measures].[Live Return % NoInf] as
Divide([Measures].[Some Measure], [Measures].[Some Other Measure])
select
non empty
{
[Measures].[Live Return % NoInf]
}
on columns,
...
有效地計算相同的度量,但為inf
值返回null
。
請注意,這將返回與原始結果略有不同的結果集- non empty
將取消以前的inf
結果,因為它們現在為null
。 就我的目的而言,這完全可以。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.