从数据到信息
从信息到洞察

创建内联表

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

什么是内联

内联(Inline)是编程语言中的一种常见结构,可以节省每次调用函数带来的额外时间开支,在选择使用内联函数时,必须在程序占用空间和程序执行效率之间进行权衡。

普通函数 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 是更优雅的写法,参考下面三组公式:

EVALUATE
FILTER (
    Customer,
    Customer[CountryRegion] = "Italy"
    || Customer[CountryRegion] = "Greece"
    || Customer[CountryRegion] = "Spain"
)
EVALUATE
FILTER (
    Customer,
    CONTAINS (
        DATATABLE (
            "CountryRegion", STRING,
            { { "Italy" }, { "Greece" }, { "Spain" } }
        ),
        [CountryRegion],
        Customer[CountryRegion]
    )
)
EVALUATE
FILTER (
    Customer,
    Customer[CountryRegion] IN { "Italy", "Greece", "Spain" }
)

Table Constructor

返回一列或多列组成的表,与 DATATABLE 不同的是,表构造器支持使用返回标量的函数表达式

{ <scalarExpr1>, <scalarExpr2>, … }  // 一列
{ ( <scalarExpr1>, <scalarExpr2>, … ), ( <scalarExpr1>, <scalarExpr2>, … ), … }  // 多列

表构造器在代码中直接定义匿名表。如果表只有一列,则只需要一个值列表,每个值一行,用大括号包围。可以用括号分隔多行,当表只有一列的时候,括号是可选的。例如,以下两种定义是等价的:

{ "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 引擎不支持表构造器,你可以在 Power BI 中编译,但无法在 Excel 2016 或更早的版本的中使用它

表构造器的妙用

此处为隐藏内容 VIP会员和付费用户可见

下载面板

以上隐藏内容查看价格为1G 币,请先
注:加入 VIP 会员可享受全站权益,性价比更高。单独购买的内容长期有效,不受时间限制。

说点什么

avatar
1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
  订阅本文评论  
提醒