【问题标题】:Replace multiple column values in Power Query / Power BI / M code using `List.Zip`使用“List.Zip”替换 Power Query / Power BI / M 代码中的多个列值
【发布时间】: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 个月。所以他们的时期文本会改变。因此需要动态获取它们。

【问题讨论】:

  • 大多数人只是合并到一个日期表中

标签: powerbi powerquery


【解决方案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} 处进行索引。如果速度有问题,你甚至可以缓冲它。
猜你喜欢
  • 1970-01-01
  • 2022-12-11
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多