Power BI 必學技術|Power Query 是什麼?|台灣本地專家解說
目录
概述
在本篇文章中,我们将介绍如何使用 Power Query 在 Power BI 中对数据进行转换和处理。Power Query 是一种非常强大的工具,可以帮助我们从不同的数据源中提取数据,并对数据进行清理、转换和整理,以便更好地支持业务分析和决策。通过使用 Power Query,我们可以提高数据分析的质量和准确性,并减少数据预处理的工作量。
创建查询
首先,我们需要创建一个新的查询来加载我们的数据集。在 Power BI 的主界面上,点击"获取数据"按钮,然后选择"空白查询"选项。将新查询重命名为"数据"。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"})
in
RemoveColumns
在上面的代码中,我们使用了 Power Query 的 M 语言来定义查询。首先,我们指定了数据集的路径(Source),然后使用 Csv.Document
函数来加载 CSV 文件的内容。接下来,我们使用 Table.PromoteHeaders
函数将第一行作为列名,然后使用 Table.RemoveColumns
函数删除了第六列。
删除列
为了进一步清洗数据,我们可以删除不需要的列。在本例中,我们删除了第六列。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"})
in
RemoveColumns
提取头部和更改列名
为了使数据更易于理解,我们可以将第一行作为列名,并对列名进行重命名。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"}),
RenameColumns = Table.RenameColumns(RemoveColumns,{{"Survived", "是否幸存"}, {"Name", "姓名"}, {"Sex", "性别"}, {"Age", "年龄"}, {"Pclass", "船舱等级"}, {"Fare", "票价"}})
in
RenameColumns
在上面的代码中,我们使用了 Table.RenameColumns
函数来重命名列。
过滤行
有时候,我们可能需要过滤掉特定条件下的行。在本例中,我们过滤掉了年龄为"NA"和年龄小于等于5的行。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"}),
RenameColumns = Table.RenameColumns(RemoveColumns,{{"Survived", "是否幸存"}, {"Name", "姓名"}, {"Sex", "性别"}, {"Age", "年龄"}, {"Pclass", "船舱等级"}, {"Fare", "票价"}}),
FilterRows = Table.SelectRows(RenameColumns, each ([Age] <> "NA" and [Age] > 5))
in
FilterRows
在上面的代码中,我们使用了 Table.SelectRows
函数来根据条件过滤行。
更改数据类型
有时候,我们需要将某些列的数据类型进行更改,以便更好地进行分析和计算。在本例中,我们将年龄列的数据类型更改为数字类型,将乘客ID列的数据类型更改为整数。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"}),
RenameColumns = Table.RenameColumns(RemoveColumns,{{"Survived", "是否幸存"}, {"Name", "姓名"}, {"Sex", "性别"}, {"Age", "年龄"}, {"Pclass", "船舱等级"}, {"Fare", "票价"}}),
FilterRows = Table.SelectRows(RenameColumns, each ([Age] <> "NA" and [Age] > 5)),
ChangeTypes = Table.TransformColumnTypes(FilterRows,{{"Age", type number}, {"PassengerID", Int64.Type}})
in
ChangeTypes
在上面的代码中,我们使用了 Table.TransformColumnTypes
函数来更改列的数据类型。
替换值
有时候,我们需要将某些值替换为其他值。在本例中,我们将"Survived"列中的0替换为"否",将1替换为"是"。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"}),
RenameColumns = Table.RenameColumns(RemoveColumns,{{"Survived", "是否幸存"}, {"Name", "姓名"}, {"Sex", "性别"}, {"Age", "年龄"}, {"Pclass", "船舱等级"}, {"Fare", "票价"}}),
FilterRows = Table.SelectRows(RenameColumns, each ([Age] <> "NA" and [Age] > 5)),
ChangeTypes = Table.TransformColumnTypes(FilterRows,{{"Age", type number}, {"PassengerID", Int64.Type}}),
ReplaceValues = Table.ReplaceValue(ChangeTypes,0,"否",Replacer.ReplaceValue,{"是否幸存"}),
FinalTable = Table.ReplaceValue(ReplaceValues,1,"是",Replacer.ReplaceValue,{"是否幸存"})
in
FinalTable
在上面的代码中,我们使用了 Table.ReplaceValue
函数来替换特定列中的值。
计算平均值
有时候,我们需要计算某些列的平均值。在本例中,我们计算了女性乘客的平均年龄和男性乘客的平均年龄。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"}),
RenameColumns = Table.RenameColumns(RemoveColumns,{{"Survived", "是否幸存"}, {"Name", "姓名"}, {"Sex", "性别"}, {"Age", "年龄"}, {"Pclass", "船舱等级"}, {"Fare", "票价"}}),
FilterRows = Table.SelectRows(RenameColumns, each ([Age] <> "NA" and [Age] > 5)),
ChangeTypes = Table.TransformColumnTypes(FilterRows,{{"Age", type number}, {"PassengerID", Int64.Type}}),
ReplaceValues = Table.ReplaceValue(ChangeTypes,0,"否",Replacer.ReplaceValue,{"是否幸存"}),
FinalTable = Table.ReplaceValue(ReplaceValues,1,"是",Replacer.ReplaceValue,{"是否幸存"}),
AverageFemaleAge = List.Average(Table.Column(Table.SelectRows(FinalTable, each ([性别] = "女性")), "年龄")),
AverageMaleAge = List.Average(Table.Column(Table.SelectRows(FinalTable, each ([性别] = "男性")), "年龄"))
in
FinalTable
在上面的代码中,我们使用了 Table.SelectRows
函数来筛选出特定条件的行,并使用 List.Average
函数来计算平均值。
创建计算列
有时候,我们需要根据某些列的值计算新的列。在本例中,我们创建了一个"年龄差异"列,该列显示乘客的年龄与其性别的平均年龄之差,并将该值四舍五入到两位小数。
let
Source = "Titanic.csv",
Data = Csv.Document(File.Contents(Source),[Delimiter=",", Encoding=1252]),
PromoteHeaders = Table.PromoteHeaders(Data, [PromoteAllScalars=true]),
RemoveColumns = Table.RemoveColumns(PromoteHeaders,{"Column6"}),
RenameColumns = Table.RenameColumns(RemoveColumns,{{"Survived", "是否幸存"}, {"Name", "姓名"}, {"Sex", "性别"}, {"Age", "年龄"}, {"Pclass", "船舱等级"}, {"Fare", "票价"}}),
FilterRows = Table.SelectRows(RenameColumns, each ([Age] <> "NA" and [Age] > 5)),
ChangeTypes = Table.TransformColumnTypes(FilterRows,{{"Age", type number}, {"PassengerID", Int64.Type}}),
ReplaceValues = Table.ReplaceValue(ChangeTypes,0,"否",Replacer.ReplaceValue,{"是否幸存"}),
FinalTable = Table.ReplaceValue(ReplaceValues,1,"是",Replacer.ReplaceValue,{"是否幸存"}),
AverageFemaleAge = List.Average(Table.Column(Table.SelectRows(FinalTable, each ([性别] = "女性")), "年龄")),
AverageMaleAge = List.Average(Table.Column(Table.SelectRows(FinalTable, each ([性别] = "男性")), "年龄")),
AddColumn = Table.AddColumn(FinalTable, "年龄差异", each [年龄] - if [性别] = "女性" then AverageFemaleAge else AverageMaleAge),
RoundDiff = Table.TransformColumns(AddColumn,{{"年龄差异", each Number.Round(_, 2)}})
in
RoundDiff
在上面的代码中,我们使用了 Table.AddColumn
函数来创建计算列,并使用 Table.TransformColumns
函数来对列值进行四舍五入。
总结
通过使用 Power Query,我们可以轻松地对数据进行转换和处理。在本篇文章中,我们介绍了如何创建查询、删除列、提取头部和更改列名、过滤行、更改数据类型、替换值、计算平均值以及创建计算列。这些操作可以帮助我们更好地理解和分析数据,为业务决策提供支持。
FAQ
Q: 如何使用 Power Query 创建新查询?
A: 在 Power BI 的主界面上,点击"获取数据"按钮,然后选择"空白查询"选项。
Q: 如何删除查询中的列?
A: 使用 Table.RemoveColumns
函数来删除列,指定要删除的列名。
Q: 如何提取头部并更改列名?
A: 使用 Table.PromoteHeaders
函数来提取头部,并使用 Table.RenameColumns
函数来更改列名。
Q: 如何过滤行?
A: 使用 Table.SelectRows
函数来根据条件过滤行。
Q: 如何更改列的数据类型?
A: 使用 Table.TransformColumnTypes
函数来更改列的数据类型。
Q: 如何替换特定列中的值?
A: 使用 Table.ReplaceValue
函数来替换值。
Q: 如何计算列的平均值?
A: 使用 List.Average
函数来计算列的平均值。
Q: 如何创建计算列?
A: 使用 Table.AddColumn
函数来创建计算列。
Q: 如何四舍五入列的值?
A: 使用 Table.TransformColumns
函数来对列的值进行四舍五入。
资源