UserGroups
차원이 여러 계층으로 구성된 SSAS 다차원 큐브에서 작업. 각 계층 구조는 사용자를 특정 그룹에 속하는 것으로 분류합니다. 사용자는 둘 이상의 그룹에 속할 수 있습니다.공유 차원에서 계층 당 하나의 행에 대한 빠른 MDX 쿼리
차원의 각 계층에 대해 하나의 행이있는 테이블을 생성하려고 시도합니다.
WITH
MEMBER [Measures].[Group Name] AS
CASE
WHEN [UserGroups].[Group A].CurrentMember.MemberValue <> 'All' THEN "Group A"
WHEN [UserGroups].[Group B].CurrentMember.MemberValue <> 'All' THEN "Group B"
-- More user groups...
WHEN [UserGroups].[Group T].CurrentMember.MemberValue <> 'All' THEN "Group T"
ELSE "Error"
END
SELECT
{[Members].[Group Name], [Measures].[User Count], [Measures].[Revenue]} ON 0,
Order(
UNION(
[UserGroups].[Group A].&[True] *
{[UserGroups].[Group B].[All]} *
-- More user groups...
{[UserGroups].[Group T].[All]},
[UserGroups].[Group A].[All] *
{[UserGroups].[Group B].&[True]} *
-- More user groups...
{[UserGroups].[Group T].[All]},
-- A bunch more blocks so that there is one for each row.
[UserGroups].[Group A].[All] *
{[UserGroups].[Group B].[All]} *
-- More user groups...
{[UserGroups].[Group T].&[True]}
),
)
ON 1
FROM [Finances];
이 예상되는 테이블을 생성에 성공
:
Group Name User Count Revenue
All All ... True Group T 90 1800
... ... ... ... ... ... ...
All True ... All Group B 20 400
True All ... All Group A 10 100
그러나 쿼리가 매우 느립니다 내가 함께 온 가장 좋은 방법은 다음과 같다. 주어진 행은 약 30 초 안에 분리되어 계산 될 수 있습니다. UNION
문을 사용하여 행을 결합 할 때, 각 추가 행은 계산 시간의 원하는 선형 증가보다 계산 시간이 기하 급수적으로 증가하는 것으로 보입니다.
- 왜 이렇게 시간이 증가 했습니까?
- 기본 엔진이 각 행을 독립적으로 계산하도록 지시하는 방법이 있습니까?
- 이 쿼리를 실행하는 데 더 좋은 방법이 있습니까?
놀라운 것은 각 행이 너무 느립니다. 사용자 수를 정규 SUM 측정 값입니까? 팩트 테이블은 몇 행입니까? Group A에 의한 User Count에 대한 간단한 쿼리를 수행했다면 그 셀 하나를 검색하는 데 얼마나 걸리나요? 수익은 어떨까요? 질문에 나오는 것 이외에 다른 계산법이 있습니까? – GregGalloway
큐브를 변경할 위도가 있습니까? many - to - many UserGroup 차원은 의미가 있습니다. 그것이 옵션인지 알려주세요. – GregGalloway