问题描述
我遇到了使用 Microsoft Power BI 的情况。我有一个源表(称为 Couriers),其中包含任何给定的 Courier 和 Country 组合的权重范围(MinWeight 到 MaxWeight)以及运费值。
我需要在 Power BI 中开发一个新表(称为 Couriers_FlattenedData),其中,我为 MinWeight 和 MaxWeight 之间的每个值获取一行。
例如,如果 FedEx Australia 的最小重量到最大重量分别为 0 和 5,则我需要从 1 到 5 的 5 行。
我需要新 Couriers_FlattenedData 表中的这些 4 列 - Courier、Country、Weight、Freight。权重列根据源表中的范围转换为行。
我正在尝试在 DAX 以及使用后端 Power Query 编辑器(使用 M 语言)中派生新表。我想要两种方法来开发这个新表。
Couriers_FlattenedData = SELECTCOLUMNS (
GENERATE (
'Couriers',GENERATESERIES (
CALculaTE(disTINCT(Couriers[MinWeight])+1),CALculaTE(disTINCT(Couriers[MaxWeight]))
)
),"Courier",Couriers[Courier],"Country",Couriers[Country],"Freight",Couriers[Freight]
)
有人可以更正上面缺少权重列的 DAX 表达式吗?或者甚至提供使用变量的解决方案?
以及使用 Power BI 的 Power Query 编辑器的分步解决方案?
解决方法
DAX 解决方案:
Couriers_FlattenedData = SELECTCOLUMNS (
GENERATE (
Couriers,GENERATESERIES(Couriers[MinWeight] + 1,Couriers[MaxWeight])
),"Courier",Couriers[Courier],"Country",Couriers[Country],"Weight",[Value],"Freight",Couriers[Freight]
)
查询编辑器解决方案:
复制 Couriers 表(在查询编辑器中),然后转到查询编辑器的高级编辑器,然后粘贴:
let
Source = Couriers,WeightList = Table.CombineColumns(Source,{"MinWeight","MaxWeight"},each {_{0}+1.._{1}},"Weight"),ExpandWeightList = Table.ExpandListColumn(WeightList,ChangedType = Table.TransformColumnTypes(ExpandWeightList,{{"Weight",Int64.Type}})
in
ChangedType
将表重命名为 Couriers_FlattenedData