MDX,DAX, or SQL,同样的问题,一样的结果.
看一个例子
SQL
SELECT pc.EnglishProductCategoryName, SUM(SalesAmount) AS [Internet Total Sales]FROM dbo.FactInternetSales sLEFT JOIN dbo.DimProduct p ON s.ProductKey = p.ProductKeyLEFT JOIN DimProductSubcategory ps ON p.ProductSubcategoryKey = ps.ProductSubcategoryKeyLEFT JOIN dbo.DimProductCategory pc ON ps.ProductCategoryKey = pc.ProductCategoryKeyGROUP BY pc.EnglishProductCategoryNameORDER BY EnglishProductCategoryName ASC
MDX
SELECT [Measures].[Internet Total Sales] ON COLUMNS, NON EMPTY [Product Category].[Product Category Name].[Product Category Name] ON ROWSFROM [Internet Sales]
DAX
EVALUATESUMMARIZE( 'Internet Sales', 'Product Category'[Product Category Name], "Internet Total Sales", 'Internet Sales'[Internet Total Sales] )ORDER BY 'Product Category'[Product Category Name]
实际这三个,返回的结果完全相同.
再来看一个,
MDX
WITH MEMBER Measures.[Sales 2003] AS ([Measures].[Internet Total Sales], [Date].[Calendar Year].&[2003] )SELECT {Measures.[Internet Total Sales], Measures.[Sales 2003]} ON COLUMNS, NON EMPTY [Product Category].[Product Category Name].[Product Category Name] ON ROWSFROM [Internet Sales]WHERE ([Date].[Calendar Year].&[2002])
DAX
DEFINE MEASURE 'Internet Sales'[Sales 2003] = CALCULATE( SUM( 'Internet Sales'[Sales Amount] ), 'Date'[Calendar Year] = 2003 )EVALUATEFILTER( CALCULATETABLE( ADDCOLUMNS( ALL( 'Product Category'[Product Category Name] ), "Internet Total Sales", 'Internet Sales'[Internet Total Sales], "Sales 2003", 'Internet Sales'[Sales 2003] ), 'Date'[Calendar Year] = 2002 ), [Internet Total Sales] <> 0 || [Sales 2003] <> 0)ORDER BY 'Product Category'[Product Category Name]
这2个一样
最后来看一个CROSSJOIN的
MDX
WITH MEMBER Measures.[Sales 2003] AS ([Measures].[Internet Total Sales], [Date].[Calendar Year].&[2003] )SELECT {Measures.[Internet Total Sales], Measures.[Sales 2003]} ON COLUMNS, NON EMPTY [Product Category].[Product Category Name].[Product Category Name] * [Product Sub-Category].[Product Subcategory Name].[Product Subcategory Name] ON ROWSFROM [Internet Sales]WHERE ([Date].[Calendar Year].&[2002])
DAX
DEFINE MEASURE 'Internet Sales'[Sales 2003] = CALCULATE( SUM( 'Internet Sales'[Sales Amount] ), 'Date'[Calendar Year] = 2003 )EVALUATEFILTER( CALCULATETABLE( ADDCOLUMNS( CROSSJOIN( ALL( 'Product Category'[Product Category Name] ), ALL( 'Product Sub-Category'[Product Subcategory Name] ) ), "Internet Total Sales", 'Internet Sales'[Internet Total Sales], "Sales 2003", 'Internet Sales'[Sales 2003] ), 'Date'[Calendar Year] = 2002 ), [Internet Total Sales] <> 0 || [Sales 2003] <> 0)ORDER BY 'Product Category'[Product Category Name], 'Product Sub-Category'[Product Subcategory Name]
也许, 要主意的是:
DAX的ADDCOLUMNS NO EXISTING FILTER CONTEXT
SUMMARIZE EXISTING FILTER CONTEXT