如果您是一名SQL专家,那么我敢打赌,您已经使用过无数次“ IN”运算符。您可能还会在DAX中寻找相同的功能,并且我确定您找到了许多精彩的博客文章,向您展示了如何在DAX中模仿相同的功能。的 Power BI桌面的十月发行 充满了新的分析功能,例如 分组,装箱和TOPN 过滤。最重要的是,DAX中的“ IN”运算符是本文撰写时尚未记录的一项新功能,或者至少我在互联网上找不到任何功能。在本文中,我将向您展示如何在DAX表达式中使用它。
要求
- 最新版本 Power BI桌面 (当前版本是:64位2.40.4554.463(2016年10月))
- SQL服务器管理Studio2016 (SSMS 2016)
- AdventureWorksDW SQL服务器 2016的示例数据库
注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模型的信息?然后 看一下这个.
- 打开一个MDX新查询
- 运行以下DAX查询
EVALUATE SUMMARIZE('FactResellerSales' , DimDate[CalendarYear] , "Total Reseller Sales" , SUM('FactResellerSales'[SalesAmount]) )
结果如下:
现在,我们要过滤“ 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) )
结果如下: