2014-07-16 9 views
1

큐브를 쿼리하는 데 Microsoft.AnalysisServices.AdomdClient을 사용하고 있습니다. 내 큐브를 쿼리하기 위해 AdomdCommand 개체에 전달하는 다차원 식 (MDX) 쿼리가 있습니다. Measures, Dimensions, Levels 등의 목록을 전달하고 해당 MDX 쿼리의 문자열을 생성하는 데 사용할 수있는 MDX 빌더 클래스를 갖고 싶습니다.MDX 쿼리 작성기 구현

이미 존재합니까? 를위한 좋은 시작이다

+0

이 도구의 일부로서 구문 분석기를 가지고 http://www.sqlbi.com/tools/mdx-studio/ 요청한대로 MDX를 구성하는 클래스는 아니지만 볼 때 유용 할 수 있습니다. – Davos

답변

0

는 MDX 쿼리를 생성하려면 Ranet Olap을 사용했습니다. 다음은 간단한 예제 코드입니다. 필터 설정 및 여러 측정 값 사용과 같은 일반적인 사용 사례를 보여줍니다. 결과

using System.Collections.Generic; 
using System.Windows.Forms; 
using Ranet.Olap.Core.Common; 
using Ranet.Olap.Core.Data; 
using Ranet.Olap.Core.Managers; 
using Ranet.Olap.Core.Types; 
using Ranet.Olap.Core.Wrappers; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      startWork(); 
     } 

     public static void startWork() 
     { 

      var mdx = new QueryBuilderParameters 
      { 
       CubeName = "[Adventure Works]", 
       SubCube = "", 
       MdxDesignerSetting = new MDXDesignerSettingWrapper(), 
       CalculatedMembers = new List<CalcMemberInfo>(), 
       CalculatedNamedSets = new List<CalculatedNamedSetInfo>(), 
       AreaWrappersFilter = new List<AreaItemWrapper>(), 
       AreaWrappersColumns = new List<AreaItemWrapper>(), 
       AreaWrappersRows = new List<AreaItemWrapper>(), 
       AreaWrappersData = new List<AreaItemWrapper>() 
      }; 

      //define parameters 
      mdx.MdxDesignerSetting.HideEmptyColumns = false; 
      mdx.MdxDesignerSetting.HideEmptyRows = false; 
      mdx.MdxDesignerSetting.UseVisualTotals = false; 
      mdx.MdxDesignerSetting.SubsetCount = 0; 

      //columns 
      var itemCol1 = new Hierarchy_AreaItemWrapper 
      { 
       AreaItemType = AreaItemWrapperType.Hierarchy_AreaItemWrapper, 
       UniqueName = "[Date].[Calendar]" 
      }; 
      mdx.AreaWrappersColumns.Add(itemCol1); 

      //rows 
      var itemRow1 = new Hierarchy_AreaItemWrapper 
      { 
       AreaItemType = AreaItemWrapperType.Hierarchy_AreaItemWrapper, 
       UniqueName = "[Customer].[Customer Geography]" 
      }; 
      mdx.AreaWrappersRows.Add(itemRow1); 

      //data 
      var itemData1 = new Measure_AreaItemWrapper 
      { 
       AreaItemType = AreaItemWrapperType.Measure_AreaItemWrapper, 
       UniqueName = "[Measures].[Internet Order Count]" 
      }; 
      mdx.AreaWrappersData.Add(itemData1); 
      var itemData2 = new Measure_AreaItemWrapper 
      { 
       AreaItemType = AreaItemWrapperType.Measure_AreaItemWrapper, 
       UniqueName = "[Measures].[Internet Sales Amount]" 
      }; 
      mdx.AreaWrappersData.Add(itemData2); 
      //if Measures in Data area > 1 - add special element VALUES in COLUMNS or ROWS areas 
      var itemCol2 = new Values_AreaItemWrapper 
      { 
       AreaItemType = AreaItemWrapperType.NamedSet_AreaItemWrapper, 
      }; 
      mdx.AreaWrappersColumns.Add(itemCol2); 

      //filter 
      var itemFilter1 = new Level_AreaItemWrapper 
      { 
       AreaItemType = AreaItemWrapperType.Level_AreaItemWrapper, 
       UniqueName = "[Date].[Calendar Year].[Calendar Year]", 
       HierarchyUniqueName = "[Date].[Calendar Year]", 
       CompositeFilter = new Composite_FilterWrapper() 
      }; 
      itemFilter1.CompositeFilter.IsUsed = true; 
      itemFilter1.CompositeFilter.MembersFilter.IsUsed = true; 


      // two options to choose 
      // option 1 - simply SET 
      //itemFilter1.CompositeFilter.MembersFilter.FilterSet = "{[Date].[Calendar Year].&[2007], [Date].[Calendar Year].&[2008]}"; 
      #region 
      // option 2 - collection Members 

      var mcf1 = new MemberChoiceSettings 
      { 
       SelectState = SelectStates.Selected_Self, 
       Info = 
        new MemberData 
        { 
         UniqueName = "[Date].[Calendar Year].&[2007]", 
         HierarchyUniqueName = "[Date].[Calendar Year]", 
         Caption = "2007" 
        } 
      }; 
      itemFilter1.CompositeFilter.MembersFilter.SelectedInfo.Add(mcf1); 
      var mcf2 = new MemberChoiceSettings 
      { 
       SelectState = SelectStates.Selected_Self, 
       Info = 
        new MemberData 
        { 
         UniqueName = "[Date].[Calendar Year].&[2008]", 
         HierarchyUniqueName = "[Date].[Calendar Year]", 
         Caption = "2008" 
        } 
      }; 
      itemFilter1.CompositeFilter.MembersFilter.SelectedInfo.Add(mcf2); 
      // build SET on collection 
      itemFilter1.CompositeFilter.MembersFilter.BuildFilterSet(); 

      #endregion 
      mdx.AreaWrappersFilter.Add(itemFilter1); 

      string query = MdxQueryBuilder.Default.BuildQuery(mdx, null); 
      MessageBox.Show(query); 

     } 
    } 
} 

같은 MDX 쿼리를 생성한다

SELECT 
HIERARCHIZE(CrossJoin(HIERARCHIZE([Date].[Calendar].Levels(0).Members), {[Measures].[Internet Order Count], [Measures].[Internet Sales Amount]})) DIMENSION PROPERTIES PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME, CUSTOM_ROLLUP, UNARY_OPERATOR, KEY0 ON 0, 
HIERARCHIZE(HIERARCHIZE([Customer].[Customer Geography].Levels(0).Members)) DIMENSION PROPERTIES PARENT_UNIQUE_NAME, HIERARCHY_UNIQUE_NAME, CUSTOM_ROLLUP, UNARY_OPERATOR, KEY0 ON 1 
FROM 
(SELECT ({{[Date].[Calendar Year].&[2007], [Date].[Calendar Year].&[2008]}}) on COLUMNS FROM [Adventure Works]) 
CELL PROPERTIES BACK_COLOR, CELL_ORDINAL, FORE_COLOR, FONT_NAME, FONT_SIZE, FONT_FLAGS, FORMAT_STRING, VALUE, FORMATTED_VALUE, UPDATEABLE, ACTION_TYPE