使用“List.Zip”替换 Power Query / Power BI / M 代码中的多个列值
Posted
技术标签:
【中文标题】使用“List.Zip”替换 Power Query / Power BI / M 代码中的多个列值【英文标题】:Replace multiple column values in Power Query / Power BI / M code using `List.Zip` 【发布时间】:2021-07-26 15:09:06 【问题描述】:我有一个 Power Query 表,其中有一列值介于 1 和 12 之间。
我想用一组固定值替换数字,如下表所示。
Period Number Period Text
1 Jan
2 Feb
3 Mar
4 Apr
5 May
6 Jun
7 Jul
8 Aug
9 Sep
10 Oct
11 Nov
12 Dec
我看到了一个使用List.Zip
的解决方案,它可以“压缩”这些值,如下所示:
periodNumber = Table.Column(#"Prev Step", "Period Number"),
periodText = Table.Column(#"Prev Step", "Period Text"),
#"periodRename" = List.Zip(periodNumber, periodText),
List.Zip
看起来像这样。每条记录内有两个元素。
然后使用它们通过替换为压缩值来重命名列,如下所示:
= Table.RenameColumns(#"Another Prev Step", #"periodRename")
除了Table.RenameColumns
,还有什么函数可以利用这个结构?也许某种形式的Table.ReplaceValue
?
我的表格有一列有 1000 行,并且按如下顺序排列。
Period Number
1
2
3
4
5
6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
1
2
etc
我想用它们的句号文本替换所有这些句号。
我喜欢使用List.Zip
的想法,因为它提供了一个动态的周期列表,因为有时数据不会包含完整的 12 个周期,例如只有 3 个周期。期间也可以是季度,例如 periodNumber = [1, 2, 3, 4] 和 periodText = [Q1, Q2, Q3, Q4] 或年份。
是否有其他方法可以使用List.Zip
替换表值向下一列而不是跨表列?
注意:期间编号与特定月份不对应。开始可以是任何一个月,为期 12 个月。所以他们的时期文本会改变。因此需要动态获取它们。
【问题讨论】:
大多数人只是合并到一个日期表中 【参考方案1】:试试:
monthName = Table.TransformColumns(#"Previous Step","Period Number", each Date.MonthName(#date(2020, _,1)))
转换前
转换后
编辑:使用变换的其他方式
months = "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",
...
translate = Table.TransformColumns(#"Previous Table Step","Period Number", each months_-1)
使用您的 List.Zip
如果映射是随机的,则很有用
translationList = List.Zip(1,2,3,4,5,6,7,8,9,10,11,12,"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"),
...
translate = Table.TransformColumns(typeIt,"Period Number", each
List.Range(List.Combine(translationList),
List.PositionOf(List.Combine(translationList),_)+1,1)0)
【讨论】:
我应该将此添加到我的问题中。期间编号与特定月份不对应。开始可以是任何一个月,为期 12 个月。所以他们的时期文本会改变。因此需要动态获取它们。 @curtisp 您仍然可以使用列转换方法。您只需将数字映射到它所代表的任何月份。如何做到这一点取决于数字和月份之间的关系。最复杂的情况是关系是随机的。但如果它是连续的,那么使用这种技术会非常简单。 期间编号和期间文本的关系在List.Zip
中。所以我正在寻找访问它的方法来填充而不是跨列。它将是动态的。 List.Zip
记录计数将是动态的,文本值也是如此。
@curtisp 我已经编辑了我的问题,以演示获得所需结果的其他一些方法。包括使用您的List.Zip
,如果映射是随机的,这将很方便。
@curtisp 很高兴它对你有用。我建议您将列表设置为List.Combine(List.Zip(...)
,而不是在转换操作中多次执行List.Combine
。请注意,returnValue
始终在 lookupValue lookupValue postion+1
处进行索引。如果速度有问题,你甚至可以缓冲它。以上是关于使用“List.Zip”替换 Power Query / Power BI / M 代码中的多个列值的主要内容,如果未能解决你的问题,请参考以下文章