运行 数据分析工具 QLikView 中的 Python 脚本
Run a Python script in data-analyses tool QLikView
现在我正在学习在BI工具QLikView中分析数据。我在执行 QLikView 脚本时尝试 运行 一个 Python 脚本。
我的 QLikView 脚本 的一部分,其中调用了 Python 脚本:
DatumRange: // maak tijdelijke tabellen aan met de datum range van de begin en eind datum per patiënt
LOAD DatumNum
Resident Kalender;
BeginEindVerblijf:
LOAD VerblijfStartNum, VerblijfEindNum
Resident Patiënt;
// sla de tabellen op in CSV bestanden om met behulp van een Python script om te zetten naar bezetting
STORE DatumRange INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\NumDateRange.csv] (txt);
STORE BeginEindVerblijf INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\VerblijfStart_VerblijfEind.csv] (txt);
DROP Table DatumRange;
DROP Table BeginEindVerblijf;
EXECUTE python3 BerekenBezetting.py // voer Python script uit om de bezetting te bepalen
Directory;
LOAD DatumNum, Date(DatumNum, 'YYYYMMDD') as JaarMaandDag, AantalPatiënten
FROM [Bezetting berekenen in Python\Bezetting.csv]
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
执行脚本时我收到 错误:
General error
EXECUTE python3 BerekenBezetting.py
Directory
在我的 QLikView log
文件中出现错误:
2017-11-01 14:16:02 0303 STORE DatumRange INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\NumDateRange.csv] (txt)
2017-11-01 14:16:02 0304 STORE BeginEindVerblijf INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\VerblijfStart_VerblijfEind.csv] (txt)
2017-11-01 14:16:02 0306 DROP Table DatumRange
2017-11-01 14:16:02 0307 DROP Table BeginEindVerblijf
2017-11-01 14:16:02 0309 EXECUTE python3 BerekenBezetting.py
2017-11-01 14:16:02 0310
2017-11-01 14:16:02 0311 Directory
2017-11-01 14:16:02 Error:
2017-11-01 14:16:09 Execution Failed
2017-11-01 14:16:09 Execution finished.
如果我 运行 我的 Python 脚本在 Python 空闲它工作正常并创建一个 .CSV
文件,需要在我的 [=38] 之后导入 QLikView =] 脚本已执行。
我的 Python 脚本是:
NumDateRangeArray = [] # 1D array met alle numDate tussen de eerste en laatste datum
VerblijfStart_VerblijfEindArray = [] # 2D array waarin elke begin en einddatum opgeslagen wordt
bezetting = [] # 2D array waarin elke numDate in opgeslagen is tesamen met het aantal patiënt dat aanwezig is per dag
def main():
bestandenInladen()
bezettingBerekenen()
maakCSVBestand()
def bestandenInladen():
NumDateRangeFile = open('NumDateRange.csv' ,'r')
VerblijfStart_VerblijfEindFile = open('VerblijfStart_VerblijfEind.csv', 'r')
beginEind = []
begin = ''
eind = ''
for date in NumDateRangeFile:
if date.startswith(tuple(str(i) for i in range(10))):
NumDateRangeArray.append(int(date.strip('\n'))) # verwijder de eerste niet nummerieke waarde
for verblijf in VerblijfStart_VerblijfEindFile: # maak 2D array aan met begin en eind verblijf per patiënt
beginEind = (verblijf.strip('\n').split(','))
if beginEind[0].startswith(tuple(str(i) for i in range(10))):
begin = int(beginEind[0])
eind = int(beginEind[1])
beginEind = [] # subarray met een begin en eindverblijf in NumDate formaat
beginEind.append(begin)
beginEind.append(eind)
VerblijfStart_VerblijfEindArray.append(beginEind)
NumDateRangeFile.close()
VerblijfStart_VerblijfEindFile.close()
#print (NumDateRangeArray)
#print
#print (VerblijfStart_VerblijfEindArray)
def bezettingBerekenen():
aantalPatiëntenAanwezig = 0
numDate = 0
numDateAndAanwezigArray = [] # subarray met hoeveel patiënten er aanwezig zijn per datum
for numDate in NumDateRangeArray:
for verblijf in VerblijfStart_VerblijfEindArray:
if numDate >= verblijf[0] and numDate <= verblijf[1]:
aantalPatiëntenAanwezig += 1
numDateAndAanwezigArray.append(numDate)
numDateAndAanwezigArray.append(aantalPatiëntenAanwezig)
bezetting.append(numDateAndAanwezigArray)
numDateAndAanwezigArray = []
aantalPatiëntenAanwezig = 0
#print (bezetting)
def maakCSVBestand():
import csv
delimiter = ','
csvfile = open('Bezetting.csv', 'w')
csvfile.write('DatumNum' + delimiter + 'AantalPatiënten' + '\n')
for datum in bezetting:
csvfile.write(str(datum[0]) + delimiter + str(datum[1]) + '\n')
csvfile.close()
main()
这里出了什么问题,因为错误消息没有给我任何信息?
您需要包含 python.exe
的完整路径。
EXECUTE C:\Python27\python.exe c:\Users\User123\Desktop\test.py;
还应选中 User Preferences -> Security
中的 Script (Allow Database Write and Execute Statement)
复选框
请记住,此设置在 User Preferences
中。这意味着它将仅为您启用。如果您与其他人共享文件,他们将无法执行外部文件,除非他们启用了相同的复选框
感谢 Stefan,我找到了解决方案,命令:
EXECUTE C:\Users\masc\AppData\Local\Programs\Python\Python36\python "C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\BerekenBezetting.py";
工作正常。
现在我正在学习在BI工具QLikView中分析数据。我在执行 QLikView 脚本时尝试 运行 一个 Python 脚本。
我的 QLikView 脚本 的一部分,其中调用了 Python 脚本:
DatumRange: // maak tijdelijke tabellen aan met de datum range van de begin en eind datum per patiënt
LOAD DatumNum
Resident Kalender;
BeginEindVerblijf:
LOAD VerblijfStartNum, VerblijfEindNum
Resident Patiënt;
// sla de tabellen op in CSV bestanden om met behulp van een Python script om te zetten naar bezetting
STORE DatumRange INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\NumDateRange.csv] (txt);
STORE BeginEindVerblijf INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\VerblijfStart_VerblijfEind.csv] (txt);
DROP Table DatumRange;
DROP Table BeginEindVerblijf;
EXECUTE python3 BerekenBezetting.py // voer Python script uit om de bezetting te bepalen
Directory;
LOAD DatumNum, Date(DatumNum, 'YYYYMMDD') as JaarMaandDag, AantalPatiënten
FROM [Bezetting berekenen in Python\Bezetting.csv]
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
执行脚本时我收到 错误:
General error
EXECUTE python3 BerekenBezetting.py
Directory
在我的 QLikView log
文件中出现错误:
2017-11-01 14:16:02 0303 STORE DatumRange INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\NumDateRange.csv] (txt)
2017-11-01 14:16:02 0304 STORE BeginEindVerblijf INTO [C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\VerblijfStart_VerblijfEind.csv] (txt)
2017-11-01 14:16:02 0306 DROP Table DatumRange
2017-11-01 14:16:02 0307 DROP Table BeginEindVerblijf
2017-11-01 14:16:02 0309 EXECUTE python3 BerekenBezetting.py
2017-11-01 14:16:02 0310
2017-11-01 14:16:02 0311 Directory
2017-11-01 14:16:02 Error:
2017-11-01 14:16:09 Execution Failed
2017-11-01 14:16:09 Execution finished.
如果我 运行 我的 Python 脚本在 Python 空闲它工作正常并创建一个 .CSV
文件,需要在我的 [=38] 之后导入 QLikView =] 脚本已执行。
我的 Python 脚本是:
NumDateRangeArray = [] # 1D array met alle numDate tussen de eerste en laatste datum
VerblijfStart_VerblijfEindArray = [] # 2D array waarin elke begin en einddatum opgeslagen wordt
bezetting = [] # 2D array waarin elke numDate in opgeslagen is tesamen met het aantal patiënt dat aanwezig is per dag
def main():
bestandenInladen()
bezettingBerekenen()
maakCSVBestand()
def bestandenInladen():
NumDateRangeFile = open('NumDateRange.csv' ,'r')
VerblijfStart_VerblijfEindFile = open('VerblijfStart_VerblijfEind.csv', 'r')
beginEind = []
begin = ''
eind = ''
for date in NumDateRangeFile:
if date.startswith(tuple(str(i) for i in range(10))):
NumDateRangeArray.append(int(date.strip('\n'))) # verwijder de eerste niet nummerieke waarde
for verblijf in VerblijfStart_VerblijfEindFile: # maak 2D array aan met begin en eind verblijf per patiënt
beginEind = (verblijf.strip('\n').split(','))
if beginEind[0].startswith(tuple(str(i) for i in range(10))):
begin = int(beginEind[0])
eind = int(beginEind[1])
beginEind = [] # subarray met een begin en eindverblijf in NumDate formaat
beginEind.append(begin)
beginEind.append(eind)
VerblijfStart_VerblijfEindArray.append(beginEind)
NumDateRangeFile.close()
VerblijfStart_VerblijfEindFile.close()
#print (NumDateRangeArray)
#print
#print (VerblijfStart_VerblijfEindArray)
def bezettingBerekenen():
aantalPatiëntenAanwezig = 0
numDate = 0
numDateAndAanwezigArray = [] # subarray met hoeveel patiënten er aanwezig zijn per datum
for numDate in NumDateRangeArray:
for verblijf in VerblijfStart_VerblijfEindArray:
if numDate >= verblijf[0] and numDate <= verblijf[1]:
aantalPatiëntenAanwezig += 1
numDateAndAanwezigArray.append(numDate)
numDateAndAanwezigArray.append(aantalPatiëntenAanwezig)
bezetting.append(numDateAndAanwezigArray)
numDateAndAanwezigArray = []
aantalPatiëntenAanwezig = 0
#print (bezetting)
def maakCSVBestand():
import csv
delimiter = ','
csvfile = open('Bezetting.csv', 'w')
csvfile.write('DatumNum' + delimiter + 'AantalPatiënten' + '\n')
for datum in bezetting:
csvfile.write(str(datum[0]) + delimiter + str(datum[1]) + '\n')
csvfile.close()
main()
这里出了什么问题,因为错误消息没有给我任何信息?
您需要包含 python.exe
的完整路径。
EXECUTE C:\Python27\python.exe c:\Users\User123\Desktop\test.py;
还应选中 User Preferences -> Security
中的 Script (Allow Database Write and Execute Statement)
复选框
请记住,此设置在 User Preferences
中。这意味着它将仅为您启用。如果您与其他人共享文件,他们将无法执行外部文件,除非他们启用了相同的复选框
感谢 Stefan,我找到了解决方案,命令:
EXECUTE C:\Users\masc\AppData\Local\Programs\Python\Python36\python "C:\Users\masc\Desktop\Data-analyse voor U-Center in QLikView\Zelfgemaakte dummy dataset U-Center\Bezetting berekenen in Python\BerekenBezetting.py";
工作正常。