2005 년부터 SQL Server 2008 R2로 업그레이드했는데 이제는이 쿼리가 더 이상 작동하지 않습니다 (원인이되는 것을 배제하지는 않지만). 나는이 문제를 보여주기 위해 이름/쿼리를 단순화 : 열 공사 == 'X'또는 HQ는 == 'X'다음 결과에 포함하는 경우MDX에서 비대칭 집합 매개 변수화?
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)}")
)
는 기본적으로이 논리 OR 말하는 것입니다. 이것은 비대칭 (sic) 집합으로 알려져 있습니다.
위 오류는 다음과 같습니다. 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)
)
STRTOPUPLE을 (를) 시도하고 같은 오류가 발생했습니다.
동적으로 쿼리를 작성할 수는 있지만, 특히 매개 변수를 사용하여 정상적으로 작동 했으므로이 위험을 피하는 것이 좋습니다.
질문 :이 비대칭 집합을 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)}
)
:이 키 것이다 ALLMEMBERS를 대체하여 오류를 제거하지만, 내 구문이 나쁜 것 같지 않습니다 일반적으로 보여에만 유용하므로 실제로는 아무것도 필터링하지 않습니다 주
나는 덜 동적 인 방식으로이 작업을 할 수 있었지만 꽤 성가시다.
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)")
}
)
죄송합니다. 비대칭 세트의 목적에 대한 설명이 업데이트되었습니다. 속기를 사용하면'{(Corp.All, Local.All, HQ.Yes), (Corp.Yes, Local.All, HQ.All)}} 패턴을보다 쉽게 볼 수 있습니다. 이것은 본질적으로 HQ가 어디에 있느냐고 말합니다. 이것은 서로 다른 열에서 논리적 OR을 모방하는 방법입니다. – AaronLS