From a70ca098c258854b24ac09b7a66c4adb756d60ed Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:20:04 +0200 Subject: [PATCH 1/8] New translations command-line-options.md (Spanish) --- localizedContent/es/content/features/Command-line-Options.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/localizedContent/es/content/features/Command-line-Options.md b/localizedContent/es/content/features/Command-line-Options.md index 41384149..c24f82c4 100644 --- a/localizedContent/es/content/features/Command-line-Options.md +++ b/localizedContent/es/content/features/Command-line-Options.md @@ -316,9 +316,9 @@ La línea de comandos proporciona varios detalles, en función de los parámetro | Error | -ANALYZE | No se encontró el archivo de reglas: ... | | | Error | -ANALYZE | Archivo de reglas no válido: ... | El archivo de reglas de BPA especificado está dañado o no contiene un JSON válido. | | Información | -ANALYZE | ... viola la regla ... | Resultados del Best Practice Analyzer para reglas con un nivel de gravedad de 1 o inferior. | -| Advertencia | -ANALYZE | ... viola la regla ... | Resultados del Best Practice Analyzer para reglas con un nivel de gravedad de 2. | +| Advertencia | -ANALYZE | ... ¡La implementación falló! | Resultados del Best Practice Analyzer para reglas con un nivel de gravedad de 2. | | Error | -ANALYZE | ... viola la regla ... | Resultados del Best Practice Analyzer para reglas con un nivel de gravedad de 3 o superior. | -| Error | -DEPLOY | ¡La implementación falló! ... | Motivo del fallo devuelto directamente por la instancia de Analysis Service (por ejemplo: base de datos no encontrada, no se permite sobrescribir la base de datos, etc.) | +| Error | -DEPLOY | viola la regla ... ... | Motivo del fallo devuelto directamente por la instancia de Analysis Service (por ejemplo: base de datos no encontrada, no se permite sobrescribir la base de datos, etc.) | | Información | -DEPLOY | Objeto sin procesar: ... | Objetos que están en el estado "NoData" o "CalculationNeeded" tras una implementación correcta. Utilice el modificador -W para tratarlos como Nivel=Advertencia. | | Advertencia | -DEPLOY | El objeto no está en estado "Ready": ... | Objetos que se encuentran en estado "DependencyError", "EvaluationError" o "SemanticError" después de un despliegue correcto. Si usa la opción -W, también incluye los objetos en estado "NoData" o "CalculationNeeded". | | Advertencia | -DEPLOY | Error en X:... | Objetos que contienen DAX no válido después de un despliegue correcto (medidas, columnas calculadas, tablas calculadas, roles). Use la opción -E para tratarlos como Level=Error. | From 22725fe546cd6531c6d508f8b1bce789556b778d Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:20:20 +0200 Subject: [PATCH 2/8] New translations code-actions.md (Spanish) --- localizedContent/es/content/features/code-actions.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localizedContent/es/content/features/code-actions.md b/localizedContent/es/content/features/code-actions.md index 26081c5d..5f375e44 100644 --- a/localizedContent/es/content/features/code-actions.md +++ b/localizedContent/es/content/features/code-actions.md @@ -122,7 +122,7 @@ Las acciones de código siguientes aparecerán con puntos verde azulado debajo d | DR011 | [Reescribir con ISBLANK](xref:DR011) | En lugar de comparar una expresión con [`BLANK()`](https://dax.guide/BLANK), usa la función [`ISBLANK`](https://dax.guide/ISBLANK). Ejemplo:
`IF([Sales] = BLANK(), [Budget], [Sales])` -> `IF(ISBLANK([Sales], [Budget], [Sales])` | | DR012 | [Eliminar BLANK innecesario](xref:DR012) | Algunas funciones de DAX, como [`IF`](https://dax.guide/IF) y [`SWITCH`](https://dax.guide/SWITCH), ya devuelven `BLANK()` cuando la condición es falsa, así que no hace falta especificar `BLANK()` explícitamente. Ejemplo:
`IF(a > b, a, BLANK())` -> `IF(a > b, a)` | | DR013 | [Simplificar la lógica negada](xref:DR013) | Cuando se niega una expresión lógica, suele ser más legible reescribirla usando el operador negado. Ejemplo:
`NOT(a = b)` -> `a <> b` | -| DR014 | [Simplificar con IN](xref:DR014) | Reescriba los predicados compuestos (comparaciones de igualdad de una misma expresión combinadas con [`OR`](https://dax.guide/OR) o [`\|\|`](https://dax.guide/op/or/)) con el operador [`IN`](https://dax.guide/IN). Ejemplo:
`a = 1 \|\| a = 2 \|\| a = 100` -> `a IN { 1, 2, 100 }` | +| DR014 | [Simplificar con IN](xref:DR014) | Reescriba los predicados compuestos (comparaciones de igualdad de una misma expresión combinadas con [`OR`](https://dax.guide/OR) o [`\\|\\|`](https://dax.guide/op/or/)) con el operador [`IN`](https://dax.guide/IN). Ejemplo:
`a = 1 \\|\\| a = 2 \\|\\| a = 100` -> `a IN { 1, 2, 100 }` | ### Reescrituras From eb61bb97d7629da39c6374fa31ca9b5e03d58926 Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:21:48 +0200 Subject: [PATCH 3/8] New translations importing-tables-data-modeling.md (Spanish) --- .../content/getting-started/importing-tables-data-modeling.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localizedContent/es/content/getting-started/importing-tables-data-modeling.md b/localizedContent/es/content/getting-started/importing-tables-data-modeling.md index 5782049e..eac23d3a 100644 --- a/localizedContent/es/content/getting-started/importing-tables-data-modeling.md +++ b/localizedContent/es/content/getting-started/importing-tables-data-modeling.md @@ -31,7 +31,7 @@ Este artículo describe cómo usar el [Asistente de importación de tablas](#tab # Trabajar con diagramas -En Tabular Editor 3, los **diagramas** son documentos que puedes usar para visualizar y editar las relaciones entre las tablas del modelo. Puedes crear tantos diagramas como quieras para visualizar áreas concretas de tu modelo. Un diagrama se puede guardar como un archivo independiente. Consulta para obtener más información. +En Tabular Editor 3, los **diagramas** son documentos que puedes usar para visualizar y editar las relaciones entre las tablas del modelo. Puedes crear tantos diagramas como quieras para visualizar áreas concretas de tu modelo. Consulta para obtener más información. Un diagrama se puede guardar como un archivo independiente. > [!NOTE] > Recomendamos crear varios diagramas pequeños en lugar de unos pocos diagramas grandes. Cuando un diagrama contiene más de unas 20 tablas, enseguida se vuelve abrumador y difícil de entender. From bd773a56d280ec3562bcd467a470086ec6a60cf0 Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:21:57 +0200 Subject: [PATCH 4/8] New translations migrate-from-te2.md (Spanish) --- localizedContent/es/content/getting-started/migrate-from-te2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localizedContent/es/content/getting-started/migrate-from-te2.md b/localizedContent/es/content/getting-started/migrate-from-te2.md index f4b2b414..fc2915f7 100644 --- a/localizedContent/es/content/getting-started/migrate-from-te2.md +++ b/localizedContent/es/content/getting-started/migrate-from-te2.md @@ -83,7 +83,7 @@ Para más información, consulta . ### Nuevo editor de DAX y capacidades semánticas -Tabular Editor 3 incorpora su propio motor de análisis sintáctico de DAX (también conocido como el "analizador semántico"), lo que significa que la herramienta ahora entiende la semántica de cualquier código DAX de tu modelo. Este motor también se usa para impulsar nuestro editor de DAX (nombre en clave "Daxscilla"), y para habilitar funciones como el resaltado de sintaxis, el formato automático, el autocompletado de código, los calltips, la refactorización y mucho más. Por supuesto, el editor es altamente configurable, lo que te permite ajustarlo para que se adapte a tu estilo de programación de DAX. +Tabular Editor 3 incorpora su propio motor de análisis sintáctico de DAX (también conocido como el "analizador semántico"), lo que significa que la herramienta ahora entiende la semántica de cualquier código DAX de tu modelo. Por supuesto, el editor es altamente configurable, lo que te permite ajustarlo para que se adapte a tu estilo de programación de DAX. Este motor también se usa para impulsar nuestro editor de DAX (nombre en clave "Daxscilla"), y para habilitar funciones como el resaltado de sintaxis, el formato automático, el autocompletado de código, los calltips, la refactorización y mucho más. Para obtener más información sobre el nuevo editor de DAX, consulta . From 6fcc6ded0af13a803b2f8dd8e439d24937894ce4 Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:23:12 +0200 Subject: [PATCH 5/8] New translations undo-redo.md (Spanish) --- localizedContent/es/content/how-tos/undo-redo.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/localizedContent/es/content/how-tos/undo-redo.md b/localizedContent/es/content/how-tos/undo-redo.md index 8526c2b3..c74bf705 100644 --- a/localizedContent/es/content/how-tos/undo-redo.md +++ b/localizedContent/es/content/how-tos/undo-redo.md @@ -13,4 +13,4 @@ applies_to: Cualquier cambio que hagas en Tabular Editor se puede deshacer con CTRL+Z y, a continuación, rehacer con CTRL+Y. No hay límite en el número de operaciones que se pueden deshacer, pero la pila se restablece cuando abres un archivo Model.bim o cargas un modelo desde una base de datos. -Al eliminar objetos del modelo, todas las traducciones, perspectivas y relaciones que hagan referencia a los objetos eliminados también se eliminan automáticamente (mientras que Visual Studio normalmente muestra un mensaje de error indicando que el objeto no se puede eliminar). Si cometes un error, puedes usar la función Deshacer para restaurar el objeto eliminado, lo que también restaurará cualquier traducción, perspectiva o relación eliminada. Ten en cuenta que, aunque Tabular Editor puede detectar [dependencias de fórmulas DAX](xref:formula-fix-up-dependencies), Tabular Editor no te avisará si eliminas una medida o una columna que se usa en la expresión DAX de otra medida o columna calculada. \ No newline at end of file +Si cometes un error, puedes usar la función Deshacer para restaurar el objeto eliminado, lo que también restaurará cualquier traducción, perspectiva o relación eliminada. Al eliminar objetos del modelo, todas las traducciones, perspectivas y relaciones que hagan referencia a los objetos eliminados también se eliminan automáticamente (mientras que Visual Studio normalmente muestra un mensaje de error indicando que el objeto no se puede eliminar). Ten en cuenta que, aunque Tabular Editor puede detectar [dependencias de fórmulas DAX](xref:formula-fix-up-dependencies), Tabular Editor no te avisará si eliminas una medida o una columna que se usa en la expresión DAX de otra medida o columna calculada. \ No newline at end of file From 3fbca4f2c3d5bfc51172147042ee46550e55dfe9 Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:24:51 +0200 Subject: [PATCH 6/8] New translations preferences.md (Spanish) --- localizedContent/es/content/references/preferences.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/localizedContent/es/content/references/preferences.md b/localizedContent/es/content/references/preferences.md index c8d0f848..631546a3 100644 --- a/localizedContent/es/content/references/preferences.md +++ b/localizedContent/es/content/references/preferences.md @@ -176,7 +176,7 @@ Crea una copia de seguridad del modelo al guardar cambios localmente. Esto te of ##### _Ubicación para guardar la copia de seguridad_ -Especifique la carpeta donde se guardan las copias de seguridad. De forma predeterminada, no se crean copias de seguridad a menos que se especifique una ubicación. +Especifica la carpeta donde se almacenan las copias de seguridad de los despliegues. De forma predeterminada, no se crean copias de seguridad a menos que se especifique una ubicación. ##### _Copia de seguridad al implementar_ (habilitado) @@ -184,7 +184,7 @@ Crea una copia de seguridad del modelo de destino antes de implementar los cambi ##### _Ubicación de copia de seguridad_ -Especifica la carpeta donde se almacenan las copias de seguridad de los despliegues. De forma predeterminada, no se crean copias de seguridad a menos que se especifique una ubicación. +Especifique la carpeta donde se guardan las copias de seguridad. De forma predeterminada, no se crean copias de seguridad a menos que se especifique una ubicación. ## Tabular Editor > Valores predeterminados @@ -714,7 +714,7 @@ Define prefijos aceptables para nombres de variables (p. ej., `_`, `__`, `var_`, Define prefijos aceptables para nombres de columnas temporales (p. ej., `@`, `_`, `x`, `x_`). Las acciones de código sugerirán añadir estos prefijos a los nombres de columnas temporales que no sigan la convención. -## Editor SQL / Editor M / Editor de C\# +## Editor SQL / Editor M / Editor de C\\# ![Marcador de posición: captura de pantalla de las páginas de preferencias de los editores SQL/M/C#] From 02660d95d6601976fb62503a7deda3321806f520 Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:32:30 +0200 Subject: [PATCH 7/8] New translations code-actions.md (Chinese Simplified) --- .../zh/content/features/code-actions.md | 100 +++++++++--------- 1 file changed, 50 insertions(+), 50 deletions(-) diff --git a/localizedContent/zh/content/features/code-actions.md b/localizedContent/zh/content/features/code-actions.md index eaa8d7ca..ad3f8b3a 100644 --- a/localizedContent/zh/content/features/code-actions.md +++ b/localizedContent/zh/content/features/code-actions.md @@ -20,9 +20,9 @@ applies_to: # 代码操作 -Tabular Editor 3.18.0 引入了一项名为 **代码操作** 的新功能。 此功能默认启用,但也可以在 **工具 > 偏好** 对话框中,进入 **文本编辑器 > DAX编辑器 > 代码操作** 将其禁用。 +Tabular Editor 3.18.0 引入了一项名为 **代码操作** 的新功能。 此功能默认启用,但也可以在 **工具 > 偏好** 对话框中,进入 **文本编辑器 > DAX编辑器 > 代码操作** 将其禁用。 此功能默认启用,但也可以在 **工具 > 偏好** 对话框中,进入 **文本编辑器 > DAX编辑器 > 代码操作** 将其禁用。 -代码操作是一项提升效率的功能,会以不打扰你的方式提供改进 DAX 代码的建议。 单击一下即可应用这些建议。 代码操作还让你可以轻松使用常见的代码重构操作。 +代码操作是一项提升效率的功能,会以不打扰你的方式提供改进 DAX 代码的建议。 单击一下即可应用这些建议。 代码操作还让你可以轻松使用常见的代码重构操作。 单击一下即可应用这些建议。 代码操作还让你可以轻松使用常见的代码重构操作。 代码操作分为三类: @@ -35,14 +35,14 @@ Tabular Editor 3.18.0 引入了一项名为 **代码操作** 的新功能。 此 - 在可能的情况下简化复杂表达式 - 删除冗余或不必要的代码 - 应用一致的格式和命名约定 -3. **重写**:这些是用于重构 DAX 代码的建议。 它们不一定是改进,但通常对较大规模的代码重构很有用。 示例包括: +3. **重写**:这些是用于重构 DAX 代码的建议。 它们不一定是改进,但通常对较大规模的代码重构很有用。 示例包括: 它们不一定是改进,但通常对较大规模的代码重构很有用。 示例包括: - 将 DAX “语法糖”转换为更冗长但更明确的代码 - 重命名某个变量或扩展列的所有引用 - 格式化代码 ## 如何使用代码操作 -新增了一个命令及其对应的工具栏/菜单按钮 **显示代码操作**,默认快捷键为 `Ctrl+.`。 这个命令会显示当前光标位置可用的代码操作: +新增了一个命令及其对应的工具栏/菜单按钮 **显示代码操作**,默认快捷键为 `Ctrl+.`。 这个命令会显示当前光标位置可用的代码操作: 这个命令会显示当前光标位置可用的代码操作: ![代码操作调用菜单](~/content/assets/images/features/code-action-invoke-menu.png) @@ -50,7 +50,7 @@ Tabular Editor 3.18.0 引入了一项名为 **代码操作** 的新功能。 此 ![代码操作“重构”子菜单](~/content/assets/images/features/code-action-refactor-submenu.png) -最后,当光标放在有可用操作的代码分段上时,编辑器左侧边距会显示灯泡或螺丝刀图标。 点击该图标也会打开“代码操作”菜单: +最后,当光标放在有可用操作的代码分段上时,编辑器左侧边距会显示灯泡或螺丝刀图标。 点击该图标也会打开“代码操作”菜单: 点击该图标也会打开“代码操作”菜单: ![代码操作边距](~/content/assets/images/features/code-action-margin.png) @@ -60,15 +60,15 @@ Tabular Editor 3.18.0 引入了一项名为 **代码操作** 的新功能。 此 ## 代码操作指示器 -**改进**和**可读性**代码操作也会在代码编辑器中以视觉方式标注。 这样,你就能快速判断代码中哪些部分可以改进,或提高可读性。 +**改进**和**可读性**代码操作也会在代码编辑器中以视觉方式标注。 这样,你就能快速判断代码中哪些部分可以改进,或提高可读性。 这样,你就能快速判断代码中哪些部分可以改进,或提高可读性。 -- **改进**会在代码分段的前几个字符下方显示为橙色圆点(除非该代码分段已显示橙色警告波浪线)。 当光标移到该代码分段上时,左侧边距会显示一个_灯泡_图标。 -- **可读性**操作会在代码分段的前几个字符下方显示为青绿色圆点。 当光标移到代码分段上时,左侧边距会显示一个_螺丝刀_图标。 +- **改进**会在代码分段的前几个字符下方显示为橙色圆点(除非该代码分段已显示橙色警告波浪线)。 当光标移到该代码分段上时,左侧边距会显示一个_灯泡_图标。 当光标移到该代码分段上时,左侧边距会显示一个_灯泡_图标。 +- **可读性**操作会在代码分段的前几个字符下方显示为青绿色圆点。 当光标移到代码分段上时,左侧边距会显示一个_螺丝刀_图标。 当光标移到代码分段上时,左侧边距会显示一个_螺丝刀_图标。 - 代码本身不会在视觉上直接标示出 **重写**;不过,当光标放在包含可用重写的代码分段上时,左侧边距会显示 _螺丝刀_ 图标。 ## 应用到所有出现位置 -有些代码操作可以应用到当前 DAX 表达式、DAX 脚本或 DAX 查询中的所有出现位置,而不仅仅是光标所在的代码分段。 在这种情况下,代码操作会显示在“代码操作”菜单中,并在操作说明后追加 " (所有出现位置)"。 点击该操作会将更改应用到文档中的所有出现位置。 +有些代码操作可以应用到当前 DAX 表达式、DAX 脚本或 DAX 查询中的所有出现位置,而不仅仅是光标所在的代码分段。 在这种情况下,代码操作会显示在“代码操作”菜单中,并在操作说明后追加 " (所有出现位置)"。 点击该操作会将更改应用到文档中的所有出现位置。 在这种情况下,代码操作会显示在“代码操作”菜单中,并在操作说明后追加 " (所有出现位置)"。 点击该操作会将更改应用到文档中的所有出现位置。 例如在下面的截图中,**为变量添加 '_' 前缀** 操作可以应用到文档中的所有出现位置(即所有变量),而不只是光标下的 `totalSales` 变量: @@ -84,61 +84,61 @@ Tabular Editor 3.18.0 引入了一项名为 **代码操作** 的新功能。 此 当光标放在代码分段上时,下列代码操作会在适用代码的前两个字符下方显示橙色圆点,并在左侧边距显示一个灯泡图标: -| ID | 名称 | 说明 | -| ----- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| DI001 | [删除未使用的变量](xref:DI001) | 未在任何位置被引用的变量应当删除。 示例:
`VAR a = 1 VAR b = 2 RETURN a` -> `VAR a = 1 RETURN a` | -| DI002 | [删除所有未使用的变量](xref:DI002) | 在变量块的 `RETURN` 部分未被使用的变量(无论是直接使用,还是通过其他变量间接使用)都应删除。 示例:
`VAR a = 1 VAR b = a RETURN 123` -> `123` | -| DI003 | [移除表名](xref:DI003) | 度量值引用不应包含表名,因为引用度量值时无需表名。 此外,这种做法还能让度量值引用更容易与列引用区分开来。 示例:
`Sales[Total Sales]` -> `[Total Sales]` | -| DI004 | [添加表名](xref:DI004) | 列引用应包含表名,以避免歧义,并更容易将列引用与度量值引用区分开来。 示例:
`SUM([SalesAmount])` -> `SUM(Sales[SalesAmount])` | -| DI005 | [将表筛选重写为标量谓词](xref:DI005) | DAX 中一个常见的反模式是:在 [`CALCULATE`](https://dax.guide/CALCULATE) 的筛选参数中对一个表进行筛选,而实际上只需筛选该表中的一个或多个列即可。 示例:
`CALCULATE([Total Sales], FILTER(Products, Products[Color] = "Red"))` -> `CALCULATE([Total Sales], KEEPFILTERS(Products[Color] = "Red"))`
此代码操作支持原始表达式的多种变体。 | -| DI006 | [将多列筛选拆分为多个筛选](xref:DI006) | 当使用 `AND` (或等效的 `&&` 运算符) 将表在多个列上的筛选组合在一起时,通常可以通过为每一列分别指定一个筛选来获得更好的性能。 示例:
`CALCULATE(..., Products[Color] = "Red" && Products[Size] = "Large")` -> `CALCULATE(..., Products[Color] = "Red", Products[Size] = "Large")` | -| DI007 | [简化 SWITCH 语句](xref:DI007) | 当 [`SWITCH`](https://dax.guide/SWITCH) 语句将 **<Expression>** 参数指定为 `TRUE()`,且所有 **<Value>** 参数都是对同一变量/度量值的简单比较时,该语句可以被简化。 示例:
`SWITCH(TRUE(), a = 1, ..., a = 2, ...)` -> `SWITCH(a, 1, ..., 2, ...)` | -| DI008 | [移除多余的 CALCULATE](xref:DI008) | 应移除不必要的 [`CALCULATE`](https://dax.guide/CALCULATE) 函数:因为它不会修改筛选语境,或因为即使不写也会发生隐式语境转换。 示例:
`CALCULATE([Total Sales])` -> `[Total Sales]`
`AVERAGEX(Product, CALCULATE([Total Sales]))` -> `AVERAGEX(Product, [Total Sales])`

当 `CALCULATE` / `CALCULATETABLE` 的第一个参数是 DAX 变量时同样适用,例如:
`VAR x = [Total Sales] RETURN CALCULATE(x, Product[Color] = "Red")` ->
`VAR x = [Total Sales] RETURN x` | -| DI009 | [避免使用 CALCULATE 简写语法](xref:DI009) | 示例:
`[Total Sales](Products[Color] = "Red")` -> `CALCULATE([Total Sales], Products[Color] = "Red")` | -| DI010 | [用 MIN/MAX 替代 IF](xref:DI010) | 当条件表达式用于返回两个值中的最小值或最大值时,使用 [`MIN`](https://dax.guide/MIN) 或 [`MAX`](https://dax.guide/MAX) 函数会更高效、更简洁。 示例:
`IF(a > b, a, b)` -> `MAX(a, b)` | -| DI011 | [用 ISEMPTY 替代 COUNTROWS](xref:DI011) | 检查表是否为空时,使用 [`ISEMPTY`](https://dax.guide/ISEMPTY) 比统计表的行数更高效。 示例:
`COUNTROWS(Products) = 0` -> `ISEMPTY(Products)` | -| DI012 | [用 DIVIDE 替代除法运算符](xref:DI012) | 当除法的分母是任意表达式时,请使用 [`DIVIDE`](https://dax.guide/DIVIDE) 而不是除法运算符,以避免除以零的错误。 示例:
`x / y` -> `DIVIDE(x, y)` | -| DI013 | [使用除法运算符而不是 DIVIDE](xref:DI013) | 当 [`DIVIDE`](https://dax.guide/DIVIDE) 的第二个参数是非零常量时,使用除法运算符更高效。 示例:
`DIVIDE(x, 2)` -> `x / 2` | -| DI014 | [用 DIVIDE 替换 IFERROR](xref:DI014) | 当除法的分母为零时,请使用 [`DIVIDE`](https://dax.guide/DIVIDE) 函数替代 [`IFERROR`](https://dax.guide/IFERROR),从而返回替代结果。 示例:
`IFERROR(x / y, 0)` -> `DIVIDE(x, y, 0)` | -| DI015 | [用 DIVIDE 替换 IF](xref:DI015) | 使用 [`DIVIDE`](https://dax.guide/DIVIDE) 函数代替 [`IF`](https://dax.guide/IF),可以更方便地检查分母是否为零或空白。 示例:
`IF(y <> 0, x / y)` -> `DIVIDE(x, y)` | -| DI016 | 使用正确的 UDF 语法 | 为用户定义函数表达式使用正确的语法。 示例:
`(x, y) => x + y` | +| ID | 名称 | 说明 | +| ----- | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DI001 | [删除未使用的变量](xref:DI001) | 未在任何位置被引用的变量应当删除。 示例:
`VAR a = 1 VAR b = 2 RETURN a` -> `VAR a = 1 RETURN a` 示例:
`VAR a = 1 VAR b = 2 RETURN a` -> `VAR a = 1 RETURN a` | +| DI002 | [删除所有未使用的变量](xref:DI002) | 在变量块的 `RETURN` 部分未被使用的变量(无论是直接使用,还是通过其他变量间接使用)都应删除。 示例:
`VAR a = 1 VAR b = a RETURN 123` -> `123` 示例:
`VAR a = 1 VAR b = a RETURN 123` -> `123` | +| DI003 | [移除表名](xref:DI003) | 度量值引用不应包含表名,因为引用度量值时无需表名。 此外,这种做法还能让度量值引用更容易与列引用区分开来。 示例:
`Sales[Total Sales]` -> `[Total Sales]` | +| DI004 | [添加表名](xref:DI004) | 列引用应包含表名,以避免歧义,并更容易将列引用与度量值引用区分开来。 示例:
`SUM([SalesAmount])` -> `SUM(Sales[SalesAmount])` 示例:
`SUM([SalesAmount])` -> `SUM(Sales[SalesAmount])` | +| DI005 | [将表筛选重写为标量谓词](xref:DI005) | DAX 中一个常见的反模式是:在 [`CALCULATE`](https://dax.guide/CALCULATE) 的筛选参数中对一个表进行筛选,而实际上只需筛选该表中的一个或多个列即可。 示例:
`CALCULATE([Total Sales], FILTER(Products, Products[Color] = "Red"))` -> `CALCULATE([Total Sales], KEEPFILTERS(Products[Color] = "Red"))`
此代码操作支持原始表达式的多种变体。 示例:
`CALCULATE([Total Sales], FILTER(Products, Products[Color] = "Red"))` -> `CALCULATE([Total Sales], KEEPFILTERS(Products[Color] = "Red"))`
此代码操作支持原始表达式的多种变体。 | +| DI006 | [将多列筛选拆分为多个筛选](xref:DI006) | 当使用 `AND` (或等效的 `&&` 运算符) 将表在多个列上的筛选组合在一起时,通常可以通过为每一列分别指定一个筛选来获得更好的性能。 示例:
`CALCULATE(..., Products[Color] = "Red" && Products[Size] = "Large")` -> `CALCULATE(..., Products[Color] = "Red", Products[Size] = "Large")` | +| DI007 | [简化 SWITCH 语句](xref:DI007) | 当 [`SWITCH`](https://dax.guide/SWITCH) 语句将 **<Expression>** 参数指定为 `TRUE()`,且所有 **<Value>** 参数都是对同一变量/度量值的简单比较时,该语句可以被简化。 示例:
`SWITCH(TRUE(), a = 1, ..., a = 2, ...)` -> `SWITCH(a, 1, ..., 2, ...)` 示例:
`SWITCH(TRUE(), a = 1, ..., a = 2, ...)` -> `SWITCH(a, 1, ..., 2, ...)` | +| DI008 | [移除多余的 CALCULATE](xref:DI008) | 应移除不必要的 [`CALCULATE`](https://dax.guide/CALCULATE) 函数:因为它不会修改筛选语境,或因为即使不写也会发生隐式语境转换。 应移除不必要的 [`CALCULATE`](https://dax.guide/CALCULATE) 函数:因为它不会修改筛选语境,或因为即使不写也会发生隐式语境转换。 示例:
`CALCULATE([Total Sales])` -> `[Total Sales]`
`AVERAGEX(Product, CALCULATE([Total Sales]))` -> `AVERAGEX(Product, [Total Sales])`

当 `CALCULATE` / `CALCULATETABLE` 的第一个参数是 DAX 变量时同样适用,例如:
`VAR x = [Total Sales] RETURN CALCULATE(x, Product[Color] = "Red")` ->
`VAR x = [Total Sales] RETURN x` | +| DI009 | [避免使用 CALCULATE 简写语法](xref:DI009) | 示例:
`[Total Sales](Products[Color] = "Red")` -> `CALCULATE([Total Sales], Products[Color] = "Red")` | +| DI010 | [用 MIN/MAX 替代 IF](xref:DI010) | 当条件表达式用于返回两个值中的最小值或最大值时,使用 [`MIN`](https://dax.guide/MIN) 或 [`MAX`](https://dax.guide/MAX) 函数会更高效、更简洁。 示例:
`IF(a > b, a, b)` -> `MAX(a, b)` 示例:
`IF(a > b, a, b)` -> `MAX(a, b)` | +| DI011 | [用 ISEMPTY 替代 COUNTROWS](xref:DI011) | 检查表是否为空时,使用 [`ISEMPTY`](https://dax.guide/ISEMPTY) 比统计表的行数更高效。 示例:
`COUNTROWS(Products) = 0` -> `ISEMPTY(Products)` 示例:
`COUNTROWS(Products) = 0` -> `ISEMPTY(Products)` | +| DI012 | [用 DIVIDE 替代除法运算符](xref:DI012) | 当除法的分母是任意表达式时,请使用 [`DIVIDE`](https://dax.guide/DIVIDE) 而不是除法运算符,以避免除以零的错误。 示例:
`x / y` -> `DIVIDE(x, y)` 示例:
`x / y` -> `DIVIDE(x, y)` | +| DI013 | [使用除法运算符而不是 DIVIDE](xref:DI013) | 当 [`DIVIDE`](https://dax.guide/DIVIDE) 的第二个参数是非零常量时,使用除法运算符更高效。 示例:
`DIVIDE(x, 2)` -> `x / 2` 示例:
`DIVIDE(x, 2)` -> `x / 2` | +| DI014 | [用 DIVIDE 替换 IFERROR](xref:DI014) | 当除法的分母为零时,请使用 [`DIVIDE`](https://dax.guide/DIVIDE) 函数替代 [`IFERROR`](https://dax.guide/IFERROR),从而返回替代结果。 示例:
`IFERROR(x / y, 0)` -> `DIVIDE(x, y, 0)` 示例:
`IFERROR(x / y, 0)` -> `DIVIDE(x, y, 0)` | +| DI015 | [用 DIVIDE 替换 IF](xref:DI015) | 使用 [`DIVIDE`](https://dax.guide/DIVIDE) 函数代替 [`IF`](https://dax.guide/IF),可以更方便地检查分母是否为零或空白。 示例:
`IF(y <> 0, x / y)` -> `DIVIDE(x, y)` 示例:
`IF(y <> 0, x / y)` -> `DIVIDE(x, y)` | +| DI016 | 使用正确的 UDF 语法 | 为用户定义函数表达式使用正确的语法。 示例:
`(x, y) => x + y` 示例:
`(x, y) => x + y` | ### 可读性 当光标置于代码分段上时,下面的代码操作会在适用代码的前两个字符下方显示青绿色圆点,并在左侧边距显示螺丝刀图标 -| ID | 名称 | 说明 | -| ----- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| DR001 | [转换为标量谓词](xref:DR001) | 列筛选器可以在不显式使用 [`FILTER`](https://dax.guide/FILTER) 函数的情况下,更简洁地写成标量谓词。 示例:
`FILTER(ALL(Products[Color]), Products[Color] = "Red")` -> `Products[Color] = "Red"`
`FILTER(VALUES(Products[Color]), Products[Color] = "Red")` -> `KEEPFILTERS(Products[Color] = "Red")` | -| DR002 | [使用聚合函数替代迭代器](xref:DR002) | 尽可能使用聚合函数而不是迭代器函数,以简化代码。 示例:
`SUMX(Products, Products[SalesAmount])` -> `SUM(Products[SalesAmount])` | -| DR003 | [使用 VALUES 替代 SUMMARIZE](xref:DR003) | 当 [`SUMMARIZE`](https://dax.guide/SUMMARIZE) 只指定一列,且该列属于第一个参数中指定的表时,可以使用 [`VALUES`](https://dax.guide/VALUES) 更简洁地编写代码。 示例:
`SUMMARIZE(Products, Products[Color])` -> `VALUES(Products[Color])` | -| DR004 | [变量前缀](xref:DR004) | 变量应使用一致的命名约定。 建议使用前缀,例如下划线。 可以配置要使用的前缀,以符合偏好的样式。 示例:
`VAR totalSales = SUM(Sales[SalesAmount])` -> `VAR _totalSales = SUM(Sales[SalesAmount])` | -| DR005 | [为临时列添加前缀](xref:DR005) | 建议为临时列使用一致的前缀,以便更容易将它们与基列或度量值区分开来。 你可以配置要使用的前缀,以符合你偏好的风格。 示例:
`ADDCOLUMNS(Product, "SalesByProd", [Sales])` -> `ADDCOLUMNS(Product, "@SalesByProd", [Sales])` | -| DR006 | [将常量聚合移至变量](xref:DR006) | 当在迭代器或标量谓词中使用聚合函数时,该聚合对迭代中的每一行都会返回相同的结果。 因此,可以将该聚合移到迭代之外的 DAX 变量中。 示例:
`CALCULATE(..., 'Date'[Date] = MAX('Date'[Date]))` ->
`VAR _maxDate = MAX('Date'[Date]) RETURN CALCULATE(..., 'Date'[Date] = _maxDate)` | -| DR007 | [简化 1 个变量代码块](xref:DR007) | 仅包含一个变量的变量块可通过将表达式直接移入块的 `RETURN` 部分来简化。 前提是该变量只被引用一次,且不带任何上下文修饰符。 示例:
`VAR _result = [Sales] * 1.25 RETURN _result` -> `[Sales] * 1.25` | -| DR008 | [简化多变量代码块](xref:DR008) | 对于包含多个变量的变量块,如果每个变量都是简单的度量值引用,并且仅在 `RETURN` 部分使用一次且没有任何上下文修饰符,则应进行简化。 示例:
`VAR _sales = [Sales] VAR _cost = [Cost] RETURN _sales - _cost` -> `[Sales] - [Cost]` | -| DR009 | [改用 DISTINCTCOUNT 重写](xref:DR009) | 不要使用 `COUNTROWS(DISTINCT(T[c])` 来统计某列中不同值的数量,改用 [`DISTINCTCOUNT`](https://dax.guide/DISTINCTCOUNT) 函数。 | -| DR010 | [改用 COALESCE 重写](xref:DR010) | 不要使用 `IF` 从一组表达式中返回第一个非空值,改用 [`COALESCE`](https://dax.guide/COALESCE) 函数。 示例:
`IF(ISBLANK([Sales]), [Sales2], [Sales])` -> `COALESCE([Sales], [Sales2])` | -| DR011 | [使用 ISBLANK 重写](xref:DR011) | 不要将表达式与 [`BLANK()`](https://dax.guide/BLANK) 进行比较,而应使用 [`ISBLANK`](https://dax.guide/ISBLANK) 函数。 示例:
`IF([Sales] = BLANK(), [Budget], [Sales])` -> `IF(ISBLANK([Sales], [Budget], [Sales])` | -| DR012 | [移除不必要的 BLANK](xref:DR012) | 某些 DAX 函数,例如 [`IF`](https://dax.guide/IF) 和 [`SWITCH`](https://dax.guide/SWITCH) 在条件为 false 时本就会返回 `BLANK()`,因此无需显式指定 `BLANK()`。 示例:
`IF(a > b, a, BLANK())` -> `IF(a > b, a)` | -| DR013 | [简化否定逻辑](xref:DR013) | 当对逻辑表达式取反时,使用相反的运算符重写表达式通常更易读。 示例:
`NOT(a = b)` -> `a <> b` | -| DR014 | [使用 IN 简化](xref:DR014) | 将复合谓词(对同一表达式进行相等比较,并通过 [`OR`](https://dax.guide/OR) 或 [`\|\|`](https://dax.guide/op/or/) 组合)改写为使用 [`IN`](https://dax.guide/IN) 运算符。 示例:
`a = 1 \|\| a = 2 \|\| a = 100` -> `a IN { 1, 2, 100 }` | +| ID | 名称 | 说明 | +| ----- | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| DR001 | [转换为标量谓词](xref:DR001) | 列筛选器可以在不显式使用 [`FILTER`](https://dax.guide/FILTER) 函数的情况下,更简洁地写成标量谓词。 示例:
`FILTER(ALL(Products[Color]), Products[Color] = "Red")` -> `Products[Color] = "Red"`
`FILTER(VALUES(Products[Color]), Products[Color] = "Red")` -> `KEEPFILTERS(Products[Color] = "Red")` 示例:
`FILTER(ALL(Products[Color]), Products[Color] = "Red")` -> `Products[Color] = "Red"`
`FILTER(VALUES(Products[Color]), Products[Color] = "Red")` -> `KEEPFILTERS(Products[Color] = "Red")` | +| DR002 | [使用聚合函数替代迭代器](xref:DR002) | 尽可能使用聚合函数而不是迭代器函数,以简化代码。 示例:
`SUMX(Products, Products[SalesAmount])` -> `SUM(Products[SalesAmount])` | +| DR003 | [使用 VALUES 替代 SUMMARIZE](xref:DR003) | 当 [`SUMMARIZE`](https://dax.guide/SUMMARIZE) 只指定一列,且该列属于第一个参数中指定的表时,可以使用 [`VALUES`](https://dax.guide/VALUES) 更简洁地编写代码。 示例:
`SUMMARIZE(Products, Products[Color])` -> `VALUES(Products[Color])` 示例:
`SUMMARIZE(Products, Products[Color])` -> `VALUES(Products[Color])` | +| DR004 | [变量前缀](xref:DR004) | 变量应使用一致的命名约定。 建议使用前缀,例如下划线。 可以配置要使用的前缀,以符合偏好的样式。 示例:
`VAR totalSales = SUM(Sales[SalesAmount])` -> `VAR _totalSales = SUM(Sales[SalesAmount])` | +| DR005 | [为临时列添加前缀](xref:DR005) | 建议为临时列使用一致的前缀,以便更容易将它们与基列或度量值区分开来。 你可以配置要使用的前缀,以符合你偏好的风格。 示例:
`ADDCOLUMNS(Product, "SalesByProd", [Sales])` -> `ADDCOLUMNS(Product, "@SalesByProd", [Sales])` | +| DR006 | [将常量聚合移至变量](xref:DR006) | 当在迭代器或标量谓词中使用聚合函数时,该聚合对迭代中的每一行都会返回相同的结果。 因此,可以将该聚合移到迭代之外的 DAX 变量中。 示例:
`CALCULATE(..., 'Date'[Date] = MAX('Date'[Date]))` ->
`VAR _maxDate = MAX('Date'[Date]) RETURN CALCULATE(..., 'Date'[Date] = _maxDate)` | +| DR007 | [简化 1 个变量代码块](xref:DR007) | 仅包含一个变量的变量块可通过将表达式直接移入块的 `RETURN` 部分来简化。 前提是该变量只被引用一次,且不带任何上下文修饰符。 示例:
`VAR _result = [Sales] * 1.25 RETURN _result` -> `[Sales] * 1.25` 前提是该变量只被引用一次,且不带任何上下文修饰符。 示例:
`VAR _result = [Sales] * 1.25 RETURN _result` -> `[Sales] * 1.25` | +| DR008 | [简化多变量代码块](xref:DR008) | 对于包含多个变量的变量块,如果每个变量都是简单的度量值引用,并且仅在 `RETURN` 部分使用一次且没有任何上下文修饰符,则应进行简化。 示例:
`VAR _sales = [Sales] VAR _cost = [Cost] RETURN _sales - _cost` -> `[Sales] - [Cost]` 示例:
`VAR _sales = [Sales] VAR _cost = [Cost] RETURN _sales - _cost` -> `[Sales] - [Cost]` | +| DR009 | [改用 DISTINCTCOUNT 重写](xref:DR009) | 不要使用 `COUNTROWS(DISTINCT(T[c])` 来统计某列中不同值的数量,改用 [`DISTINCTCOUNT`](https://dax.guide/DISTINCTCOUNT) 函数。 | +| DR010 | [改用 COALESCE 重写](xref:DR010) | 不要使用 `IF` 从一组表达式中返回第一个非空值,改用 [`COALESCE`](https://dax.guide/COALESCE) 函数。 示例:
`IF(ISBLANK([Sales]), [Sales2], [Sales])` -> `COALESCE([Sales], [Sales2])` 示例:
`IF(ISBLANK([Sales]), [Sales2], [Sales])` -> `COALESCE([Sales], [Sales2])` | +| DR011 | [使用 ISBLANK 重写](xref:DR011) | 不要将表达式与 [`BLANK()`](https://dax.guide/BLANK) 进行比较,而应使用 [`ISBLANK`](https://dax.guide/ISBLANK) 函数。 示例:
`IF([Sales] = BLANK(), [Budget], [Sales])` -> `IF(ISBLANK([Sales], [Budget], [Sales])` 示例:
`IF([Sales] = BLANK(), [Budget], [Sales])` -> `IF(ISBLANK([Sales], [Budget], [Sales])` | +| DR012 | [移除不必要的 BLANK](xref:DR012) | 某些 DAX 函数,例如 [`IF`](https://dax.guide/IF) 和 [`SWITCH`](https://dax.guide/SWITCH) 在条件为 false 时本就会返回 `BLANK()`,因此无需显式指定 `BLANK()`。 示例:
`IF(a > b, a, BLANK())` -> `IF(a > b, a)` 示例:
`IF(a > b, a, BLANK())` -> `IF(a > b, a)` | +| DR013 | [简化否定逻辑](xref:DR013) | 当对逻辑表达式取反时,使用相反的运算符重写表达式通常更易读。 示例:
`NOT(a = b)` -> `a <> b` 示例:
`NOT(a = b)` -> `a <> b` | +| DR014 | [使用 IN 简化](xref:DR014) | 将复合谓词(对同一表达式进行相等比较,并通过 [`OR`](https://dax.guide/OR) 或 [`\\|\\|`](https://dax.guide/op/or/) 组合)改写为使用 [`IN`](https://dax.guide/IN) 运算符。 示例:
`a = 1 \\|\\| a = 2 \\|\\| a = 100` -> `a IN { 1, 2, 100 }` 示例:
`a = 1 \|\| a = 2 \|\| a = 100` -> `a IN { 1, 2, 100 }` | ### 重写 当光标放在代码分段上时,下面的“代码操作”会在左侧边距以螺丝刀图标显示。 -| ID | 名称 | 说明 | -| ----- | -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| RW001 | [使用 CALCULATE 改写 TOTALxTD](xref:RW001) | 诸如 [`TOTALMTD`](https://dax.guide/TOTALMTD)、[`TOTALQTD`](https://dax.guide/TOTALQTD) 和 [`TOTALYTD`](https://dax.guide/TOTALYTD) 之类的函数,都可以用更具表达力且更灵活的 [`CALCULATE`](https://dax.guide/CALCULATE) 函数来重写。 示例:
`TOTALYTD([Total Sales], 'Date'[Date])` -> `CALCULATE([Total Sales], DATESYTD('Date'[Date]))` | -| RW002 | [使用 FILTER 重写](xref:RW002) | 在 `CALCULATE` 的筛选器参数中,标量谓词可以用 `FILTER` 重写。 例如,当你需要添加更复杂的筛选逻辑时,这会很有用。 示例:
`CALCULATE(..., Products[Color] = "Red")` -> `CALCULATE(..., FILTER(ALL(Products[Color]), Products[Color] = "Red"))` | -| RW003 | [反转 IF](xref:RW003) | 为了提升可读性,有时把 `IF` 语句反过来写会更清晰。 示例:
`IF(a < b, "B is greater", "A is greater")` -> `IF(a > b, "A is greater", "B is greater")` | +| ID | 名称 | 说明 | +| ----- | -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| RW001 | [使用 CALCULATE 改写 TOTALxTD](xref:RW001) | 诸如 [`TOTALMTD`](https://dax.guide/TOTALMTD)、[`TOTALQTD`](https://dax.guide/TOTALQTD) 和 [`TOTALYTD`](https://dax.guide/TOTALYTD) 之类的函数,都可以用更具表达力且更灵活的 [`CALCULATE`](https://dax.guide/CALCULATE) 函数来重写。 诸如 [`TOTALMTD`](https://dax.guide/TOTALMTD)、[`TOTALQTD`](https://dax.guide/TOTALQTD) 和 [`TOTALYTD`](https://dax.guide/TOTALYTD) 之类的函数,都可以用更具表达力且更灵活的 [`CALCULATE`](https://dax.guide/CALCULATE) 函数来重写。 示例:
`TOTALYTD([Total Sales], 'Date'[Date])` -> `CALCULATE([Total Sales], DATESYTD('Date'[Date]))` | +| RW002 | [使用 FILTER 重写](xref:RW002) | 在 `CALCULATE` 的筛选器参数中,标量谓词可以用 `FILTER` 重写。 例如,当你需要添加更复杂的筛选逻辑时,这会很有用。 示例:
`CALCULATE(..., Products[Color] = "Red")` -> `CALCULATE(..., FILTER(ALL(Products[Color]), Products[Color] = "Red"))` 例如,当你需要添加更复杂的筛选逻辑时,这会很有用。 示例:
`CALCULATE(..., Products[Color] = "Red")` -> `CALCULATE(..., FILTER(ALL(Products[Color]), Products[Color] = "Red"))` | +| RW003 | [反转 IF](xref:RW003) | 为了提升可读性,有时把 `IF` 语句反过来写会更清晰。 为了提升可读性,有时把 `IF` 语句反过来写会更清晰。 示例:
`IF(a < b, "B is greater", "A is greater")` -> `IF(a > b, "A is greater", "B is greater")` | ## 自定义代码操作 -你可以通过 **工具 > 偏好** 对话框,在 **文本编辑器 > DAX编辑器 > 代码操作** 中自定义代码操作的行为。 在这里,你可以启用或禁用该功能,并为部分代码操作配置更多选项,例如用于变量名和扩展列的前缀。 +你可以通过 **工具 > 偏好** 对话框,在 **文本编辑器 > DAX编辑器 > 代码操作** 中自定义代码操作的行为。 在这里,你可以启用或禁用该功能,并为部分代码操作配置更多选项,例如用于变量名和扩展列的前缀。 在这里,你可以启用或禁用该功能,并为部分代码操作配置更多选项,例如用于变量名和扩展列的前缀。 -我们计划在后续版本中为此界面增加更多配置项,例如用于单独启用或禁用某个代码操作的选项。 敬请期待! +我们计划在后续版本中为此界面增加更多配置项,例如用于单独启用或禁用某个代码操作的选项。 敬请期待! 敬请期待! ![代码操作偏好](~/content/assets/images/code-actions-preferences.png) From 0882b1569ab243abeed4899190fe1145f5ab0360 Mon Sep 17 00:00:00 2001 From: David Bojsen Date: Fri, 10 Apr 2026 15:33:26 +0200 Subject: [PATCH 8/8] New translations tom-explorer-view.md (Chinese Simplified) --- .../features/views/tom-explorer-view.md | 42 ++++++++++++------- 1 file changed, 28 insertions(+), 14 deletions(-) diff --git a/localizedContent/zh/content/features/views/tom-explorer-view.md b/localizedContent/zh/content/features/views/tom-explorer-view.md index a72f6dbb..238317b2 100644 --- a/localizedContent/zh/content/features/views/tom-explorer-view.md +++ b/localizedContent/zh/content/features/views/tom-explorer-view.md @@ -20,7 +20,7 @@ applies_to: # 在 Tabular Editor 3 中使用 TOM Explorer -TOM Explorer 是你与 Data model 对象交互的主窗口。 表、列、度量值、安全组等对象都以分层结构显示。 表格数据模型由所谓的 [Tabular Object Model (TOM)](https://docs.microsoft.com/en-us/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) 来表示,而在 TOM Explorer 中显示的正是该 TOM 的元数据。 +TOM Explorer 是你与 Data model 对象交互的主窗口。 表、列、度量值、安全组等对象都以分层结构显示。 TOM Explorer 是你与 Data model 对象交互的主窗口。 表、列、度量值、安全组等对象都以分层结构显示。 表格数据模型由所谓的 [Tabular Object Model (TOM)](https://docs.microsoft.com/en-us/analysis-services/tom/introduction-to-the-tabular-object-model-tom-in-analysis-services-amo?view=asallproducts-allversions) 来表示,而在 TOM Explorer 中显示的正是该 TOM 的元数据。 TOM Explorer 由两个主要区域组成:第一部分是数据模型对象;第二部分是菜单栏,用于筛选并更改主窗口中显示的内容。 @@ -37,51 +37,52 @@ TOM Explorer 由两个主要区域组成:第一部分是数据模型对象; ### 右键菜单中的选项 - **更新表架构...**: - 检查外部数据源的结构变化,并据此更新表的架构。 当源端新增、重命名或删除列时,这会很有用。 + 检查外部数据源的结构变化,并据此更新表的架构。 当源端新增、重命名或删除列时,这会很有用。 当源端新增、重命名或删除列时,这会很有用。 - **编写 DAX 脚本**: - 为所选表及其对象生成 DAX 脚本。 将打开一个新的脚本编辑器窗口,便于你集中查看或编辑 DAX 定义。 + 为所选表及其对象生成 DAX 脚本。 将打开一个新的脚本编辑器窗口,便于你集中查看或编辑 DAX 定义。 将打开一个新的脚本编辑器窗口,便于你集中查看或编辑 DAX 定义。 - **预览数据**: - 打开数据预览窗格,显示加载到所选表中的数据样本。 可用于验证或调试。 仅在右键单击表时才会出现。 + 打开数据预览窗格,显示加载到所选表中的数据样本。 可用于验证或调试。 仅在右键单击表时才会出现。 可用于验证或调试。 仅在右键单击表时才会出现。 - **刷新**: 展开后会显示可对所选表执行的刷新操作列表。 仅当模型以独立模式或工作区模式连接到实时模型时才可用。 此选项仅适用于表和分区。 - **创建**: - 展开为子菜单,可在所选对象下新建度量值、列、层级结构、显示文件夹或计算项。 可用选项取决于所选对象的类型。 + 展开为子菜单,可在所选对象下新建度量值、列、层级结构、显示文件夹或计算项。 可用选项取决于所选对象的类型。 可用选项取决于所选对象的类型。 - **移至组**: - 可在 TOM Explorer 中将该表移入某个表格组,便于浏览模型。 此选项仅对表可用。 + 可在 TOM Explorer 中将该表移入某个表格组,便于浏览模型。 此选项仅对表可用。 此选项仅对表可用。 - **设为不可见** 将对象标记为在客户端工具中不显示。 该表仍是模型的一部分,但会对报表作者隐藏。 也可以使用快捷键 **Ctrl+I** 隐藏对象。 - **在透视中显示**: + 控制该表是否包含在一个或多个透视中。 **在透视中显示**: 控制该表是否包含在一个或多个透视中。 透视会限制最终用户在 Power BI 等工具中可见的内容。 -- **批量重命名**:选择多个对象时,你可以通过字符串替换或正则表达式批量重命名这些对象。 批量重命名的快捷键为 **F2**。 +- **批量重命名**:选择多个对象时,你可以通过字符串替换或正则表达式批量重命名这些对象。 批量重命名的快捷键为 **F2**。 批量重命名的快捷键为 **F2**。 - **批量重命名子对象...**: - 使用正则表达式或字符串替换规则,对表或显示文件夹下的所有子对象进行批量重命名。 也可通过快捷键 **Shift+F2** 访问。 + 使用正则表达式或字符串替换规则,对表或显示文件夹下的所有子对象进行批量重命名。 也可通过快捷键 **Shift+F2** 访问。 也可通过快捷键 **Shift+F2** 访问。 - **复制**: - 创建所选表的副本,包括其所有列、度量值和分区。 TOM Explorer 中的所有其他对象也都有此功能。 + 创建所选表的副本,包括其所有列、度量值和分区。 TOM Explorer 中的所有其他对象也都有此功能。 TOM Explorer 中的所有其他对象也都有此功能。 - **标记为日期表格...**: - 将该表标记为日期表格,以启用时间智能功能。 要求该表包含有效的日期列。 + 将该表标记为日期表格,以启用时间智能功能。 要求该表包含有效的日期列。 要求该表包含有效的日期列。 - **显示依赖项**: - 可视化所选表与其他模型对象之间的依赖关系。 也可使用快捷键 **Shift+F12** 访问。 + 可视化所选表与其他模型对象之间的依赖关系。 也可使用快捷键 **Shift+F12** 访问。 也可使用快捷键 **Shift+F12** 访问。 - **导出脚本**: 将所选对象导出为 TMSL 或 TMDL 脚本,以便用于部署或源代码管理。 - **宏菜单**: - 可将宏放入文件夹中,并对所选对象运行。 在上面的示例中,用户有一个名为“建模和分析”的文件夹,用于存放表对象的宏脚本。 + 可将宏放入文件夹中,并对所选对象运行。 在上面的示例中,用户有一个名为“建模和分析”的文件夹,用于存放表对象的宏脚本。 在上面的示例中,用户有一个名为“建模和分析”的文件夹,用于存放表对象的宏脚本。 - **剪切 / 复制 / 粘贴 / 删除** - 常规剪贴板操作。 可用于移动、复制或删除模型对象。 + 常规剪贴板操作。 可用于移动、复制或删除模型对象。 可用于移动、复制或删除模型对象。 - **属性** 打开所选对象的“属性”窗格。 快捷键:**Alt+Enter**。 用于查看和编辑元数据、表达式、格式和可见性设置。 @@ -90,52 +91,64 @@ TOM Explorer 由两个主要区域组成:第一部分是数据模型对象; TOM Explorer 允许切换显示有关数据模型对象的额外信息列。 可通过快捷键 **Ctrl+7** 实现。 这些额外信息在属性窗口中也能查看,但在这里可以快速查看对象类型、格式字符串、数据类型、表达式和说明。 +![TOM Explorer 显示/隐藏列](~/content/assets/images/user-interface/TOMExplorerInfoColumns.png) 可通过快捷键 **Ctrl+7** 实现。 +这些额外信息在属性窗口中也能查看,但在这里可以快速查看对象类型、格式字符串、数据类型、表达式和说明。 ![TOM Explorer 显示/隐藏列](~/content/assets/images/user-interface/TOMExplorerInfoColumns.png) ## TOM Explorer 工具栏 工具栏可让你显示或隐藏不同类型的对象,切换透视和语言,并在 Data model 中搜索特定对象。 ![TOM Explorer 工具条](~/content/assets/images/user-interface/TOMExplorerToolbar.png) +![TOM Explorer 工具条](~/content/assets/images/user-interface/TOMExplorerToolbar.png) 1. **显示/隐藏度量值** 切换表中度量值的可见性。 **快捷键:** **Ctrl+1** + **快捷键:** **Ctrl+1** 2. **显示/隐藏列** 切换表内列的可见性。 **快捷键:** **Ctrl+2** + **快捷键:** **Ctrl+2** 3. **显示/隐藏层级结构** 切换 TOM Explorer 中层级结构是否可见。 **快捷键:** **Ctrl+3** + **快捷键:** **Ctrl+3** 4. **显示/隐藏分区** 控制表是否显示分区。 **快捷键:** **Ctrl+4** + **快捷键:** **Ctrl+4** 5. **显示/隐藏日历** 控制日历是否可见。 **快捷键:** **Ctrl+8** + **快捷键:** **Ctrl+8** 6. **显示/隐藏显示文件夹** 启用或禁用表内按文件夹组织的显示方式。 **快捷键:** **Ctrl+5** + **快捷键:** **Ctrl+5** 7. **按命名空间对用户自定义函数分组** 启用后,DAX 用户自定义函数会按 [命名空间](xref:udfs#namespaces) 分层分组显示,而不是以扁平列表显示。 8. **显示/隐藏表格组** - 切换 TOM Explorer 树中表格组的可见性。 无需离开资源管理器,即可快速访问 **工具 > 偏好** 中的相同设置。 + 切换 TOM Explorer 树中表格组的可见性。 无需离开资源管理器,即可快速访问 **工具 > 偏好** 中的相同设置。 无需离开资源管理器,即可快速访问 **工具 > 偏好** 中的相同设置。 9. **显示/隐藏隐藏对象** 切换是否显示隐藏对象。 **快捷键:** **Ctrl+6** + **快捷键:** **Ctrl+6** 10. **显示/隐藏信息列** 显示或隐藏元数据列,例如数据类型或对象状态。 **快捷键:** **Ctrl+7** + **快捷键:** **Ctrl+7** 11. **透视选择器** + 下拉列表,用于选择特定透视。 **透视选择器** 下拉列表,用于选择特定透视。 TOM Explorer 中仅显示所选透视中的对象。 12. **语言选择器** @@ -145,4 +158,5 @@ TOM Explorer 允许切换显示有关数据模型对象的额外信息列。 可 将 TOM Explorer 树视图中的所有节点全部折叠。 14. **搜索栏** + 在 TOM Explorer 中提供实时筛选和导航。 **搜索栏** 在 TOM Explorer 中提供实时筛选和导航。 输入即可搜索所有可见的模型对象。