누구나 복잡한 SSF 다차원 큐브를 iccube에 이식 한 사람이 있습니까? 두 도구 간의 교훈/차이점에 대해 조언 해 줄 수 있습니까?다차원 SSAS를 ICCube에 이식합니다. 범위()와 동일합니까? 다른 간격/문제?
내가 볼 수있는 주요한 것은 scope()입니다. iccube에서 이에 상응하는 것은 무엇입니까? 중첩 된 경우/case 문?
여기 목록이 있습니다. 다른 건 없니?
function | SSAS | iccube
------------------------|------------------------|------------------------
multi threaded calcs | no | yes
------------------------|------------------------|------------------------
fix/scope block code | SCOPE() | ??
------------------------|------------------------|------------------------
custom functions | clr.net but it's slow | mdx+
------------------------|------------------------|------------------------
generic date utility | third-party code that | ??
dimensions (eg generic | uses scope() eg |
prior period/prior | datetool |
corresponding period) | |
------------------------|------------------------|------------------------
우리는 매우 mdx 스크립트 계산 헤비 큐브가 있으며 SSAS 계산 엔진의 단일 스레드 특성은 실제 병목 현상입니다. 우리가 살펴본 다른 olap 도구 중 어느 것도 충분히 빠르지 않았거나 충분히 풍부한 언어를 가지고 있지 않다.
우리는 기능을 수행하기 위해 연결이 끊긴 유틸리티 크기를 사용하며 날짜 유틸리티 크기가 필요하다. http://sqlmag.com/sql-server-analysis-services/optimizing-time-based-calculations-ssas), AXIS()를 광범위하게 사용하고 비 부가적인 측정을 위해 계층의 하위에서 재귀 적 합을 구하십시오.
큐브는 자체 서비스보고 큐브가 아닙니다. 우리가 범위를 사용하는 방법에 대한 간단한 예 : 그것은 고정 된 일반적인 스키마
업데이트 1와 우리의 응용 프로그램에 대한 다차원 계산 엔진입니다. ic, 당신은 '견고한'대안이 있음을 언급합니다. 이런 코드에 대해 그들은 무엇을 할 것입니까?
// Assumes the date utility dim has been setup as with the priorperiod function as [Dim Date Calculations].[Date Calculations].[Prior Period]
// DimBenchmark is a single attribute disconnected utility dimension. The initial/default value is DimBenchmark.Benchmark.None ie do nothing. The remainder are dynamically set based on code. hardcoded below for simplicity
Scope(DimBenchmark.BenchMark.PriorPeriod);
THIS = [Dim Date Calculations].[Date Calculations].[Prior Period]; // assign the value of some physical and utility dim members to new benchmark attributes. Allows us to only refer to dimbenchmark in subsequent code, irrespective of number of benchmarks or the src dimension.attribute
END SCOPE;
SCOPE(DimBenchmark.BenchMark.Budget);
THIS = DimScenario.Scenario.Budget; //we also have a budget
END SCOPE;
.... // any number of other benchmarks
Create measure currentcube.measures.ComplexCalc as NULL;
SCOPE (measures.ComplexCalc); // this code will only change how complex calc behaves
SCOPE (DimBenchmark.Benchmark.All - DimBenchmark.Benchmark.None); // this will only change the ComplexCalc when the active benchmark selection is not "none"
this= (some measure,Complex subcube etc);
End Scope;
End Scope;
기본적으로 complexcalc는 null입니다. 특정 조건을 충족 할 때만 값을 얻습니다. 범위를 사용하는 주요 이유는 속도입니다./case 블록보다 훨씬 빠릅니다 (더 간단하게 이해할 수 있습니다) 어떤 벤치 마크가 유효한지 명시 적으로 정의 할 필요가 없으며 단지 어느 벤치 마크가 유효하지 않은지를 명시 적으로 정의 할 필요가 없습니다.
이하는 날짜 유틸리티 차원을 구현 한 방법입니다. 그것은 우리가 (measure, [Dim Date Calculations]. [Date Calculations]. [Prior Period])와 같은 것을 할 수있게하며, 현재 날짜의 현재 날짜에 대한 이전 측정을 사용합니다 (1 개월 전, 분기 3 개월 되돌아 간다, 학기 6 개월 되돌아 간다, 1 년 12 개월 뒤로 간다). 그것은 매우 깨끗하고 정확하며 빠릅니다.
-- Fiscal Month
Scope([Dim Date].[Month Key].[Month Key].members);
-- Prior Period
Scope([Dim Date Calculations].[Date Calculations].[Prior Period]);
this =
([Dim Date].[Month Key].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END scope;
End Scope;
-- Fiscal Quarter
Scope([Dim Date].[Fiscal Quarter].[Fiscal Quarter].members);
-- Prior Period
SCOPE([Dim Date Calculations].[Date Calculations].[Prior Period]);
THIS = ([Dim Date].[Fiscal Quarter].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END SCOPE;
END SCOPE;
-- Fiscal Semester
Scope([Dim Date].[Fiscal Semester].[Fiscal Semester].members);
-- Prior Period
SCOPE([Dim Date Calculations].[Date Calculations].[Prior Period]);
THIS = ([Dim Date].[Fiscal Semester].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END SCOPE;
End Scope;
-- Fiscal Year
Scope([Dim Date].[Fiscal Year].[Fiscal Year].members);
-- Prior Period
SCOPE([Dim Date Calculations].[Date Calculations].[Prior Period]);
THIS =
([Dim Date].[Fiscal Year].CurrentMember.PrevMember
,[Dim Date Calculations].[Date Calculations].[Current]
);
END SCOPE;
End Scope;
안녕하세요. 감사합니다. 네, 범위와 문제에 대해 알고, solve_order 등 .. 너무 잘 :). 그러나 우리 큐브에는 2 가지 phyiscal 측정 값과 약 300 개의 계산이 있습니다. 성능상의 이유로 SCOPE()를 사용하여 제어됩니다. 수명은 NULL로 시작되며 특정 조건/교차점이 충족 될 때만 값이 할당됩니다. 원래 게시글에 예제를 추가했습니다. – jkmelbs
강력하고 과장된 부분이 있었지만 삭제했습니다. 나는 당신에게 예제를 보았는데, iccube의 해법은 calc를 사용할 것이다. 현재 버전의 측정 값. 결국 우리는 범위를 추가해야 할 것입니다 ... – ic3