本文翻译自国际Power BI大师Alberto Ferrari的文章——《Understanding data lineage in DAX》,该文介绍了数据沿袭的定义以及数据沿袭的执行方法。
数据沿袭是DAX的一个功能,但是大多数开发人员在使用它时并不知道它的存在,本文主要讲解数据沿袭及其如何帮助我们生成更优的DAX代码。
什么是数据沿袭?
首先,数据沿袭是分配给表中的每一列的标记,它标识数据模型中产生列值的原始列。例如,下面的查询返回Product表中的不同类别:
EVALUATE VALUES ( 'Product'[Category] )
结果包含8行,每个类别一行:
通过VALUES函数返回包含8个字符串的表。然而,它们不只是字符串。DAX知道这些字符串源自Product[Category]列。因此,作为Product表的列,它们继承了在筛选器通过关系传播之后筛选模型中其他表的能力。这就是上下文转换迭代 VALUES ( Product[Category] )筛选Sales表的原因。我们看下以下查询:
EVALUATE
ADDCOLUMNS (
VALUES ( 'Product'[Category] ),"Amt", [Sales Amount]
)
查询结果包含每个产品类别的销售额值:
字符串“Audio”本身不能筛选Sales表。通过运行以下查询你可以很容易地检查这个结果:
EVALUATE
VAR Categories =
DATATABLE (
"Category", STRING,
{
{ "Category" },
{ "Audio" },
{ "TV and Video" },
{ "Computers" },
{ "Cameras and camcorders" },
{ "Cell phones" },
{ "Music, Movies and Audio Books" },
{ "Games and Toys" },
{ "Home Appliances" }
}
)
RETURN
ADDCOLUMNS ( Categories, "Amt",
[Sales Amount] )
后一个查询在Amt列中为所有行返回相同的值:
列名称和列内容都不重要。