文章 Jingwei Wang · 七月 21, 2022 10m read

创建Cube

点击主页,Analytics - > 模型。

  1. 点击新建。系统会显示一个对话框。
  2. 在这个对话框中,指定以下内容。 
    • 定义类型。选择 Cube 。
    • 多维体名称 - Tutorial
    • 多维体的类名 - Tutorial.Cube
    • 源类 - 点击浏览按钮,选择BI.Study.Patient,然后点击确定。

系统会创建cube类,你也可以在Studio中查看和修改。

  1. 点击中间区域的粗体顶行(标有Tutorial)。这将选择cube,这样你就可以在右边编辑它的细节。
  2. 在细节栏中,将None键入空替换字符串。点击保存,然后点击确定。系统会更新cube类。
  3. 左边的区域叫做类浏览器。

类浏览器提供了你的基类的类属性(除了关系属性)的有用视图,这使得基于这些属性创建DeepSee元素非常容易。然而,重要的是要知道,尽管这个视图提供了一个访问某些属性的方便方法,你也可以使用源表达式来访问任何数据。这些源表达式是在构建cube时进行评估的,因此不会影响你的运行时性能。

添加levels和度量

0
0 144
文章 Jingwei Wang · 七月 21, 2022 7m read

创建一个透视表

  1. 在模型内容窗格中展开DiagD维度。
  2. 将Diagnoses拖放到行中,或者双击诊断。
  3. 将Patient Count(病人计数)拖放到Measure(度量)中,或双击病人数。
  4. 将 Avg Age(平均年龄) 拖至Measure(度量),或双击 "平均年龄"。
  5. 单击保存。 系统显示一个对话框,你可以指定透视表的名称。 保存透视表并给它一个名字。当你这样做时,你是在保存检索数据的基础查询,以及以你选择的方式显示数据所需的信息。你不是在保存数据。
  6. 对于文件夹,键入Test
  7. 对于透视名称,键入Patients by Diagnosis (Patients Cube)
  8. 点击确定。

注意:基表是Patients,这意味着所有的度量都是关于病人的数据总结。

度量和levels

0
0 122
文章 Jingwei Wang · 七月 21, 2022 3m read

在InterSystems IRIS数据平台管理门户中,有一些工具用于导入和导出数据。这些工具使用动态SQL,这意味着查询是在运行时准备和执行的。可以导入或导出的行的最大尺寸是3,641,144个字符。

你也可以使用%SQL.Import.Mgr类或LOAD DATA SQL命令导入数据,并使用%SQL.Export.Mgr类导出数据。

从文本文件中导入数据(.csv 和.txt)

你可以从一个文本文件中导入数据到一个合适的InterSystems IRIS类。当你这样做时,系统会在该类的表中创建并保存新的行。该类必须已经存在并且必须被编译。

步骤如下:

  1. 从管理门户中 选择系统资源管理器,然后选择SQL。用页面顶部的切换选项选择一个命名空间;这会显示可用的命名空间的列表。
  2. 在页面顶部,点击向导下拉列表,并选择数据导入。 
  3. 在向导的第一页,首先指定外部文件的位置。对于导入文件所在的位置,点击要使用的服务器的名称。
  4. 然后输入文件的完整路径和文件名,文件可以是.csv 和 .txt格式。
  5. 然后选择你想要导入到schema的名称。
  6. 选择表名。
  7. 然后点击下一步。
  8. 在向导的第二页,选择需要导入数据的列。
  9. 然后点击下一步。
  10. 在向导的第三页,描述外部文件的格式。
0
0 239
文章 Jingwei Wang · 七月 21, 2022 4m read

本章介绍了如何将SQL code从文本文件导入InterSystems SQL。当你导入SQL code时,InterSystems IRIS 数据平台使用动态SQL准备并执行每一行的SQL。如果遇到无法解析的SQL code行,SQL导入会跳过该行code,继续准备和执行后续的code行,直到到达文件的末端。所有的SQL code导入操作都会导入到当前的命名空间。

SQL导入主要用于导入数据定义语言(DDL)命令,如CREATE TABLE,并使用INSERT、UPDATE和DELETE命令来填充表。SQL导入可以准备和执行SELECT查询,但不创建结果集。

SQL导入可以用来导入InterSystems的SQL code。它也可以用于code迁移,从其他供应商(FDBMS、Informix、InterBase、MSSQLServer、MySQL、Oracle、Sybase)导入SQL。来自其他供应商的code被转换为InterSystems的SQL并执行。SQL导入不能将所有的SQL命令导入到InterSystems SQL中。它导入的是那些与InterSystems IRIS实现的SQL标准兼容的命令和条款。不兼容的特征通常会被解析,但会被忽略。

SQL导入可以成功地准备一个SQL查询--在适当的时候创建一个相应的缓存查询--但它不会执行查询。

0
0 161
文章 Jingwei Wang · 七月 21, 2022 5m read

视图为存储查询,提供了物理表的所有灵活性和安全权限。所有的视图都是可更新的或只读的。

注意:不能对只读的数据库中的数据创建视图。不能对存储在通过ODBC或JDBC网关连接的Informix表中的数据创建视图。这是因为InterSystems IRIS查询转换在FROM子句中使用子查询,而Informix不支持FROM子句的子查询。

创建视图

视图名称可以是合格的的或不合格的。一个没有限定的视图名称是一个简单的标识符。MyView。一个合格的视图名称由两个简单的标识符组成,一个schema名称和一个视图名称,用句号隔开, 例如MySchema.MyView。视图名和表名遵循相同的命名规则,并对未限定的名称执行相同的schema名称解析。同一模式中的视图和表不能有相同的名称。

你可以通过几种方式定义视图:

  1. 使用SQL CREATE VIEW命令(在DDL脚本中或通过JDBC或ODBC)。
    CREATE VIEW MySchema.MyView (ViewCol1, ViewCol2, ViewCol3) AS
    SELECT TableCol1, TableCol2, TableCol3
    FROM MyTable
0
0 227
文章 姚 鑫 · 七月 21, 2022 3m read

第三章 使用 ^%REST 例程创建 REST 服务

本章介绍如何使用 ^%REST 例程创建和删除 REST 服务。

提示:还可以使用此例程更新REST服务;只需删除REST服务,然后重新创建它。

使用^%REST例程

^%REST例程是一个简单的命令行界面。在任何提示下,可以输入以下答案:

  • ^ - 使例程跳回上一个问题。
  • ? - 使例程显示一条列出所有当前选项的消息。
  • qquit - 结束例程。

此外,每个问题都会在括号中显示该问题的默认答案。

使用^%REST例程创建REST服务

创建REST服务的推荐方法是从REST服务的OpenAPI2.0规范开始,并使用该规范生成REST服务类。要使用^%REST例程执行此操作:

  1. 获取JSON格式的REST服务的OpenAPI 2.0规范。将规范另存为文件或记下可访问规范的URL。
  2. 在终端中,更改到要在其中定义REST服务的名称空间。
  3. 输入以下命令以启动^%REST例程:
do ^%REST
  1. 在第一个提示符处,输入 REST 服务的名称。该名称用作生成类的包名;使用有效的包名。如果想使用名称列表、lquitq(在任何情况下都是变体),请将名称用双引号括起来。例如:"list"
  2. 在下一个提示符处,输入 Y(不区分大小写)以确认您要创建此服务。

然后,该例程会提示输入要使用的 OpenAPI 2.0 规范的位置。输入完整路径名或 URL

0
0 63
文章 Michael Lei · 七月 20, 2022 2m read

IRIS 命令qlist或list可以用来把输出结果输出到一个文件。

qlist的结果以文本格式输出,以^为分隔符。

第三部分,以^为界,包含运行状态数据。

$ iris qlist IRIS > iris.log

$ cat iris.log

IRIS^/Applications/iris^2022.1.0.164.0^running, since Thu Apr  7 16:37:03 2022^iris.cpf^1972^52773^0^alert^IRIS^^^/Applications/iris

在列表的情况下,以status:为前缀的一行包含运行状态数据。

对于基于Unix的操作系统

0
0 192
文章 姚 鑫 · 七月 20, 2022 4m read

第二章 使用 /api/mgmnt/ 服务

本章介绍如何使用 /api/mgmnt 服务来创建、更新和删除 REST 服务。

/api/mgmnt 服务还提供了可用于发现和记录 Web 服务的选项,如本书后面所述。

使用 /api/mgmnt 服务创建 REST 服务

创建 REST 服务的推荐方法是为 REST 服务创建 OpenAPI 2.0(也称为 Swagger)描述,并使用它来生成 REST 服务类。如果您正在实现由第三方定义的 REST 服务,他们可能会提供此 OpenAPI 2.0 描述。有关 OpenAPI 2.0 描述格式的详细信息,请参阅 OpenAPI 2.0 规范。以下主题描述了如何使用 /api/mgmnt 服务来执行此操作。

使用 /api/mgmnt 服务生成类

第一步,生成 REST 服务类,如下所示:

  1. JSON 格式创建或获取 REST 服务的 OpenAPI 2.0 描述。
  2. 获取 REST 测试工具,例如 PostMan (https://www.getpostman.com/)。
  3. 在测试工具中,创建如下 HTTP 请求消息:
  • 对于 HTTP 操作,选择或指定 POST
  • 对于 URL,请指定以下形式的 URL

http://localhost:52773/api/mgmnt/v2/namespace/myapp

0
0 102
文章 Lilian Huang · 七月 20, 2022 4m read

本文将讨论 FHIR中的问卷和问卷反馈(Questionnaire and Questionnaire Response),从创建表单到上传到服务器以及如何填写它们。

tl;dr :

  • 通过使用该工具链接“ this online tool” ,您可以轻松的开始构建您自己的表单,或者使用现有模版。
  • 通过使用InterSystems 本地FHIR 服务器链接“ this InterSystems local FHIR server” ,您可以轻松的存储您的FHIR资源和问卷。
  • 通过使用此应用程序“this app” ,您可以像医生一样操作,对您的 FHIR 服务器上的每位患者进行问卷调查和回复。

需要注意的是,该应用程序不使用 Content-Type 'application/json+fhir' 进行通信,而只是使用 Content-Type 'application/json' ,所以它不会像我们的本地 InterSystems FHIR 服务器那样工作。

这就是为什么我创建了这个 GitHub 存储库“this GitHub repo,其中包含应用程序的修改版本,使用 Content-Type 'application/json+fhir',拥有本地 FHIR 服务器和指向问卷生成器工具的链接以及一些解释。
 

0
0 124
文章 姚 鑫 · 七月 19, 2022 8m read

第一章 创建 REST 服务简介

本文介绍 IRIS® 中的 RESTREST 服务。

REST 简介

REST 命名自“Representational State Transfer”,具有以下属性:

  • REST 是一种架构风格,而不是一种格式。尽管 REST 经常使用 HTTP 来传输消息并使用 JSON 来传递数据,但也可以将数据作为 XML 或纯文本传递。 REST 利用现有的 Web 标准,例如 HTTPURLXMLJSON
  • REST 是面向资源的。通常,资源由 URL 标识并使用基于 HTTP 方法的操作,例如 GETPOSTPUTDELETE
  • REST 通常有少量开销。虽然它可以使用 XML 来描述数据,但它更常用的是 JSON,它是一种轻量级的数据包装器。 JSON 使用标签标识数据,但标签没有在正式的模式定义中指定,也没有明确的数据类型。

REST 服务简介

IRIS 2019.2 及更高版本中定义 REST 接口有两种方法:

  • 规范优先定义——首先创建一个 OpenAPI 2.0 规范,然后使用 API 管理工具生成 REST 接口的代码。
  • 手动编码 REST 接口。

使用规范优先的定义,REST 服务正式由以下组件组成:

0
0 108
问题 Michael Lei · 五月 10, 2021

我想安装Windows版本的管理门户引擎来创建Cache InterSystems数据库
我想为Cache InterSystems创建一个样本数据库,并想通过Cache Entity Framework Provider访问它。但是,我无法找到一个特定的管理门户引擎来创建数据库。

你能指导一下如何在Windows中安装管理门户吗?

I want to install Management Portal Engine for Windows to create Cache InterSystems DB

I want to create a Sample Database for Cache InterSystems and want to access it via Cache Entity Framework Provider. But, I cannot find a particular engine of Management Portal to create a database. 

Can you guide how to install Management Portal in Windows?

2
0 190
问题 Michael Lei · 五月 10, 2021

大家好,

我需要根据用户请求删除Ensemble接口。我想为此编写一个程序,执行的时候将通过代码删除接口组件。
能否提供以下操作的代码示例?

  • 从规则类中删除单个规则
  • 从Ensemble删除一个类
  • 从生产环境中删除主机(服务/操作/流程)。

感谢帮助。
谢谢,

普鲁索他曼

Ensemble Delete Individual Rules and Ensemble classes programmatically
Hi Team,

I have a requirement to delete the Ensemble interfaces , as per User request. I would like to write a routine for that and once I execute, it should remove the interface components through code.
Could you please provide code samples for the following actions ?

1
0 164
问题 Michael Lei · 五月 18, 2021

大家好,

我目前正在开发TCP入站服务,以读取从使用EnsLib.TCP.CountedOutboundAdapter的TCP操作发送的一些XML。

1)我尝试过EnsLib.TCP.Inbound适配器,但是会出现此错误:

错误<Ens> ErrException:<METHOD不存在> zinitConfig + 7 ^ Ens.Host.1 *%New,EnsLib.TCP.InboundAdapter-登录为'-'
数字 - @'
设置..Adapter = $ classmethod(..#ADAPTER,“%New”)'

因此,适配器无法开始侦听传入的连接。

2)当我改用EnsLib.TCP.CountedXMLInboundAdapter或EnsLib.TCP.CountedInboundAdapter时,适配器开始侦听给定的端口,但OnProcessinput()方法未在pInput流中接收任何数据。流始终为空,并在事件日志中引发此错误。

错误<Ens> ErrTCPReadBlockSize:超时时间为(5)的TCP Read(32000)失败,错误如下:(1144):l version =“ 1.0” encoding =“ UTF-8”?> Wsma2Message xmlns:ns1 =“ urn:hl7-org :v3“ ......

1
0 174
问题 Michael Lei · 五月 18, 2021

我可以从AIX命令行提示符运行以下命令,而不会出现任何问题

-bash-2.05b$ echo t
t
-bash-2.05b$ echo œ
œ

当我从内部Cache调用时,我遇到了问题。

USER>D $ZF(-1,"echo t")
t

USER>D $ZF(-1,"echo œ")

D $ZF(-1,"echo œ")
^
<TRANSLATE>

我正在使用Cache 2017.2。有人可以帮忙吗?

谢谢你。

1
0 163
问题 Michael Lei · 六月 16, 2021

在Ensemble中使用SQL进行批量插入
你好,社区。

我试图在一个表中插入多个值。下面是简单的SQL语句。

插入到表X中

values ('Name', 'Address', 'Phone')

我怎样才能在一条语句中进行多次插入(行)?

数值不在另一个表中,所以我不能使用选择进入。

谢谢。

吉米-克里斯蒂安

Hello Community,

I am trying to insert multiple values in a table. Below is the simple sql statement.

Insert Into TableX

values ('Name', 'Address', 'Phone')

How can i do multiple inserts(rows) in one single statement?

Values are not in another table, so i cannot use Select into.

Thanks,

Jimmy Christian.

1
0 151
问题 Michael Lei · 四月 29, 2022

我想知道是否有更好的方法来使用动态SQL对数据集进行分页,而不是我下面使用的方法。问题是,当潜在的数据池变大时,这段代码就会变慢,以至于无法使用。在分析下面的每一行代码时,似乎速度变慢与最初的rset.%Next()迭代有关。 有没有什么不需要子查询/%VID的可用方法,比如简单的LIMIT/OFFSET?

我的代码类似于:

s sql=##class(%SQL.Statement).%New()

s query="SELECT *,%VID FROM (SELECT prop FROM table WHERE prop=x) WHERE %VID BETWEEN 1 AND 100"             

s sc=sql.%Prepare(query)

s rset=sql.%Execute()

while rset.%Next() {.....

1
1 459
问题 Michael Lei · 五月 8, 2022

大家好!

我正在创建一个脚本,从Ensemble Production中删除一个项目(Component),我知道有手动的方法,但由于有几个Component,我想用一个脚本来更快。

我试着用%Delete()并在Ens.Config.Item上做选择,但这最终在生产中产生了几个错误。有谁知道我怎样才能简单地做到这一点?

答案参见:https://community.intersystems.com/post/delete-item-production

1
0 117
问题 Michael Lei · 四月 27, 2022

Hi, 请问如何更改表(有数据)上的主键?谢谢!

答:

如果数据已经存在,那么这是一项必须重视的任务,特别是如果存在继承或父/子关系,因为这将导致你的数据存储方案的改变。

最简单的方法是通过一个中间(临时)表来实现。

创建一个具有相同结构的新类,但有一个新的主键。
使用SQL(不是合并命令)将数据从旧的类中移到它里面。
删除旧类中的数据/索引,然后改变其中的主键。
使用合并命令,将数据从新类移到旧类中。
删除带有数据的新类。
重建索引(如果有的话)。

几个有用的链接:
        MERGE

        持久性对象和InterSystems IRIS SQL

        持久性对象的介绍

如果仍然有问题,最好向WRC寻求帮助。

1
0 147
文章 Michael Lei · 七月 18, 2022 8m read

Hi 大家好! 我是 Sergei Sarkisian,在InterSystems 做Angular 前端7年。Angular是非常流行的框架,我们的开发人员、客户和合作伙伴经常选择它来开发他们的应用程序。

我会写一系列的文章,涵盖Angular的不同方面:概念、方法、最佳实践、高级主题等等。这个系列的文章将针对那些已经熟悉Angular的人,不会涉及基本概念。由于我正在构建文章的路线图,我想从突出最近的Angular版本中的一些重要功能开始。

严格类型化表单

这可能是近几年来Angular最受欢迎的功能。有了Angular 14,开发者现在可以在Angular Reactive Forms中使用TypeScript的所有严格类型检查功能。

表单控制Formcontrol 类现在是通用的,并接受它所持有的值的类型。

0
0 704
文章 姚 鑫 · 七月 18, 2022 6m read

第九章 使用嵌入式 Python (六)

异常处理

IRIS 异常处理程序可以处理 Python 异常并将它们无缝传递给 ObjectScript。在前面的 Python 库示例的基础上,如果尝试使用不存在的文件调用 canvas.drawImage(),并在 ObjectScript 中捕获异常,会看到以下内容:

USER>try { do canvas.drawImage("C:\Sample\bad.png", 150, 600) } catch { write "Error: ", $zerror, ! }
Error: <THROW> *%Exception.PythonException <THROW> 230 ^^0^DO canvas.drawImage("W:\Sample\isc.png", 150, 600) 
<class 'OSError'>: Cannot open resource "W:\Sample\isc.png" -

这里 <class 'OSError'>: Cannot open resource "W:\Sample\isc.png"是从 Python 传回的异常。

字节和字符串

0
0 81
文章 姚 鑫 · 七月 17, 2022 4m read

第八章 使用嵌入式 Python (五)

通过引用传递参数

ObjectScript 编写的方法中的参数可以通过值或引用传递。在下面的方法中,签名中第二个和第三个参数前面的 ByRef 关键字表示它们打算通过引用传递。

ClassMethod SandwichSwitch(bread As %String, ByRef filling1 As %String, ByRef filling2 As %String)
{
    set bread = "whole wheat"
    set filling1 = "almond butter"
    set filling2 = "cherry preserves"
}

ObjectScript 调用方法时,在参数前放置一个句点以通过引用传递它,如下所示:

0
0 113
文章 姚 鑫 · 七月 16, 2022 4m read

第七章 使用嵌入式 Python (四)

弥合 ObjectScript 和嵌入式 Python 之间的差距

由于 ObjectScriptPython 语言之间的差异,将需要了解一些有助于弥合语言之间差距的信息。

ObjectScript 方面,%SYS.Python 类允许从 ObjectScript 使用 Python

Python 方面,iris 模块允许使用 Python 中的 ObjectScript。在 Python 中,键入 help(iris) 以获取其方法和函数的列表。

使用 Python 内置函数

builtins 包在 Python 解释器启动时自动加载,它包含语言的所有内置标识符,例如基对象类和所有内置数据类型类、异常类、函数和常量。

可以将此包导入 ObjectScript 以访问所有这些标识符,如下所示:

set builtins = ##class(%SYS.Python).Import("builtins")

Python print() 函数实际上是内置模块的一个方法,因此现在可以在 ObjectScript 中使用此函数:

USER>do builtins.print("hello world!")
hello world!
0
0 122
文章 姚 鑫 · 七月 15, 2022 5m read

第六章 使用嵌入式 Python (三)

从 ObjectScript 调用嵌入式 Python 代码

使用 Python 库

嵌入式 Python 让可以轻松访问数以千计的有用库。通常称为“包”,它们需要从 Python 包索引 (PyPI) 安装到 <installdir>/mgr/python 目录中,然后才能使用。

例如,ReportLab Toolkit 是一个用于生成 PDF 和图形的开源库。以下命令使用软件包安装程序 irispipWindows 系统上安装 ReportLab

C:\InterSystems\IRIS\bin>irispip install --target C:\InterSystems\IRIS\mgr\python reportlab

在基于 UNIX 的系统上,使用:

$ pip3 install --target /InterSystems/IRIS/mgr/python reportlab

安装包后,可以使用 %SYS.Python 类的 Import() 方法在 ObjectScript 代码中使用它。

给定一个文件位置,以下 ObjectScript 方法 CreateSamplePDF() 创建一个示例 PDF 文件并将其保存到该位置。

0
0 114