代码之家  ›  专栏  ›  技术社区  ›  Mark Schuurman

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

  •  2
  • Mark Schuurman  · 技术社区  · 7 年前

    现在我正在学习使用BI工具分析数据 QLikView

    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 文件I获取错误:

    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.
    

    .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()
    

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

    2 回复  |  直到 7 年前
        1
  •  3
  •   Stefan Stoichev    7 年前

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

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

    而且 Script (Allow Database Write and Execute Statement) 中的复选框 User Preferences -> Security 应进行检查

    enter image description here

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

        2
  •  1
  •   Mark Schuurman    7 年前

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

    正常工作。