我正在尝试用真/假值填充列。 如果字段具有与列标题匹配的值,则为 true,否则为 false 或 null。
我需要循环遍历字段中的值:例如POWERAPPS_VIRAL、POWERAPPS_INDIVIDUAL_USER、SPE_F5_SECCOMP、SPE_F1、POWER_BI_STANDARD 并“勾选”标题与说明中给定值相同的每一列。注意:这些值没有排序,因此我必须解析该字段而不仅仅是扩展它。
到目前为止,我只能返回笛卡尔积,无法唯一解析描述字段。
这是我得到的输出示例,除了许可证详细信息之外的所有行值都以空值开始。 (注:大约有 50 个可能的值,我没有将它们全部包含在内):
许可证详情 | DYN365_BUSCENTRAL_ESSENTIAL_ISVEMB | DYN365_ENTERPRISE_CUSTOMER_SERVICE | DYN365_ENTERPRISE_FIELD_SERVICE | DYN365_财经 | DYN365_HUMAN_RESOURCES_ATTACH | DYN365_PROJECT_OPERATIONS_ATTACH | DYN365_单片机 | DYN365_SCM_ATTACH | Dynamics_365_Field_Service_Enterprise_viral_Trial |
---|---|---|---|---|---|---|---|---|---|
D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE、DYN365_SCM_ATTACH | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_SCM_ATTACH, | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE、DYN365_SCM_ATTACH | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] | [列表] |
我成功完成一半工作的唯一代码如下(它产生上面的结果,其中列表填充了所有列值):
let
Source = ExpandedUserTable,
_Lookups = List.Buffer(Table.ColumnNames(LicenceLookUpFinal)),
// LicenceLookUpFinal is the result of scanning a file to produce a row for every unique Licence type in Licence Description
#"Replaced Value" = Table.ReplaceValue(
Source,
null,
_Lookups,
Replacer.ReplaceValue, _Lookups
)
in
#"Replaced Value"
(请原谅特殊的缩进,但其他任何事情都会让我的注意力缺陷多动症发作)这显示了上面的结果。
我想要达到的是这个(示例中并未出现所有可能的列):
许可证详情 | DYN365_BUSCENTRAL_ESSENTIAL_ISVEMB | DYN365_ENTERPRISE_CUSTOMER_SERVICE | DYN365_ENTERPRISE_FIELD_SERVICE | DYN365_财经 | DYN365_HUMAN_RESOURCES_ATTACH | DYN365_PROJECT_OPERATIONS_ATTACH | DYN365_单片机 | DYN365_SCM_ATTACH | Dynamics_365_Field_Service_Enterprise_viral_Trial |
---|---|---|---|---|---|---|---|---|---|
D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE、DYN365_SCM_ATTACH | 空 | 空 | 空 | 是 | 空 | 空 | 空 | 是 | 空 |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_SCM_ATTACH, | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE、DYN365_SCM_ATTACH | 空 | 空 | 空 | 是 | 空 | 空 | 空 | 是 | 空 |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 | 空 |
D365_CUSTOMER_SERVICE_ENT_ATTACH、D365_FIELD_SERVICE_ATTACH、DYN365_FINANCE | 空 | 空 | 空 | 是 | 空 | 空 | 空 | 空 | 空 |
我尝试在语句中引入“each”,但是在删除任何语法错误后,我得到了一组令人困惑的运行时错误代码。例如:“我们无法应用 List 类型的索引”,或者我向函数提供了太多参数。
经过几个小时的尝试解决后,我想知道: a) 这可能吗? b) 我是否从正确的方向处理这个问题(我是 Powerquery 的自学早中级 - 所以这绝对是一个选择)
如果是这种情况,这段代码应该会产生您想要的输出:
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"License Details", type text}}),
//create unique list of Licenses
#"License List" =
List.Distinct(
List.Transform(
List.RemoveItems(
List.Combine(
List.Transform(#"Changed Type"[License Details],
each Text.Split(_,","))
),
{""}), each Text.Trim(_))),
//add a column for each License type
#"Add Columns" = List.Accumulate(
#"License List",
#"Changed Type",
(s,c)=> Table.AddColumn(s, c,each null, type nullable text)),
//Add ticks to appropriate column if License exists in the first column
#"Add Ticks" = List.Accumulate(
List.Numbers(0, List.Count(#"License List")),
#"Add Columns",
(s,c)=>
Table.ReplaceValue(
s,
each [License Details],
Character.FromNumber(Expression.Evaluate("0x2714")),
(x,y,z) as nullable text=> if List.Contains(Text.Split(Text.Remove(y," ") ,","),#"License List"{c}) then z else x ,
{#"License List"{c}})
)
in
#"Add Ticks"