MDX,DAX, or SQL的比较

本文深入探讨了SQL、MDX和DAX三种查询语言在处理数据库查询时的一致性,通过具体实例展示了它们在实现相同目标时能够产生相同结果的过程。从数据聚合到复杂查询,三种语言的比较分析揭示了它们在语法和应用场景上的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的ADDCOLUMNSNO EXISTINGFILTER CONTEXT

SUMMARIZE EXISTING FILTER CONTEXT

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值