在数据分析工具QLikVi中运行Python脚本

2024-03-29 15:47:00 发布

您现在位置:Python中文网/ 问答频道 /正文

现在我正在学习如何在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);

执行脚本时,我收到错误

^{pr2}$

在我的QLikViewlog文件中,我得到了一个错误:

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 IDLE中运行Python脚本,它将正常工作并创建一个.CSV文件,在执行Python脚本后,需要在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()

这里出了什么问题,因为错误消息没有给我任何信息?在


Tags: csvin脚本fordecenterbeginmet
2条回答

多亏了斯特凡,我找到了解决方案,命令:

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";

工作正常。在

您需要包括python.exe的完整路径。在

EXECUTE C:\Python27\python.exe c:\Users\User123\Desktop\test.py;

还应选中User Preferences -> Security中的Script (Allow Database Write and Execute Statement)复选框

enter image description here

请记住,此设置位于User Preferences。这意味着它将只为您启用。如果与其他人共享该文件,则除非启用了相同的复选框,否则他们将无法执行外部文件

相关问题 更多 >