首页 > 解决方案 > 如何调用自定义函数以应用于具有不同列范围的查询文件?

问题描述

我正在按照本教程从文件夹中导入文件并清理它们。但是,对于该示例,每个 .xls 文件都有相同数量的列。就我而言,我有这个(清洁后):

| Col1 | Col2 |
|------|------|
| 1    | 3    |
| 4    | 2    |

+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
|    3 |    4 |    8 |
|    4 |    7 |    1 |
+------+------+------+

我想得到这个结果:

+------+------+------+
| Col1 | Col2 | Col3 |
+------+------+------+
|    1 |    3 |    - |
|    4 |    2 |    - |
|    3 |    4 |    8 |
|    4 |    7 |    1 |
+------+------+------+

我的自定义函数看起来像这样(用 etc 替换列,因为它们差不多有两千个)。我想我必须删除这两个#"Changed Type"步骤,但是如何删除我不想要的行?

(ExcelFile) =>
let
Source = Excel.Workbook(ExcelFile, null, true),
#"CMG Barras pesos_Sheet" = Source{[Item="CMG Barras pesos",Kind="Sheet"]}[Data],
#"Changed Type" = Table.TransformColumnTypes(#"CMG Barras pesos_Sheet",{"Column1", type any}, etc)
#"Removed Top Rows" = Table.Skip(#"Changed Type",8),
#"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
#"Changed Type1" = Table.TransformColumnTypes(#"Promoted Headers",{{"Barra", type any}, etc),
#"Removed Top Rows1" = Table.Skip(#"Changed Type1",1)
in
#"Removed Top Rows1"

标签: excelpowerbipowerquery

解决方案


这些"#Changed Type"步骤是函数中唯一单独引用列的步骤。其他人只是删除(跳过)表的几行并将一行提升为列名。

有一些方法可以处理可变数量的列,但在你的情况下,我认为你不需要做任何花哨的事情。只需采取这些步骤:

    (ExcelFile) =>
let
    Source = Excel.Workbook(ExcelFile, null, true),
    #"CMG Barras pesos_Sheet" = Source{[Item="CMG Barras pesos",Kind="Sheet"]}[Data],
    #"Removed Top Rows" = Table.Skip(#"CMG Barras pesos_Sheet",8),
    #"Promoted Headers" = Table.PromoteHeaders(#"Removed Top Rows", [PromoteAllScalars=true]),
    #"Removed Top Rows1" = Table.Skip(#"Promoted Headers",1)
in
    #"Removed Top Rows1"

推荐阅读