使用Python脚本在Power BI中创建新列

时间:2019-09-03 23:34:56

标签: python group-by powerbi dax powerbi-desktop

我正在尝试运行python脚本,以便可以基于“住所地址”列和“居住城市”列创建住户计数。两列都包含字符串。

我尝试过的脚本可以在下面看到:

import React from "react";

const SearchBox = ({ value, onChange }) => {
  return (
    <div className="search-box">
      <input
        className="search-txt"
        type="text"
        name="query"
        placeholder="search"
        value={value}
        onChange={e => onChange(e.currentTarget.value)}
      />
      <a className="search-btn" href="">
        <i className="fa fa-search" />
      </a>
    </div>
  );
};

export default SearchBox;

但是,它在20,000行后给了我这个错误:

DataSource.Error:ADO.NET:处理Python脚本时发生问题。这里是技术细节:[DataFormat.Error]我们无法转换为Number。详细信息:DataSourceKind = Python DataSourcePath = Python消息=在处理Python脚本时发生问题。这里是技术细节:[DataFormat.Error]我们无法转换为Number。 ErrorCode = -2147467259。

有什么办法可以解决这个问题?这段代码每次都可以在python中运行,并且错误代码在Power BI中绝对没有意义,我非常感谢有关如何使用DAX进行操作的任何建议。

1 个答案:

答案 0 :(得分:2)

我无法重现您的错误,但是我强烈怀疑错误的 来源是数据类型 。在Power Query Editor中,尝试将分组变量转换为文本。对于大于20000行的数据集,查询失败的事实与该问题完全无关。当然,除非行20000之后的数据内容有所改变。

如果您可以描述您的数据源并在Power Query Editor中显示应用的步骤,那么这对尝试帮助您的任何人都会有很大的帮助。您也可以尝试一次一步地应用代码,这意味着使用dataset['id'] =dataset.groupby(['RESIDENTIAL_ADDRESS1','RESIDENTIAL_CITY']).ngroup()创建一个表,并使用dataset['household_count'] = dataset.groupby(['id'])['id'].transform('count')

创建另一个表

我可能还会向您展示如何做到这一点,同时也让我怀疑错误在于数据类型,并希望排除其他错误源。


我正在使用numpy以及一些随机的城市和街道名称来构建一个数据集,我希望该数据集代表您的真实数据集的结构和数据类型:

代码段1:

import numpy as np
import pandas as pd

np.random.seed(123)
strt=['Broadway', 'Bowery', 'Houston Street', 'Canal Street', 'Madison', 'Maiden Lane']
city=['New York', 'Chicago', 'Baltimore', 'Victory Boulevard', 'Love Lane', 'Utopia Parkway']

RESIDENTIAL_CITY=np.random.choice(strt,21000).tolist()
RESIDENTIAL_ADDRESS1=np.random.choice(strt,21000).tolist()
sample_dataset=pd.DataFrame({'RESIDENTIAL_CITY':RESIDENTIAL_CITY,
                      'RESIDENTIAL_ADDRESS1':RESIDENTIAL_ADDRESS1})

复制该代码段,转到PowerBI Desktop > Power Query Editor > Transform > Run Python Script并运行以获取此代码:

enter image description here

然后使用此代码段执行相同的操作:

dataset['id'] =dataset.groupby(['RESIDENTIAL_ADDRESS1','RESIDENTIAL_CITY']).ngroup()

现在您应该拥有这个:

enter image description here

到目前为止,您的最后一步称为Changed Type 2。上面的步骤称为dataset。如果单击,您会看到ID的数据类型有一个字符串ABC,并且在下一步中它将更改为数字123。使用我的设置,Power BI自动插入步骤Changed Type 2。也许事实并非如此?暂时 是潜在的错误源。

下一步,插入最后一行作为自己的步骤:

dataset['household_count'] = dataset.groupby(['id'])['id'].transform('count')

现在,您应该拥有以下数据集,以及Applied Steps下的相同步骤:

enter image description here

使用此设置,一切似乎都工作正常。那么,我们现在确定 什么呢?

  1. 数据集的大小不是问题
  2. 您的代码本身不是问题
  3. Python应该在Power BI中完美地处理此问题

我们怀疑什么?

  1. 您的数据出了问题-值丢失或类型错误

我希望这可以帮助您。如果没有,那就不要犹豫,让我知道。