簡體   English   中英

使用OLAP中的OPENQUERY進行轉換失敗

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM