Power BI 提供了五个选项,用于将计算添加到 Power BI 报表中。 其中每个选项都有好处和限制。 本文可帮助你了解这些选项,并向你展示何时最好地使用每个选项。
Power BI 中计算的选项
下表显示了可用于在 Power BI 中添加计算的选项:
| 方面 | “自定义列” | 计算列 | 计算表 | 度量 | 视觉计算 |
|---|---|---|---|---|---|
| 语言 | M | DAX | DAX | DAX | DAX |
| 计算于 | 数据刷新 | 数据刷新 | 数据刷新 | 按需 | 按需 |
| 持久性 | 保存的结果 | 保存的结果 | 保存的结果 | 根据需要计算 | 根据需要计算 |
| 上下文 | 行 | 行 | 行 | 筛选器 | 可视 |
| 存储在 | 表 | 模型 | 模型 | 模型 | 可视 |
| 报表中用户交互的更改 | 否 | 否 | 否 | 是 | 是 |
| 使用情况 | 切片器、筛选器、行、列 | 切片器、筛选器、行、列 | 在度量值、计算列或视觉计算定义中 | 视觉层和视觉级别筛选器中的值 | 可视化和可视化层级筛选器中的值 |
以下部分提供了有关如何使用上表中列出的计算选项的详细信息。
自定义列 (Power Query)
可以使用 Power Query M 公式语言创建自定义列。 自定义列类似于数据分析表达式(DAX)中的计算列。 但在数据进入模型之前,自定义列在 Power Query 中定义。
自定义列具有以下特性和功能:
- 他们通过逐行评估表达式来扩展表。
- 它们是静态的,这意味着用户在与报表交互时不会更改。
- 它们作为数据刷新的一部分进行计算,结果将作为表结构的一部分存储在模型文件中。 因此,在数据刷新时评估它们需要时间,并增加模型的大小。
尽管自定义列可以聚合其他表中的行,但计算列可以提供更好的性能,因为使用计算列,聚合是在数据源上完成的。
有关自定义列的详细信息,请参阅 “添加自定义列”。
计算列(DAX)
可以使用 DAX 定义一个计算列并将其添加到表中。 根据模型中现有的数据来创建计算列。
计算列具有以下特性和功能:
- 它们通过按行逐个评估表达式来扩展表格。
- 它们是静态的,这意味着用户在与报表交互时不会更改。
- 它们作为数据刷新的一部分进行计算,结果存储在模型文件中。 因此,在刷新数据时对其进行评估需要时间,并导致模型体积增大。
计算列可以引用模型中的其他表和关系。 这样,计算列与 Power Query 中的视觉计算和自定义列不同,这些列仅在刷新期间处理。
可以在视觉对象上的切片器、筛选器、行和列中使用计算列。
有关计算列的详细信息,请参阅 在 Power BI Desktop 中创建计算列。
度量值
度量值使用 DAX 对模型进行计算。 度量值是根据需要计算的,并响应用户在报表中所做的选择。 度量结果不会预先计算或存储在磁盘上。
您只能在可视化或可视化级别筛选器中将度量值用作值。
有关度量值的详细信息,请参阅 在 Power BI Desktop 中创建数据分析度量值。
计算表
大多数情况下,你都是通过将数据从外部数据源导入模型来创建表。 使用计算表时,可以根据模型中已有的数据添加新表,也可以使用 DAX 创建新表。 计算表最适合作为模型的一部分存储的中间计算和数据,而不是动态计算或从查询结果中获取的数据。 例如,可以使用计算的表格来对两个现有表应用UNION或CROSS JOIN运算符。
与其他表一样,计算表也能与其他表建立关系。 计算表列具有数据类型和格式设置,它们可属于数据类别。 可以随意对列进行命名,并将其像其他字段一样添加到报表可视化效果。 当从其中拉取数据的任何表刷新或更新时,将重新计算表。
有关计算表的详细信息,请参阅 在 Power BI Desktop 中创建计算表。
视觉计算
视觉计算不同于 DAX 中的其他计算选项,即视觉计算不会存储在模型中。 相反,视觉计算存储在视觉对象中。 视觉计算简化了创建计算的过程。 这些计算通常涉及简单的 DAX、更简单的维护和更好的性能。
视觉计算只能引用视觉对象上的内容。 在视觉对象计算可以引用模型中的数据之前,需要向视觉对象添加该数据。 因此,使用视觉对象计算时,无需考虑筛选器上下文和模型的复杂性。
视觉计算将计算列中上下文的简单性与度量值按需计算的灵活性相结合。 与操作详细级别数据的度量不同,视觉计算处理汇总数据,这通常能够提高性能。 由于视觉计算是视觉对象的一部分,因此可以引用视觉结构,从而提高灵活性。
有关视觉计算的详细信息,请参阅“使用视觉计算”(预览版)。