DAX语法如何在使用表变量时引用原始表名?

问题描述 投票:0回答:2

这个问题来自我试图理解的DAX权威指南,第二版第4章中的一个示例。如果您想要示例Power BI文件,可以从上面的网站下载;就是第 4 章中的图 4-26。这是 DAX 代码:

Correct Average = 
VAR CustomersAge =
    SUMMARIZE (                -- Existing combinations
        Sales,                 -- that exist in Sales
        Sales[CustomerKey],    -- of the customer key and 
        Sales[Customer Age]    -- the customer age
    ) 
RETURN
AVERAGEX (                     -- Iterate on list of
    CustomersAge,              -- Customers/age in Sales
    Sales[Customer Age]        -- and average the customer’s age
)

我明白了这个例子中

SUMMARIZE
AVERAGEX
的使用逻辑,需求也很清楚。让我困惑的是如何
AVERAGEX
引用
Sales[Customer Age]
。由于
AVERAGEX
是在 summarized
CustomersAge
表变量上操作的,我会假设语法类似于:

AVERAGEX (
    CustomersAge,
    [Customer Age]             -- This is the line that I assumed would be different
)

书上给出的代码怎么是正确的?表变量(及其包含的汇总表)是否以某种方式具有指向原始基础表和列名称的指针?编写 DAX 查询时,在使用表变量进行中间步骤时始终引用原始基础表和列名称,这是正常现象吗?

powerbi dax data-analysis powerbi-desktop measure
2个回答
2
投票

是的,这些列具有所谓的数据沿袭。有时,如果血统丢失,你甚至必须恢复它。您可以在这里阅读更多相关信息:https://www.sqlbi.com/articles/understanding-data-lineage-in-dax/


1
投票

Lars,据我所知,这就是我可以解释的方式。

创建变量不会创建添加到模型中的表。您可以将变量视为一系列 DAX 表达式的步骤或占位符。

因此,在此代码中的 CustomerAge 变量中使用 SUMMARIZE 的情况下,您会看到模型中的实际列是 SUMMARIZE 参数中引用的列。因此,当您对该变量执行计算时,您可以访问的列是模型中的实际列,而不是新列。

变量的作用是帮助您分解编写计算的过程并使其不那么复杂。

正如您所期望的那样,如果在 CustomerAge 变量中我们创建了一个新列(例如 Age * 2)并且需要对其执行平均值,那么您编写的代码将是有效的。那么在这种情况下,新列不是模型的一部分,因此我们会像您所写的那样引用它。

我刚刚收到这本书,但我希望这会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.