我想使用 PowerQuery 通过检查另一个包含主管姓名列表的查询来检查某个单元格是否包含主管的姓名,如果主管姓名缺失,则在新列中输入“缺失”。
我的数据集非常大,但我包含了一个小样本来说明我希望最终结果如何出现。
我想使用 PowerQuery 通过检查另一个包含主管姓名列表的查询来检查某个单元格是否包含主管的姓名,如果主管姓名缺失,则在新列中输入“缺失”。
我的数据集非常大,但我包含了一个小样本来说明我希望最终结果如何出现。
我有两个表需要使用 ID 列进行合并。它们都有重复的值,但我只需要最大值。因此,我按降序对表进行了排序并删除了重复项。但是,合并表后,合并后的表没有收到最大值,而是返回了排序前的第一个值。
表格如下:
ID | 值1 |
---|---|
一个 | 8.7 |
一个 | 10.9 |
b | 5.2 |
丙 | 9.0 |
ID | 值2 |
---|---|
一个 | 50 |
b | 60 |
丙 | 80 |
我对表格进行了排序并删除了重复项:
ID | 值1 |
---|---|
一个 | 10.9 |
b | 5.2 |
丙 | 9.0 |
ID | 值2 |
---|---|
一个 | 50 |
b | 60 |
丙 | 80 |
合并后,我得到以下信息:
ID | 值1 | 值2 |
---|---|---|
一个 | 8.7 | 50 |
b | 5.2 | 60 |
丙 | 9.0 | 80 |
但我想要的是这个:
ID | 值1 | 值2 |
---|---|---|
一个 | 10.9 | 50 |
b | 5.2 | 60 |
丙 | 9.0 | 80 |
我的代码如下所示:
#first table to be merged
let
source = Table.Combine({table1, table2}),
sorted = Table.Sort(source,{{"value1", Order.Descending}}),
remove_duplicates = Table.Distinct(sorted, {"ID"}),
table1_final = Table.Sort(remove_duplicates ,{{"ID", Order.Ascending}})
#second table to be merged
source2 = Table.Combine({table1, table2}),
sorted2 = Table.Sort(source2,{{"value2", Order.Descending}}),
remove_duplicates2 = Table.Distinct(sorted2, {"ID"}),
table2_final = Table.Sort(remove_duplicates ,{{"ID", Order.Ascending}})
#merged table
source3 = Table.NestedJoin(table1_final, {"ID"}, table2_final , {"ID"}, "table1_final ", JoinKind.FullOuter),
expanded = Table.ExpandTableColumn(source3 , "table2_final", {"value2"}, {"value2"})
in
expanded
我正在尝试重用 Power 查询来从另一个 Power 查询中提取信息。似乎有多种方法可以做到这一点。我从这个问题中看到了两种方法。我也在我自己的电子表格中看到了它。在我的电子表格中,我显然有:
Source = Excel.CurrentWorkbook(){[Name="Project_List"]}[Content],
在其他查询中我有:
Source = Project_List,
这种方法或另一种方法有什么优点吗?
最终我希望实现的是通过网络查询一次数据,将其转储到表 A 中,然后在后续查询中继续引用表 A,而不是通过网络提取数据进行后续查询。
我注意到,当我使用构建我最近的查询时Source = Project_List,
,在后续查询的每个步骤中,它加载实际上重新加载了 Project_list 查询加载的所有文件。
这只是构建过程的一部分吗?或者,如果我有一个通过网络加载的查询 A,并且有 5 个后续查询引用查询 A,那么 Power Query / Excel 会通过网络读取 1 次还是 5 次?
在 Power Query 中引用现有查询并减少跨网络数据提取的正确方法是什么?
如何删除列中字符串的最后 X 个字符?
我正在尝试生成一个用户友好的文件名列表,用于生成 Power Query 表。但是,在阅读 m 文本命令列表时,我没有看到一种直接的方法来执行以下等效操作:
Text.left(#"previous table"{"Filename'}, Text.length(#"previous table"{"Filename'} - 11)
(基于我对 Excel 的了解)。
由于我看到我的文件名长度可变,但我知道我一直想消除最后 11 个字符,所以我想也许我可以使用Text.reverse(#"previous table"{"Filename'})
然后在位置 11 处进行拆分,只保留拆分的右侧,然后再进行一次反转。但是我还不太了解 m 语法,当我尝试执行此操作时,我得到的只是一个错误Text.Reverse
我的m代码:
let
Source = Forecasting,
#"Removed Other Columns" = Table.SelectColumns(Source,{"Source.Name"}),
#"Removed Duplicates" = Table.Distinct(#"Removed Other Columns"),
#"Renamed Columns" = Table.RenameColumns(#"Removed Duplicates",{{"Source.Name", "Submitted Reports"}}),
Custom1 = Text.Reverse(#"Renamed Columns"{{"Submitted Reports"}})
in
Custom1
当我们进入重命名列步骤时的示例数据:
Submitted Reports
Bug Bunny 241008923443.xlsm
Daffy Duck 241130234521.xlsm
Wyle E. Cayote 240909124312.xlsm
期望结果:
Submitted Reports
Bug Bunny 241008
Daffy Duck 241130
Wyle E. Cayote 240909
首先,我对 PowerQuery 还很陌生...我有类似下面的 xml:
<root>
<entries>
<entry>
<otherData>
<id>1</id>
</otherData>
<images>
<image>
<url>http://example.com/1.img</url>
</image>
<image>
<url>http://example.com/1.img</url>
</image>
<image>
<url>http://example.com/1.img</url>
</image>
</images>
</entry>
<entry>
<otherData>
<id>2</id>
</otherData>
<images>
<image>
<url>http://example.com/4.img</url>
</image>
<image>
<url>http://example.com/5.img</url>
</image>
</images>
</entry>
</entries>
<root>
我想要的是一张由id
和 基于 的动态列数组成的表/images/image/url
。我不知道是否可以动态添加列并以某种方式命名它们(带有数字后缀img1
... imgN
)
我正在编写 Power Query M 脚本,根据某些预定义规则和列名中的关键字重命名列。数据来自不同的数据集,我需要在所有数据集中标准化列名。
我已尝试过:这是我用于重命名的代码的简化版本:
// Function to rename columns
let
RenameColumns = (xtable as table) as table =>
let
// Get current column names
names = Table.ColumnNames(xtable),
// Transform column names based on the conditions
transformedNames = List.Transform(names, each
let colName = _,
// Exact match renaming
newName = if colName = "Org Level 2" then "Cost Centers"
else if colName = "Org Level 3" then "Work Assignment Cost Center"
// Keyword-based renaming for Employment Status
else if Text.Contains(colName, "Active") or
Text.Contains(colName, "Terminated") or
Text.Contains(colName, "Leave of absence")
then "Employment Status"
// Keyword-based renaming for Full/Part Time
else if Text.Contains(colName, "Full-Time") or
Text.Contains(colName, "Full Time") or
Text.Contains(colName, "Part Time")
then "Full/Part Time"
// Keep original name if no conditions are met
else colName
in newName
),
// Rename columns using the transformed names
renamedTable = Table.RenameColumns(xtable, List.Zip({names, transformedNames}))
in
renamedTable
in
RenameColumns
实际情况:精确匹配重命名按预期工作。但是,包含特定关键字(如“活跃”或“全职”)的列未按预期一致重命名。基于关键字的重命名似乎失败或不正确应用。
如何根据 Power Query M 中名称中的关键字正确重命名列?有没有更好的方法使用 Table.TransformColumnNames 或 Table.RenameColumns 来处理条件重命名?
try
我正在编写 Power Query M 脚本,以便根据特定条件重命名表中的列。但是,当我尝试在函数内使用表达式时,遇到了“需要标记文字”错误List.MatchesAny
。以下是我的代码的相关部分:
RenameColumnsFunction = (table as table) as table =>
let ColumnNames = Table.ColumnNames(table),
//Apply transformation logic to each column name
RenamedColumns = List.Transform(ColumnNames, (colName) =>
// If any column values have a length of 4 and are numeric, rename the column to "Org level 2 Code"
if
List.MatchesAny(Table.Column(table, colName), each try
Text.Length(Text.From(_)) = 4 and **try **
Number.FromText(Text.From(_)) <> null otherwise false)
then
{colName, "Org Level 2 Code"}
// If the column name matches one of the predefined names, rename it to "Headcount Label"
else if
List.Contains({"ACCTG", "ADMIN", "ASM", "AWE", "CFO", "CROCOL", "CUSTSRV", "DEV", "ENGIN","FIN","FLDSP", "HOM", "HR","IT", "MERCH", "PROSVC"}, colName)
then
{colName, "Headcount Label"}
else {colName, colName} // Keep the original name if no match
),
RenamedTable = Table.RenameColumns(table, RenamedColumns, MissingField.Ignore)
in RenamedTable,
// Step 4: Apply the renaming function to each table query
ApplyRename = Table.AddColumn(FilteredQueries, "Transformed Data", each RenameColumnsFunction([Content])),
// Step 5: Expand the renamed tables (ensure there's data to extract)
RenamedTables = Table.ExpandTableColumn(ApplyRename, "Transformed Data", Table.ColumnNames(ApplyRename[Content]{0})),
// Step 6: Combine all queries into one table if needed
CombinedData = Table.Combine(RenamedTables[TransformedData])
in
CombinedData
我将时间日期中的时间和分钟分成文本;现在我想将其转换回数字(分钟需要用零填充)。
Filtertime = Number.From(
Text.From(Time.Hour([Timestamp_Time])) &
Text.PadStart(Text.From(Time.Minute([Timestamp_Time])), 2, "0" ))
我想要转换的文本列如下:
时间戳时间 |
---|
下午 2:00:00 |
下午 2:01:00 |
下午 2:02:00 |
转换后的列应为:1400、1401 和 1402。作为参考,我尝试遵循以下链接中的解决方案:https://community.fabric.microsoft.com/t5/Desktop/Slider-Slicer-that-Includes-Time-Not-just-Date/td-p/2572000
目前我收到以下错误:“Expression.Error:有一个未知的标识符。您是否在‘each’表达式之外使用了_[field]的[field]简写?”