PowerBI - 处理具有混合数据包的列 - 级别 3

问题描述 投票:0回答:2

这是我的上一个问题的另一个后续问题 - 另一个难度已经出现,我不知道如何处理它。

我在原始源列中发现了另一种类型的数据:几个 JSON 数组,以逗号分隔 - 并且为了让事情变得更“有趣”,逗号分隔的字符串实际上在其中包含逗号......

示例:

DataColumn
-----------------------------
["German","English","French"]
["A","B","C"],["A1","B1","C1"],["A2","B2","C2"]
["A1, A2, A3","B1, B2, B3","C1, C2"],["D1, D2","E1","F1, F2, F3, F4"],["G1,G2,G3","H1, H2, H3","J1, J2"]
0

我想“转换”这个混合数据包,以便

  • 如果它确实是一个 JSON 数组,我想获取第一个值(总是)
    • 如果字符串中包含逗号分隔的值 - 获取整个字符串 - 用分号分隔 n 个可能的字符串(可能包含逗号)
  • 如果它是 JSON 数组(逗号分隔)的列表,我想获取每个数组的第一个,并以逗号分隔显示它们
  • 如果不是JSON数组,我只想保持数据不变

所以最后,我想要这个:

DataColumn
----------
German
A, A1, A2
A1, A2, A3;D1, D2;G1,G2,G3
0

有什么想法吗?我尝试使用 Davide Bacci 对上一个问题的回答 - 但我仍然无法理解 DAX / PowerQuery 和 PowerBI 函数和东西,所以我无法从之前的答案中调整这个解决方案来满足这个额外的要求......

powerbi dax powerquery powerbi-desktop m
2个回答
0
投票

if Text.Contains ([Answer],"],[") then
let a = Text.Split([Answer], "["""),
b = List.RemoveFirstN(a, 1), 
c = List.Transform(b, each Text.BeforeDelimiter( _, """")),
d = List.MatchesAny(c, each Text.Contains( _ , "," )), 
e = if d =false then Text.Combine(c,",") else  Text.Combine(c, ";")

in e
else try Json.Document([Answer]){0} otherwise [Answer]

0
投票

这个有用吗? 将“[”替换为“{”,将“]”替换为“}”,然后将该列变成列表的列表。 然后检查列表计数。如果 count = 1,则尝试获取列表的第一个元素。如果失败则取第一个元素。 如果 count > 1,则取每个列表的第一个元素,然后用文本组合它。

let 
L = Expression.Evaluate("{" & [DataColumn] & "}"),
ct = List.Count(L)
in 
if ct = 1 then try L{0}{0} otherwise L{0} else Text.Combine(List.Transform(L, each _{0}),";")
© www.soinside.com 2019 - 2024. All rights reserved.