使用计算列,可以将新数据添加到模型中已有的表中。 但是,与其从数据源查询和加载值到新列中,不如创建一个数据分析表达式(DAX)公式来定义该列的值。 在 Power BI Desktop 中,计算列是使用 报表 视图、表 视图或 模型 视图中的新列功能创建的。
与在 Power Query 编辑器中使用 添加自定义列 作为查询的一部分创建的自定义列不同,在 报表 视图中创建的计算列、表 视图或 模型 视图基于已加载到模型中的数据。 例如,可以选择将两个不同表中两个不同列的值连接在一起,执行添加或提取子字符串。
创建的计算列与任何其他字段一样显示在 “字段” 列表中,但它们有一个显示其值的特殊图标是公式的结果。 可以根据需要为列命名,并将其添加到报表可视化效果中,就像其他字段一样。
计算列使用 DAX 计算结果,该表达式是一个旨在处理关系数据(如 Power BI Desktop 中的)的公式语言。 DAX 包含 200 多个函数、运算符和构造的库。 它为创建公式提供了极大的灵活性,用于计算任何数据分析需求的结果。 若要了解有关 DAX 的详细信息,请参阅 了解 Power BI Desktop中的 DAX 基础知识。
DAX 公式类似于 Excel 公式。 事实上,DAX 具有与 Excel 相同的许多功能。 但是,DAX 函数旨在处理报表中以交互方式切片或筛选的数据,例如 Power BI Desktop 中的数据。 在 Excel 中,可以为表中的每一行使用不同的公式。 在 Power BI 中,为新列创建 DAX 公式时,它会计算表中每一行的结果。 根据需要重新计算列值,例如刷新基础数据并更改值时。
让我们看看一个示例
Jeff 是 Contoso 的发货经理,希望创建一个报告,其中显示了向不同城市的发货数量。 Jeff 的“地理位置”表中包含城市和州两个不同的字段。 但是,Jeff 希望他们的报告将城市和州值显示为同一行上的单个值。 现在,Jeff 的 Geography 表没有所需的字段。
但通过计算列,Jeff 可以将“城市”列中的城市与“州”列中的州组合起来。
Jeff 右键单击“地理位置”表,然后选择“新建列”。 然后,Jeff 在公式栏中输入以下 DAX 公式:
CityState = [City] & "," & [State]
此公式创建名为 CityState的新列。 对于 Geography 表中的每一行,它从 City 列中获取值,添加逗号和空格,然后连接 State 列中的值。
现在,Jeff 获得了所需的字段。
现在 Jeff 可以将它与货运数量一起添加到报表画布中。 Jeff 现在轻轻松松就创建了“CityState”字段,可以将其添加到几乎任何类型的可视化效果中。 当 Jeff 创建新的地图时,Power BI Desktop 已经知道如何在新列中读取城市和州/地区值。
表达式上下文
表达式上下文属性确定是否可以动态计算用户上下文识别的 DAX 表达式,例如以下内容。
用户上下文感知计算列支持独特的方案,例如多语言语义模型的数据翻译。 有关详细信息 ,请参阅数据翻译 。
表达式上下文属性可以设置为计算列属性。
实体化和性能
在性能优化时,应该考虑计算列的物化。 应遵循 DAX 编写的最佳实践,以避免在计算列评估时进行高成本操作。
- 非材料化的计算列可能会对查询性能产生负面影响,因为需要在查询时派生值。
- 具体化的计算列可能会对刷新性能产生负面影响,其原因是需要在刷新时提交这些值。
下表显示了 表存储模式 和支持的表达式上下文设置的组合。
| 存储模式 | 标准(默认值) | 用户上下文 |
|---|---|---|
| Import | 物化 | 未材料化 |
| OneLake 上的 Direct Lake | 未材料化 | 未材料化 |
| SQL 上的 Direct Lake | 不适用 | 不适用 |
| DirectQuery | 未材料化 | 未材料化 |
| Dual | 物化(导入),非物化(DirectQuery) | 未材料化 |
| Power BI 语义模型中的 DirectQuery | 未材料化 | 不适用 |
相关内容
本文在此处提供计算列的简单介绍。 有关详细信息,请参阅以下资源:
若要下载示例文件并获取有关如何创建更多列的分步课程,请参阅 教程:在 Power BI Desktop 中创建计算列。
若要了解有关 DAX 的详细信息,请参阅 了解 Power BI Desktop中的 DAX 基础知识。
若要了解有关在查询中创建的列的详细信息,请参阅 创建自定义列。