09.3 创建内联表

内联是把函数的源码直接写到调用它的位置,好处是可以消除函数调用时所产生的时间消耗,一般用于需要快速执行的函数

什么是内联

内联(Inline)是编程语言中的一种常见结构,可以节省每次调用函数带来的额外时间开支,在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡。09.3 创建内联表 - 图1普通函数 vs 内联函数 图片来源:网络 ## DAX中的内联函数 DAX并非编程语言,内联函数的数量不多,常用的有 DATATABLE 和 Table Constructor ,用法也比较简单。掌握它们可以让你在某些场景下更加灵活的使用DAX。### DATATABLE 返回以内联方式创建的表,常用于快速创建结构简单的表。DATATABLE(ColumnName1, DataType1, ColumnName2, DataType2…, {{Value1, Value2…}, {ValueN, ValueN+1…}…})DATATABLE 支持的数据类型有:整数,双精度,字符串,布尔值,货币,日期时间。DATATABLE 的一个主要限制是表的内容必须是常量,不支持任何DAX表达式,所以DATATABLE不是一个常用的函数。不过这种表构造函数语法为开发人员提供了更灵活的表达能力。你可以以使用DATATABLE来生成简单的常数表。在SQL Server Data Tools (SSDT)的Analysis Services表格中,当开发人员将剪贴板的内容粘贴到模型中时,会生成一个使用DATATABLE计算的表,而Power BI使用Power Query来生成常量表,这是DATATABLE在Power BI用户中不常用的另一个原因。=DataTable(“Name”, STRING,”Region”, STRING,{{“ User1”,”East”},{“ User2”,”East”},{“ User3”,”West”},{“ User4”,”West”},{“ User4”,”East”}})将以上代码复制到Power BI Desktop的新建表,可以看到其结果是一个五行两列的表。下面的表达式返回一个表,显示了2019年季每个度的开始和结束日期。Quarters2019 =DATATABLE(“Quarter”, STRING,”StartDate”, DATETIME,”EndDate”, DATETIME,{{“Q1”,”2019-01-01”,”2019-03-31”},{“Q2”,”2019-04-01”,”2019-06-30”},{“Q3”,”2019-07-01”,”2019-09-30”},{“Q4”,”2019-10-01”,”2019-12-31”}})DATATABLE 曾经有一种用法是多值比较,但现在使用 Table Constructor 是更优雅的写法,参考下面三组公式:逻辑判断写法DATATABLE写法Table Constructor写法(推荐)EVALUATEFILTER(Customer,Customer[CountryRegion]=”Italy”|| Customer[CountryRegion]=”Greece”|| Customer[CountryRegion]=”Spain”)## Table Constructor 返回一列或多列组成的表,与 DATATABLE 不同的是,表构造器支持使用返回标量的函数表达式{, , …}// 一列{(, , …),(, , …), …}// 多列表构造器在代码中直接定义匿名表。如果表只有一列,则只需要一个值列表,每个值一行,用大括号包围。可以用括号分隔多行,当表只有一列的时候,括号是可选的。例如,以下两种定义是等价的:{“Red”,”Blue”,”White”}{(“Red”),(“Blue”),(“White”)}生成多列的表EVALUATE{(1.5,DATE(2017,1,1),CURRENCY(199.99),”A”),(2.5,DATE(2017,1,2),CURRENCY(249.99),”B”),(3.5,DATE(2017,1,3),CURRENCY(299.99),”C”)}| [Value1] | [Value2] | [Value3] | [Value4] | | :—-: | :—-: | :—-: | :—-: | | 1.5 | 1/1/2017 | 199.99 | A | | Row2 | 1/2/2017 | 249.99 | B | | Row3 | 1/3/2017 | 299.99 | C |

当不同行中列值的数据类型不同时,所有值都转换为公共数据类型,下面的查询返回文本类型的列EVALUATE{1,DATE(2017,1,1), TRUE,”A”}### 表构造器的妙用 在DAX STUDIO中调试模型的时候,不能直接调试度量值,因为DAX Studio必须使用返回表的查询。此时你可以使用表构造器将度量值转换为表,从而快速调试度量值。 EVALUATESUMX(SALES,[SalesAmount])// 不支持的写法,查询不能返回标量值EVALUATE{SUMX(SALES,[SalesAmount])}//用大括号包围度量值,可以在编译中通过09.3 创建内联表 - 图2高飞数据分析师,数据可视化、户外运动爱好者2017-2020 微软Power BI MVP,ExcelHome版主