在Power BI列上运行R脚本

时间:2020-03-04 14:20:31

标签: r powerbi

我在Power Bi中有一个数据集,其中有很多列,其中包含有关事故单的信息(例如,解决问题所花费的时间等)

很遗憾,我获取的数据格式不正确。我写了一个简单的R函数,它将重新计算时间并返回正确的值:

calculateHours <- function(hours) {
  x <- trunc(hours/24)
  rest <- mod(hours,24)
  y <- trunc(rest/10)
  z <- mod(rest,10)
  result <- (((x+y)*10)+z)
  return(result)
}

示例:如果通过“函数”运行204小时,则将变为92小时。

现在,我需要在其中添加一个包含计算值的新列。 例如。 '业务经过时间= 204'->'计算的业务经过时间(新列)= 92'

如何在Power BI中使用此功能来添加新列,该列使用此表的另一列中的值,然后计算正确的时间值?

我还是Power Bi和R的新手,所以我们将不胜感激!预先感谢!

2 个答案:

答案 0 :(得分:0)

在Power BI查询编辑器中,您可以将R脚本(Transform-> Run R脚本)添加到查询中。这是一个简单的示例,假设您有一列Number

# 'dataset' holds the input data for this script

myfunction <- function(x) 
{
    return (x + 1)
}

dataset$NewNumber <- myfunction(dataset$Number) ## apply function and add result as new column
output <- dataset ## PowerBI uses "output" as result from this query step

这是更详细的介绍:https://www.red-gate.com/simple-talk/sql/bi/power-bi-introduction-working-with-r-scripts-in-power-bi-desktop-part-3/

答案 1 :(得分:0)

Power Query可以使用M公式自行处理大部分计算。这将比调用R脚本简单得多,集成度更高,并且可能更快。

在Power Query编辑器中,导航添加列> 自定义列,然后输入如下的M公式。

Custom Column

let
    x = Number.IntegerDivide([Hours], 24),
    rest = Number.Mod([Hours], 24),
    y = Number.IntegerDivide(rest, 10),
    z = Number.Mod(rest, 10),
    result = (x + y) * 10 + z
in
    result

Result