无法为ETL

时间:2019-08-07 17:48:47

标签: powerbi etl dax powerquery m

我正在Kaggle.com上研究一些数据集,试图学习ETL的更好实践,因为我倾向于在转换部分上停留在特定的事情上。对于这个问题,我正在处理Stack Overflow 2018的调查结果:https://www.kaggle.com/stackoverflow/stack-overflow-2018-developer-survey-特别是LanguageWorkedWith列。 enter image description here

目前,我正在使用RapidMiner / Excel的组合来尝试更改数据。我对R和Python代码不太熟悉,无法使用编码方法解决此问题。

当前列的问题在于它列出了用户选择的所有语言,并用分号分隔。我可以轻松地在分号上拆分一列,但是发生的事情有两种:

  1. 我有31列LanguageWorkedWith1-LanguageWorkedWith31。这使得按薪水收集语言计数无效。

  2. 笛卡尔效应,其中每行将被复制以仅容纳语言选择。因此,您将有很多重复的行,这肯定会影响数据的完整性。我还尝试了使用Power BI(加载位置)来删除响应者ID和语言上的重复项,但这没有用。

理想情况下,我想在Power BI中通过薪水可视化来编写语言,这与有多少个内核一样,但是却无法弄清楚使这种情况在代码外部发生的过程。不知道这看起来会如何,但是如果我可以拆分所有语言并计算它们,我至少可以做这样的事情: enter image description here 但是我不确定是否可以将其与薪水以及数据的方式联系起来。

我只是想更好地理解一些转换过程!感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

关键是要拆分成行而不是列。

Split to rows

这样您就可以得到一个像这样的表:

Expanded rows

您可以将该行扩展保留在数据模型中自己的相关表中,这样就不会创建巨型表。

Data Model

从那里开始,只要您了解一点DAX,就可以轻松制作视觉效果。例如,我创建了AvgSalary度量(在将该列转换为数字类型之后),如下所示:

AvgSalary =
CALCULATE (
    AVERAGE ( survey_results_public[ConvertedSalary] ),
    FILTER (
        survey_results_public,
        survey_results_public[Respondent] IN VALUES ( 'Language'[Respondent] )
    )
)

然后可以创建如下有趣的图表:

AvgSalary