2005 年から SQL Server 2008 R2 にアップグレードしたところ、このクエリが機能しなくなりました (ただし、私が行ったことが原因である可能性は除外しません)。問題を示すために、名前/クエリを簡略化しました。
SELECT
NON EMPTY
{
[BizDim].[County].[County]
* [BizDim].[name].[name]
}
ON COLUMNS,
{
[Biz Line Type Dimension].[Line Number].[Line Number]
* [Biz Line Type Dimension].[Display Name].[Display Name]
}
ON ROWS
FROM [TPS Data View]
Where (
STRTOSET("{[BizDim].[County ID].&[16]}", CONSTRAINED)
,STRTOSET("{([BizDim].[Corp].[Corp].ALLMEMBERS,[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].&[x]),([BizDim].[Corp].[Corp].&[x],[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].ALLMEMBERS)}")
)
基本的に、これは列 Corp == 'x' OR HQ == 'x' の場合、結果に含めるかどうかを示す論理 OR です。これは、非対称 (原文のまま) セットとして知られています。
上記はエラーを示します: Tuple 関数は 3 引数のタプル式を予期しています。タプル セット式が使用されました。
STRTOSET 関数を削除すると、完全に機能します。
Where (
STRTOSET("{[BizDim].[County ID].&[16]}", CONSTRAINED)
,{([BizDim].[Corp].[Corp].ALLMEMBERS,[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].&[x]),([BizDim].[Corp].[Corp].&[x],[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].ALLMEMBERS)}
)
ただし、実際のクエリはパラメーター化されているため、これは良くないため、STRTO* 関数で動作する必要があります。
Where (
STRTOSET(@Counties, CONSTRAINED)
,STRTOSET(@BizTypes)
)
STRTOTUPLE を試しましたが、同じエラーが発生しました。
クエリを動的に作成することもできますが、特に以前はパラメーターを使用して正常に機能していたことを考えると、そのリスクを冒すことは避けたいと思います。
問題は、この非対称セットを SQL Server 2008 R2 SSAS で再びパラメーターとして機能させる方法です。
更新:これは、キーを置き換えることでエラーを排除することに注意してください。ただし、実際には何もフィルタリングしないため、一般的に私の構文が悪くないように見えることを示すだけに役立ちます:
Where (
STRTOSET("{[BizDim].[County ID].&[16]}", CONSTRAINED)
,{([BizDim].[Corp].[Corp].ALLMEMBERS,[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].ALLMEMBERS),([BizDim].[Corp].[Corp].ALLMEMBERS,[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].ALLMEMBERS)}
)
私はこれをあまり動的ではない方法で動作させることができましたが、かなり面倒です。基本的に、フィルターは多くの異なるパラメーターに分割する必要があります。それぞれに STRTOSET 呼び出しが必要になるためです。
Where (
STRTOSET("{[BizDim].[County ID].&[16]}", CONSTRAINED)
,{
STRTOSET("([BizDim].[Corp].[Corp].ALLMEMBERS,[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].&[x])")
,STRTOSET"([BizDim].[Corp].[Corp].&[x],[BizDim].[Local].[Local].ALLMEMBERS,[BizDim].[HQ].[HQ].ALLMEMBERS)")
}
)