文章 姚 鑫 · 八月 3, 2022 3m read

第十六章 源代码文件 REST API 教程(一)

本章提供了一个简短的教程,通过一系列示例演示如何使用源代码文件 REST API。它包含以下部分:

API 基础

Atelier 用于访问 IRIS 源代码文件的 API 使用 REST 架构风格。 REST 的名字来源于“Representational State Transfer”。与许多 REST API 一样 IRIS 源代码文件 REST API 使用 HTTP GETPOSTPUTDELETEHEAD 方法,并将 JSON 用于传入和传出消息体。

要调用 API 方法,需要了解以下内容:

  • HTTP 方法——它是以下之一:GETPOSTPUTDELETEHEAD
  • HTTP 标头——为调用提供上下文信息。此 API 中使用的 HEADERS 包括:
    • 授权,它提供对服务器的访问。除非安装了具有最低安全性的服务器,否则需要提供用户名和密码才能访问 API。
    • Content-Type application/json,指定入站负载以 JSON 格式提供。必须为所有 POSTPUT 方法指定此标头。
    • If-None-Match,它允许 GetDocPutDoc 调用检查源代码文件自上次访问以来是否被修改。
  • URL - URL 由以下部分组成:
    • http://
    • server-name
0
0 269
公告 Claire Zheng · 八月 2, 2022

开发者们,大家好!

在此向您介绍开发者社区的一个新特性—— InterSystems开发者关键问题(Key Questions).

我们增加了一个新的 #Key Question 标签(#关键问题),用以显著标识与InterSystems数据平台有关的、影响重大的提问/问题。

每个月,InterSystems专家会选择一些这类问题,提出这些问题的社区成员将被授予荣誉奖励!

有哪些荣誉呢?详情如下! 

0
0 136
文章 姚 鑫 · 八月 2, 2022 3m read

第十五章 源代码文件 REST API 简介

源代码文件 REST API 简介

REST API 提供对源代码文件的访问。我们开发此 API 是为了允许 Atelier(我们基于 EclipseIDE)访问 IRIS 服务器上的 IRIS 代码文件。可以使用 API 执行访问 IRIS 代码文件所需的操作。这些行动包括:

  • 获取 IRIS 实例上可用的命名空间
  • 查找命名空间中定义的类定义和例程
  • 获取类和例程的文本定义
  • 更新类定义或例程
  • 创建新的类定义或例程
  • 删除类定义或例程
  • 编译 IRIS 类或例程
  • 通过对表执行 SQL 查询来发现 IRIS 环境的属性

这些操作提供了访问 IRIS 源代码文件的机制。为了创建 IRIS 开发环境,应该了解此 API 并全面了解 IRIS 源代码文件如何在 IRIS 中使用。

这是一个特殊用途的 API。如果正在创建开发环境或处理类似的应用程序,例如类浏览器,可能会发现此 API 很有用。但是,它不是用于访问 IRIS 对象的通用 REST API

本文档描述了 IRIS 源代码文件 REST API 的版本 12IRIS 的未来版本可能支持此 REST API 的更高版本,提供额外的调用,但将始终能够调用早期版本。版本 1APIURL 中包含 /v1/,版本 2API 包含 /v2/。可以通过调用 G

0
0 120
文章 姚 鑫 · 八月 1, 2022 4m read

第十四章 手动创建 REST 服务(二)

指定数据格式

可以定义 REST 服务以处理不同格式的数据,例如 JSONXML、文本或 CSVREST 调用可以通过在 HTTP 请求中指定 ContentType 元素来指定它期望发送的数据的形式,并且可以通过在 HTTP 请求中指定 Accept 元素来请求返回数据格式。

DocServer 示例中,GetNamespaces() 方法检查 REST 调用是否使用以下内容请求 JSON 数据:

If $Get(%request.CgiEnvs("HTTP_ACCEPT"))="application/json"

本地化 REST 服务

REST 服务返回的任何字符串值都可以本地化,以便服务器以不同语言存储多个版本的字符串。然后,当服务接收到包含 HTTPAccept-Language 标头的 HTTP 请求时,服务会使用相应版本的字符串进行响应。

本地化 REST 服务:

  1. 在实现代码中,不要包含硬编码的文字字符串,而是使用 $$$Text 宏的实例,为宏参数提供如下值:
  • 默认字符串
  • (可选)该字符串所属的域(将字符串分组到域中时,本地化更易于管理)
  • (可选)默认字符串的语言代码

例如,而不是这个:

 set returnvalue="Hello world"
 set returnvalue=$$$TEXT("
0
0 84
文章 姚 鑫 · 七月 31, 2022 8m read

第十三章 手动创建 REST 服务(一)

本附录描述了如何通过继承 %CSP.REST 类来手动创建 REST 服务;此过程创建了一个手动编码的 REST 服务,它不能与所有 API 管理工具一起使用。

手动创建 REST 服务的基础知识

要手动定义 REST 服务,请执行以下操作:

  • 创建一个 REST 服务类 — %CSP.REST 的子类。在子类中:
    • 定义一个 URL 映射,该映射指定为 REST URLHTTP 方法执行的 IRIS 方法。
    • 可以选择指定 UseSession 参数。此参数控制每个 REST 调用是在其自己的 Web 会话下执行还是与其他 REST 调用共享一个会话。
    • (可选)覆盖错误处理方法。

如果想将实现代码与调度代码分开,可以在单独的类中定义实现 REST 服务的方法,并从 URL 映射中调用这些方法。

  • 定义一个使用 REST 服务类作为其调度类的 Web 应用程序。

要定义 Web 应用程序及其安全性,请转至 Web 应用程序页面(单击System Administration > Security > Applications > Web Applications)。

定义 Web 应用程序时,将 Dispatch Class 设置为 REST 服务类的名称。

此外,将应用程序的名称指定为 REST 调用的 URL 的第一部分。

0
0 108
文章 姚 鑫 · 七月 30, 2022 3m read

第十二章 使用中的 OpenAPI 属性

本附录列出了 API 管理工具在生成 REST 服务类时使用的 OpenAPI 2.0 规范的属性。此处未列出的属性将被忽略。有几个扩展属性;它们的名称以 x-ISC 开头。

Swagger

  • basePath

  • consumes

  • host

  • produces

  • definitions (请注意,API 管理工具在生成代码时不使用 Schema 对象的任何属性)

  • parameters (for details, see “Parameter Object”)

  • paths (for details, see “Path Item Object”)

  • info (for details, see “Info Object”)

  • swagger (must be "2.0")

有关这些属性的详细信息,请参阅 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#swagger-object

Info Object

  • title

  • description

  • x-ISC_RequiredResource (访问 REST 服务的任何端点所需的已定义资源及其访问模式 (resource:mode) 的逗号分隔列表)

  • ver

0
0 186
文章 Michael Lei · 七月 29, 2022 3m read

在这篇文章中,我试图找出多个领域来开发我们能够使用python和机器学习的功能。

每家医院都在努力利用技术和服务来提高其服务质量和效率。

医疗保健部门是一个非常大的、可供选择的服务领域,而python是做机器学习的最好技术之一。

在每个医院里,人们都会有一些感觉,如果这种感觉能够被计算机理解,使用技术就有机会提供更好的服务。

在这里,我们可以把这两者结合起来,在医疗部门,我正试图理解/识别各种选择,以提供更好的服务。

首先,我们可以尝试使用python的机器学习来识别人并了解他们目前的感受。比如,在医院信息系统中,每个病人至少有一张照片,使用该照片我们可以识别病人,然后一旦病人到达医院,使用视频监控和机器学习技术需要识别这个人的感觉。

在医院设施中会看到多种类型的感觉。

1)紧张

2)平静和冷静

3)   哭泣

4)  暴力的病人/亲属

5)  生病的病人

6)  高烧鉴定

像上面的情况,我们可以看到多种不同的类型。

如果一个已经登记的病人发高烧,那么使用闭路电视识别这个病人的情况,并捕捉温度热像仪,护理人员可以给予更好的支持,这在接待服务领域是非常大的区别。

如果这个发高烧的人已经是一个登记的病人,如果利用现有的照片识别这个病人,那么我们可以做多件事情。

1)如果该病人今天有预约,我们可以自动到达该病人处。

2)如果该病人被标记为自动到达,那么我

0
0 240
文章 姚 鑫 · 七月 29, 2022 2m read

第十一章 /api/mgmnt/ API 参考

此参考列出了 /api/mgmnt/ 服务中的端点,所有这些端点都适用于较新的 REST 服务。下表总结了端点并指出它们是否也适用于手动编码的 REST 服务。

EndpointSummaryApplies to NEWER REST Services?Applies to Manually-Coded REST Services?
DELETE /api/mgmnt/v2/:ns/:app删除 REST 服务YESno
GET /api/mgmnt/列出此服务器上启用 RESTWeb 应用程序YESYES
GET /api/mgmnt/v1/:ns/restapps列出命名空间中启用 RESTWeb 应用程序YESYES
GET /api/mgmnt/v1/:ns/spec/:app返回 REST 服务的 OpenAPI 2.0 规范noYES
GET /api/mgmnt/v2/列出此服务器上的 REST 服务(包括任何没有关联 Web 应用程序的服务)YESno
GET /api/mgmnt/v2/:ns列出命名空间中的 REST 服务(包括任何没有关联 Web 应用程序的服务)YESno
GET /api/mgmnt/v2/:ns/:a
0
0 76
文章 Jingwei Wang · 七月 29, 2022 33m read

什么时候使用索引

索引提供了一种机制,通过维护常用数据的分类子集来优化查询。确定哪些字段应该被编入索引需要一些思考:太少或错误的索引,关键查询会运行得太慢;太多的索引会减慢INSERT和UPDATE的性能(因为索引值必须被设置或更新)。

索引什么

为了确定添加索引是否能提高查询性能,从管理门户的SQL界面运行查询,并在Performance中注意 global引用的数量。添加索引,然后重新运行查询,注意 global引用的数量。一个有用的索引应该减少 global引用的数量。你可以通过使用%NOINDEX关键字作为WHERE子句或ON子句条件的前言来阻止索引的使用。

你应该对JOIN中指定的字段(属性)进行索引。例如,LEFT OUTER JOIN从左表开始,然后查看右表,因此,你应该对右表的字段进行索引。在下面的例子中,你应该为T2.f2编制索引。一个INNER JOIN应该在两个ON子句字段上都有索引。

  FROM Table1 AS T1 LEFT OUTER JOIN Table2 AS T2 ON T1.f1 = T2.f2

如果查询计划中的第一个项目是 "read master map",或者查询计划调用的模块的第一个项目是 "read master map",那么查询的第一个map就是master map而不是索引map。因为主图读取的是数据本身



0
0 197
文章 姚 鑫 · 七月 28, 2022 4m read

第十章 发现和记录 REST API

本章讨论如何发现实例上可用的 REST 服务以及如何为 REST 服务生成文档。

使用 /api/mgmnt 服务发现 REST 服务

/api/mgmnt 服务包括可用于发现 REST 服务类和启用 RESTWeb 应用程序的调用。

发现 REST 服务

要使用 /api/mgmnt 服务来发现实例上可用的 REST 服务,请使用以下 REST 调用:

  • 对于 HTTP 操作,选择或指定 GET
  • 对于 URL,请指定以下形式的 URL
http://localhost:52773/api/mgmnt/v2/

或者,如果只想检查一个命名空间:

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

其中 localhost 是服务器的名称,52773 是运行 IRISWeb 服务器端口,命名空间是要检查的命名空间。

(请注意,这些调用会忽略手动编码的 REST 服务。要发现手动编码的 REST 应用程序,请使用调用 GET /api/mgmnt/GET /api/mgmnt/:v1/:namespace/restapps。)

如果调用成功,IRISJSON 格式返回一个列出 REST 服务的数组。例如:

[
  {
    "name": "%Api.Mgmnt.v2",
0
0 136
文章 Frank Ma · 七月 28, 2022 2m read

应用集成平台市场上产品众多,商家专家观点纷纭,莫衷一是。Gartner公司从用户角度出发,搭建了Peer Insight “大众点评”平台,让用户能够为自己使用的产品发声,对各个产品打分。以下是来自用户的声音,供参考。

第一款产品是微软的BizTalk,综合得分3.9。

第二款产品是InterSystems的Ensemble,综合得分4.6。

第三款产品是IBM的WebSphere Enterprise Service Bus,综合得分3.8。

 BizTalk
 by MicroSoft
 Ensemble
 by InterSystems
 WebSphere
Enterprise Services Bus
by IBM
 

总体评价:57%的用户愿意推荐该产品

总体评价:88%的用户愿意推荐该产品

总体评价:55%的用户愿意推荐该产品

      

分项评分

分项评分 分项评分
综合能力得分
综合能力得分
综合能力得分
评估与签约
    3.3 定价灵活性

    4.0 理解需求的能力

评估与签约
    4.2 定价灵活性

    4.6 理解需求的能力

评估与签约
    3.5 定价灵活性

    4.0 理解需求的能力

集成与部署
  3.4 部署便利性
 





0
0 156
文章 Jingwei Wang · 七月 28, 2022 8m read

InterSystems SQL支持在InterSystems IRIS数据平台数据库中将流数据存储为BLOB(Binary Large Objects 二进制大对象)或CLOB(Character Large Objects字符大对象)的能力。

InterSystems SQL支持两种流字段:

  • 字符流:用于大量的文本。
  • 二进制流:用于图像、音频或视频。

BLOBs和CLOBs可以存储多达4GB的数据(JDBC和ODBC规范规定的限制)。除了在通过ODBC或JDBC客户端访问时如何处理字符编码转换(如Unicode到多字节)外,BLOB和CLOB的操作在各方面都是相同的:BLOB中的数据被视为二进制数据,决不转换为其他编码,而CLOB中的数据被视为字符数据,在必要时进行转换。

如果一个二进制流文件(BLOB)包含单一的非打印字符$CHAR(0),它被认为是一个空的二进制流。它相当于""空二进制流值:它存在(不是空的),但长度为0。

从对象的角度来看,BLOB和CLOBs被表示为流对象。更多信息请参见定义和使用类中的 "与流合作 "一章。

定义流数据字段

InterSystems SQL支持流字段的各种数据类型名称。这些InterSystems的数据类型名称是对应于以下的同义词。

  • 字符流:数据类型LONGVARCHAR,映射到%Stre
0
0 238
文章 Jingwei Wang · 七月 28, 2022 4m read

定义 Stored Procedures

可以使用以下方式定义stored procedures

  1. 使用DDL定义存储过程
  2. 使用类方法定义存储过程

使用DDL定义存储过程

CREATE PROCEDURE 可以创建一个查询,它总是作为一个存储过程被预测。一个查询可以返回一个单一的结果集。

CREATE PROCEDURE AgeQuerySP(IN topnum INT 10, IN minage INT 20)
BEGIN
SELECT TOP :topnum Name, Age FROM Sample.Person
WHERE Age > :minage;
END

列表中的每个参数声明包括(按顺序)。指定参数模式是IN(输入值),OUT(输出值),还是INOUT(修改值)。如果省略,默认的参数模式是IN,参数名称是区分大小写的。

CREATE QUERY 可以创建一个可以选择作为存储过程投射的查询。一个查询可以返回一个单一的结果集,这个查询可能是也可能不是作为存储过程公开的。要创建一个作为存储过程公开的查询,你必须指定PROCEDURE关键字作为其特征之一。你也可以使用CREATE PROCEDURE语句来创建一个作为存储过程公开的查询。

为了创建一个查询,你必须拥有%CREATE_QUERY管理权限,正如GRANT命令所指定的那样。如果

0
0 243
文章 姚 鑫 · 七月 27, 2022 3m read

第九章 REST 服务安全

如果 REST 服务正在访问机密数据,应该对服务使用身份验证。如果需要为不同的用户提供不同级别的访问权限,还要指定端点所需的权限。

REST 服务设置身份验证

可以对 IRIS REST 服务使用以下任何形式的身份验证:

  • HTTP 身份验证标头 — 这是 REST 服务的推荐身份验证形式。
  • Web 会话身份验证 — 其中用户名和密码在 URL 中的问号后面指定。
  • OAuth 2.0 身份验证 - 请参阅以下小节。

REST 应用程序和 OAuth 2.0

要通过 OAuth 2.0REST 应用程序进行身份验证,请执行以下所有操作:

  • 将包含 REST 应用程序的资源服务器配置为 OAuth 2.0 资源服务器。
  • 允许对 %Service.CSP 进行委派身份验证。
  • 确保将 Web 应用程序(用于 REST 应用程序)配置为使用委托身份验证。
  • %SYS 命名空间中创建一个名为 ZAUTHENTICATE 的例程。 提供了一个示例例程 REST.ZAUTHENTICATE.mac,可以复制和修改它。此例程是 GitHub (https://github.com/intersystems/Samples-Security) 上 Samples-Security 示例的一部分。可以按照“下载用于 IRIS 的示例”中的说明下载整个示例,但在
0
0 120
文章 姚 鑫 · 七月 25, 2022 6m read

第七章 在 REST 服务中支持 CORS

概述

本节提供 CORS 的概述以及如何在 IRIS REST 服务中启用 CORS 的概述。

CORS 简介

跨域资源共享 (CORS) 允许在另一个域中运行的脚本访问服务。

通常,当浏览器从一个域运行脚本时,它允许对同一个域进行 XMLHttpRequest 调用,但在对另一个域进行调用时不允许它们。此浏览器行为限制某人创建可滥用机密数据的恶意脚本。恶意脚本可能允许用户使用授予用户的权限访问另一个域中的信息,但随后在用户不知道的情况下,将机密信息用于其他用途。为了避免这种安全问题,浏览器一般不允许这种跨域调用。

在不使用跨域资源共享 (CORS) 的情况下,具有访问 REST 服务的脚本的网页通常必须与提供 REST 服务的服务器位于同一域中。在某些环境中,将带有脚本的网页与提供 REST 服务的服务器放在不同的域中是很有用的。 CORS 支持这种安排。

下面提供了浏览器如何使用 CORS 处理 XMLHttpRequest 的简化描述:

  1. DomOne 中的网页中的脚本包含对 DomTwo 域中的IRIS REST 服务的 XMLHttpRequestXMLHttpRequest 具有 CORS 的自定义标头。
  2. 用户查看此网页并运行脚本。用户的浏览器检测到与包含网页的域不同的域的 XMLHttpRequest
  3. 用户的浏览器
0
0 119
文章 Jingwei Wang · 七月 25, 2022 4m read

 

本章介绍了使用InterSystems IRIS作为企业服务总线,描述了InterSystems IRIS ESB架构,并提供了部署ESB的概述。

企业服务总线的概念

企业服务总线(ESB)提供了一个单点来访问和管理具有SOAP、REST或其他网络API的应用程序。ESB提供了以下功能。

  • 提供一个中心来发现和访问服务。
  • 将应用程序与服务隔离开来,允许你在一个地方改变服务的描述,而不需要更新所有依赖它的应用程序。例如,你可以改变服务器的地址,甚至服务的API,并在ESB中处理这些变化。这为你的应用程序提供了协议独立性。如果一个应用程序是使用SOAP API开发的,但一个新的服务用REST API提供了额外的功能,ESB可以使新的REST服务作为REST和SOAP API可用,允许你添加新服务的功能,同时保持对现有应用程序的兼容性。
  • 提供一种机制来组织和跟踪企业使用的应用程序以及这些应用程序之间的依赖关系。。

ESB架构

InterSystems IRIS ESB架构有以下组成部分。

  • 将传入的请求与服务器连接起来的路由机制。这是由具有专门业务服务(BS)和业务操作(BO)的 production实现的,也可以选择业务流程(BP)。
  • 公共服务注册中心--这个服务注册中心可以通过ESB公共REST API被ESB客户访


0
0 521
公告 Michael Lei · 七月 25, 2022

Hi 大家好!

我们很荣幸地宣布InterSystems 将在剑桥总部举办 推动女性健康-FemTech不止是利基市场 高层论坛,论坛将在线上线下同步举行!

⏱ 时间: 7月 29日, 5:30 AM – 7:30 AM ,北京时间(July 28,5:30 PM – 7:30 PM ,EDT/美国东部时间)
📍 地点: InterSystems 总部,1 Memorial Drive, Cambridge, MA

Women's Health - FemTech:  Much More than A Niche Market

0
0 124
文章 姚 鑫 · 七月 24, 2022 2m read

第六章 修改规范(SPEC)类

概述

下表列出了修改规范类的原因并简要总结了所需的更改:

原因改变
更新或替换规范手动修改 OpenAPI XData 块或通过重新生成规范类。
启用 REST 服务以支持 CORS手动修改 OpenAPI XData 块;还添加一个类参数并创建一个自定义调度超类。
启用 REST 服务以支持 Web 会话添加类参数。
指定使用端点所需的权限手动修改 OpenAPI XData 块。
覆盖默认内容类型、响应字符集或输入流处理添加类参数。
为服务方法指定一个非默认名称手动修改 OpenAPI XData 块。

无论何时编译规范类,编译器都会在同一个包中重新生成调度类并更新实现类。

覆盖内容类型、响应字符集或输入流处理

只需将类参数添加到规范类并重新编译,就可以覆盖 REST 服务的几个关键方面。

  • 默认情况下,REST 服务需要 application/json 内容类型。要覆盖它,请将以下内容添加到规范类:
Parameter CONTENTTYPE = "some-content-type";

其中 some-content-typeMIME 内容类型。

  • 默认情况下,REST 服务的响应消息采用 UTF-8 格式。要覆盖它,请将以下内容添加到规范类:
Parameter CHARS
0
0 139
文章 姚 鑫 · 七月 23, 2022 2m read

第五章 修改实现(IMPL)类

本章讨论如何修改 REST 服务的实现类。

初始方法定义

实现类最初包含存根方法,如下例所示:

/// Returns all pets from the system that the user has access to<br/>
/// The method arguments hold values for:<br/>
///     tags, tags to filter by<br/>
///     limit, maximum number of results to return<br/>
ClassMethod findPets(tags As %ListOfDataTypes(ELEMENTTYPE="%String"), limit As %Integer) As %Stream.Object
{
    //(Place business logic here)
    //Do ..%SetStatusCode(<HTTP_status_code>)
    //Do ..%SetHeader(<name>,<value>)
    //Quit (Place response here) ; response may be a string, stream or dynamic object
}

在每种情况下,这些存

0
0 135
文章 姚 鑫 · 七月 22, 2022 3m read

第四章 使用 %REST.API 类创建 REST 服务

本章介绍如何使用 %REST.API 类来创建、更新和删除 REST 服务。

使用 %REST.API 类创建或更新 REST 服务

创建 REST 服务的推荐方法是从 REST 服务的 OpenAPI 2.0 规范开始,并使用它来生成 REST 服务类。要使用 %REST.API 类执行此操作:

  1. 获取 REST 服务的 OpenAPI 2.0 规范,采用 JSON 格式,并将规范保存为文件。该文件必须是 UTF-8 编码的。
  2. 在要定义 REST 服务的命名空间中,使用该文件创建 %DynamicObject 的实例。
  3. 然后调用 %REST.API 类的 CreateApplication() 方法。此方法具有以下签名:
classmethod CreateApplication(applicationName As %String, 
                              swagger As %DynamicObject = "", 
                              ByRef features, 
                              Output newApplication As %Boolean, 
                   
0
0 145
公告 Claire Zheng · 十一月 22, 2021

亲爱的社区开发者们,大家好!

现在参与Gartner Peer Insight同业评审对我们的产品做出评价,可获得价值 $25 美元的礼品卡。评论观点需中立客观(InterSystems员工不允许参加)并被Gartner审核通过。点击此处开始: https://gtnr.it/3ulVX4K  。

对流程不熟悉的同学,可以参考一下我们此前发布的一篇旧贴

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

在创建一个或多个立方体后,你通常会创建并打包一组透视表和仪表盘,而用户通常会根据需要创建新的透视表和仪表盘。

本章简要地引导你了解创建透视表和仪表盘的过程。它包括以下几个步骤。

  • 创建透视表
  • 创建一个仪表盘
  • 导出并打包这些项目

创建透视表

在本教程的前面,我们创建了一个使用Patients cube的透视表。现在让我们创建使用你的新立方体Tutorial的透视表。

  1. 进入分析器。
  2. 打开Tutorial立方体。
  3. 展开AgeD维度。
  4. 把Age Group拖到行中。
  5. 将Age Bucket拖到Age Group的子级
  6. 拖动 Count 到列。
  7. 将 "All Patients "拖到 "行 "中,在底部。
  8. 现在 "行 "框看起来像这样。
  9. 点击保存。
  10. 系统会显示一个对话框,你可以在其中指定数据透视表的名称。
    • 保存数据透视表并给它一个名字。这里,我们保存的是检索数据的基础查询,以及按照你选择的方式显示数据所需的信息。 注意:我们不是在保存数据。
    • 对于文件夹,键入Tutorial
    • 对于透视表名称,键入Patients by Age Group
    • 单击 "确定"。
  11. 创建另一个透视表,如下所示。
    • 对于行,使用Diagnoses
    • 对于列,使用Count和Avg Age
    • 点击保存。
    • 对于文件夹,选择或输入Tutoria
0
0 202
文章 Jingwei Wang · 七月 21, 2022 5m read

一个主题区是一个子立方体,可以选择覆盖项目的名称。你定义一个主题区是为了使用户能够关注较小的数据集,出于安全原因或其他原因。本章讨论了以下主题。

简介

在本教程中,我们创建了两个主题区域,按邮政编码划分患者:

  • Patient Set A: 居住在邮政编码为32006, 32007, or 36711区域的患者
  • Patient Set B: 居住在邮政编码为34577 or 38928区域的患者

创建主题领域

要创建主题区域,请做以下工作。

  1. 在模型中,点击 "新建"。
  2. 选中 "主题区域"。
  3. 对于主题区名称,键入Patient Set A
  4. 对于主题区的类名,输入 Tutorial.SubjectA
  5. 对于基础立方体,点击浏览并选择 Tutorial。
  6. 单击 OK。 
  7. 在一个单独的浏览器标签或窗口中,访问分析器,然后做以下工作。
  8. 展开HomeD。
  9. 把ZIP Code放到过滤器框中。这就在数据透视表的正上方增加了一个过滤框。
  10. 在该过滤框中,点击搜索按钮,然后选择 32006, 32007, 和 36711。
  11. 然后点击'为透视表显示当前查询'按钮(笔记本带一个笔的图标)
  12. 系统会显示一个对话框,显示分析器所使用的MDX查询。
    SELECT  FROM [PPatients] 
    %FILTER %OR({[HOMED].[H1].
0
0 168
文章 Jingwei Wang · 七月 21, 2022 14m read

增加level

到目前为止,我们所创建的每个维度都包含一个具有一个level的层级结构。在这一节中,我们将在HomeD维度的层级结构中添加一个level。

  1. 在Tutorial模型中,为HomeD维度添加一个level,如下所示。
  2. 在类浏览器中,展开HomeCity。
  3. 拖动PostalCode并把它放到HomeD维度的H1层级结构上。这一步是在City 层之后添加新的PostalCode层。
  4. 点击PostalCode,在详细信息栏中,将名称改为ZIP Code。
  5. 编译这个立方体。
  6. Build这个立方体。
  7. 进入分析器。
  8. 展开左边的HomeD维度。将ZIP Code级别显示为行。 注意,有些成员有相同的名字。有时,有多个成员具有相同的名字是正确的。然而,在这种情况下,这是一个错误,因为邮政编码是唯一的。 一个级别只有两种方式可以拥有多个同名的成员。
    • 级别名称是基于一个级别属性,而这个属性是不唯一的。(对于一个例子,请看我们在前一章定义的医生级别)。
    • 该级别有一个父级别。当DeepSee创建一个级别的成员时,它不仅考虑源属性或表达式;它还考虑父成员。

    在现实中,邮政编码和城市之间存在着多对多的关系,所以两者都不是对方的父级。

    当我们添加邮政编码级别时,我们把它放在城市级别之后,这意味着城市是邮政编码的父级。这影响了系统为ZIP Code生成成员的方

0
0 249
文章 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和度量

  1. 将以下项目从类浏览器(左侧区域)拖放到模型浏览器(中间区域)的度量标题下。这将创建名为Age和TestScore的度量,基于这些名字的类属性。
    • Age
    • TestScore
  2. 对TestScore度量做如下修改。
0
0 226