使用“IN” Operator in 达克斯

达克斯中的IN运算符

如果您是一名SQL专家,那么我敢打赌,您已经使用过无数次“ IN”运算符。您可能还会在DAX中寻找相同的功能,并且我确定您找到了许多精彩的博客文章,向您展示了如何在DAX中模仿相同的功能。的 Power BI桌面的十月发行 充满了新的分析功能,例如 分组,装箱和TOPN 过滤。最重要的是,DAX中的“ IN”运算符是本文撰写时尚未记录的一项新功能,或者至少我在互联网上找不到任何功能。在本文中,我将向您展示如何在DAX表达式中使用它。

要求

注1: 您需要安装SSMS2016才能编写本文中提供的DAX查询。或者,您可以使用 达克斯 Studio 。如果出于任何原因您不能使用SSMS 2016或DAX Studio,而仅拥有Power BI Desktop,请不用担心,我也会在Power BI Desktop中提供一些示例。

笔记2: 如果您运行早期版本的SQL Server,那绝对没问题。对于AdventureWorksDW2016CTP3,本文没有什么特别之处,您没有从示例数据库的旧版本中获得。但是请记住,SQL Server 2016 Developer Edition现在是免费的,您可以非常轻松地下载它。 看一下这个 如果您有兴趣了解操作方法。

入门

下载最新版本的Power BI Desktop之后,请运行它

  • 从SQL Server“获取数据”
  • 从AdventureWorksDW2016CTP3将“ FactResellerSales”,“ DimProduct”,“ DimProductCategory”,“ DimProductSubCategory”和“ DimDate”加载到Power BI Desktop模型
  • 通过从以下路径打开“ msmdsrv.port.txt”文件,找到Power BI Desktop的本地端口:

“%UserProfile%\ AppData \ Local \ Microsoft \ Power BI桌面 \ AnalysisServicesWorkspaces \ AnalysisServicesWorkspaceXXXXXXXX\数据”

注意: XXXXXXXX后缀是一个随机数。 

  • 打开SSMS 2016并连接到Power BI Desktop模型作为Analysis Services本地服务器。您是否想了解更多有关如何通过不同软件连接Power BI Desktop模型的信息?然后 看一下这个.

SSMS连接到Power BI桌面模型

  • 打开一个MDX新查询
  • 运行以下DAX查询
EVALUATE
    SUMMARIZE('FactResellerSales'
                , DimDate[CalendarYear]
                , "Total Reseller Sales"
                , SUM('FactResellerSales'[SalesAmount])
                )

结果如下:

在SSMS中编写DAX

现在,我们要过滤“ CalendarYear”,以便查询仅显示2011年和2012年的销售值。在先前版本的Power BI Desktop,Power Pivot或SSAS表格模型中,我们必须执行的一种常见方案是使用逻辑OR运算符“||如下所示:

EVALUATE
FILTER(SUMMARIZE(FactResellerSales
                    , DimDate[CalendarYear]
                    , "Total Reseller Sales"
                    , sum(FactResellerSales[SalesAmount])
                    ) , DimDate[CalendarYear] = 2011 || DimDate[CalendarYear] = 2012
                    )

从现在开始,我们可以使用DAX中的“ IN”运算符编写上述查询,如下所示:

EVALUATE
    FILTER(
        SUMMARIZE(FactResellerSales
                    , DimDate[CalendarYear]
                    , "Total Reseller Sales"
                    , sum(FactResellerSales[SalesAmount])
                    ) 
            , DimDate[CalendarYear] 
                IN (2011, 2012)
            )

结果如下:

达克斯中的IN运算符

继续阅读 “Using “IN” Operator in 达克斯”