Power BI:使用R脚本时日期列未被正确处理

3
在Power BI中,我试图在可视化之前转换我的数据表。我选择使用R脚本进行转换。
我的数据表包含一个“日期”列。每当我在该列上运行我的R脚本时,它会返回该列中所有值的NULL。
例如 - 转换前 enter image description here 用于转换列的R脚本
# 'dataset' holds the input data for this script
library(dplyr)
library(lubridate)
library(zoo)

# Extract month-year for each date
df=dataset %>%
   mutate(Date=as.yearmon(Date))

结果

enter image description here

我在R Studio中重新执行了这个脚本,转换工作完美无缺。

似乎是Power BI的问题,任何与日期相关的操作都会导致NULL

是否有人遇到了相同的问题,并有可能的解决方案?

提前感谢。


Date是一个类的名称,也许你可以尝试完全限定列名,例如dataset$Date - R Yoda
使用管道运算符时,不需要以那种格式指定列名。这并不是导致问题的原因。 - Varun
2个回答

4

本答案是在评论讨论后编辑的


如果您想要的输出效果如下所示,我有一个建议:

enter image description here

解决方案的关键在于在运行 R 脚本之前将日期转换为 text,并相应地处理您的 R 脚本中的输入。此外,为了确保 Power Query Editor 不会为您做出任何格式选择(避免将日期作为小数),您从 R 脚本输出的日期应该被格式化为 text / string


我的方法:

1. 手动使用 输入数据 插入一些日期:

enter image description here

2. 进入 编辑查询 并查看:

enter image description here

请注意,该列已自动更改为 Date,并且在 Applied Steps 下有一个 Changed Type 步骤。现在,将日期数据类型更改为 text 并替换其他更改数据的步骤:

enter image description here

3. 插入以下 R 脚本,与您的设置相比只有几个变化:

# 'dataset' holds the input data for this script
library(dplyr)
library(lubridate)
library(zoo)

# Extract month-year for each date
df=dataset %>%
   mutate(Date=as.yearmon(as.Date(Date,format = "%d/%m/%Y")))

# Make sure Power BI picks up the date column as a string format
df['Date'] <- format(df['Date'], "%b %Y")

4. 运行脚本可以得到以下结果:

enter image description here

希望这是您所需要的。如果不是,请随时让我知道。


非常感谢您详细的回复。事实上,我也尝试了同样的方法。我首先将日期列转换为文本,然后以相同的方式执行了R脚本。结果与您得到的完全一样,日期被转换成了某种十进制数。然而,as.yearmon函数应该返回一个年-月组合。例如,21/03/2018应该变成March 2018,但这并没有发生。 - Varun
@Varun 在脚本的末尾添加另一行代码,尝试使用 df['Date'] <- format(df['Date'], "%Y %b") 并查看结果如何。 - vestland
你的解决方案在使用Power BI创建数据并运行R脚本时完美地工作。但是对于我的现有数据集,这些步骤并没有得到相同的结果。两者之间的区别在于,对于现有数据集,从日期转换为文本会导致日期格式的更改。所以20/01/2019变成了20-01-2019。然后R脚本返回NULL值。然而,如果以相同的格式手动输入日期到Power BI中,它就可以正常工作。不确定为什么相同的数据进行文本转换步骤会产生不同的结果。 - Varun
@Varun,你的截图显示的日期格式是20/02/2019。很难确定这是否是你实际数据的形式,还是PowerBI表示的方式。你能否提供一份你真实数据的样本并添加到问题中? - vestland
1
最后,你的解决方案在我首先将日期转换为Excel中的文本后起作用,在将文件上传到Power BI之后,我在Power BI中运行脚本之前进行了相同的文本转换。 - Varun
显示剩余2条评论

0
在RStudio中,我得到的是:
as.yearmon("21/02/2019")
[1] NA

尝试:

as.yearmon(as.Date("21/02/2019","%d/%m/%Y"))
[1] "Feb 2019"

没有一个可重现的例子,我无法做太多事情。我不了解PowerBI。也许可以将数据从PowerBI加载为字符,并在这里粘贴。 - Benoît Fayolle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接