Microsoft is giving away 50,000 FREE Microsoft Certification exam vouchers. Get Fabric certified for FREE! Learn more
场景:在很多情况下,我们导入的表模型无法直接在 PowerBI Desktop 中可视化,因为多种属性是以行的形式添加到表记录中的。因此我们首先需要在 Power Query 中转换表模型。
最初导入的表格模型如下:
基本思想:
在 PowerBI 中,某个属性的字段特征以列的形式展示,添加的每个行值的数据类型都是相同的。
详细步骤:
1. 分析初始表中的行值属性,并在 Power Query 中分离相同类型的值
2. 将字段更改为正确的数据类型:
3. 删除与属性中的分组行相对应的"合计"值,因为列字段可以在 PowerBI Desktop 中自动聚合,可以得到:
函数:“Text.Contains”
其功能是 检测文本文本是否包含文本子字符串。如果找到文本,则返回 真。上述公式表示删除包含“TOTAL”的行。
4. 使用“添加条件列”创建一个新列来分隔属性字段
5. 获取第一列我们需要的结果的属性分组,并使用向下填充函数填充同一组下的行值。最后删除原始表中的相应行,可以得到如下:
函数:“Table.FillUp”
它的功能是从指定的表中返回一个表,其中下一个单元格的值传播到指定列中的上方null值单元格。使用上述公式中的选定字段填充空白行。
6. 相同的操作逻辑,找出结果图中第二列字段的分组,使用“添加条件列”创建新列:
7. 使用“填充”功能并删除原始表格中的相应行,您将看到如下:
8. 至此,我们基本获得了理想的结果。如果我们以后需要过滤或计算 “销售部门” 字段,我们可以使用 “Extract” 函数来过滤掉该值的数字部分。将文本类型转换为数字类型,您将看到如下:
函数:“Table.TransformColumns
其功能是通过对参数 transformOperations 中指定的列应用转换操作,从输入表中返回一个表。如果该列不存在,则除非可选参数 defaultTransformation 指定了替代项,否则将引发异常。保留上述公式中每行文本中的最后三个值。
9. 最后,我们成功获得了一个满足 PowerBI Desktop 中可视化运算和计算的表模型。您将看到如下:
通过以上步骤,我们可以在 Power Query 中对导入的不规则数据模型进行一系列修改,最终构建一个数据模型,用于后续在 PowerBI Desktop 上的可视化操作或计算。希望这篇文章能帮助到这里有类似问题的每个人。
相关操作的代码如下:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjE2AAJDBV2Fp61rnvbvUDBU0lFSitWJVnq2aaeCqYGBwrP1q5/2tgNFDYEK4TLmpkgyRjCZkPySxByFl1Mank5Z97J5xcvpKxSAhgNVGCPrBRmE0GyKy1RTfIYa4XWQMZIEih+MkCSMTFE9h9syY6ACM5gC/xBHHwVYsCEFmglMBUTOCBGkRjiDFOgE7M4xxuccE1DgmOLwoSHOgDbCZ6YpsqVIXkTzhgXI2lgA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [描述 = _t, 值 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"值", Int64.Type}, {"描述", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each not Text.Contains([描述], "TOTAL")),
#"Added Conditional Column" = Table.AddColumn(#"Filtered Rows", "客户", each if Text.Contains([描述], "公司") then [描述] else null),
#"Filled Down" = Table.FillDown(#"Added Conditional Column",{"客户"}),
#"Filtered Rows2" = Table.SelectRows(#"Filled Down", each not Text.Contains([描述], "4300001 - 公司 1")),
#"Filtered Rows3" = Table.SelectRows(#"Filtered Rows2", each not Text.Contains([描述], "4300002 - 公司 2")),
#"Added Conditional Column1" = Table.AddColumn(#"Filtered Rows3", "销售部门", each if Text.Contains([描述], "销售部门") then [描述] else null),
#"Filled Up" = Table.FillUp(#"Added Conditional Column1",{"销售部门"}),
#"Filtered Rows1" = Table.SelectRows(#"Filled Up", each not Text.Contains([描述], "销售部门")),
#"Extracted Last Characters" = Table.TransformColumns(#"Filtered Rows1", {{"销售部门", each Text.End(_, 3), type text}}),
#"Reordered Columns" = Table.ReorderColumns(#"Extracted Last Characters",{"描述", "客户", "销售部门", "值"})
in
#"Reordered Columns"
原作者:Henry Kong
审核: Ula Huang, Kerry Wang
翻译:Tianyi Chang
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.