빌딩 블록 > 공통 빌딩 블록 > 데이터베이스 연결 빌딩 블록 > 질의 서비스에 JSON 필터 사용
질의 서비스에 JSON 필터 사용
JSON 필터는 여러 질의 서비스에서 사용할 수 있습니다. 다음 섹션에서는 선택적 filter 입력 매개 변수를 사용하는 질의 서비스에서 이러한 JSON 필터를 사용하는 방법을 설명합니다.
지원되는 키 및 연산자
JSON 필터에서 사용할 수 있는 키와 연산자는 다음과 같습니다.
select
as
filters
다음 type 값(논리 연산자) 포함:
EQ - 같음
NE - 같지 않음
LT - 보다 작음
LE - 보다 작거나 같음
GT - 보다 큼
GE - 보다 크거나 같음
AND - 및
OR - 또는
IN - 포함
NOTIN - 속하지 않음
LIKE - 유사
NOTLIKE - 유사하지 않음
BETWEEN - 사이
NOTBETWEEN - 사이에 있지 않음
TAGGED - 태그 지정됨
NOTTAGGED - 태그 지정되지 않음
MATCHES - 일치
NOTMATCHES - 일치하지 않음
MISSINGVALUE - 누락된 값
NOTMISSINGVALUE - 값이 누락되지 않음
isCaseSensitive - true인 경우 대/소문자 구분 비교. EQ, NE, LIKE, NOTLIKE, MATCHESNOTMATCHES와 함께 사용됩니다.
sorts
isAscending - true인 경우 오름차순 정렬, false인 경우 내림차순 정렬
isCaseSensitive - true인 경우 대/소문자 구분 정렬
joins, 다음 type 값(조인 유형) 포함:
INNER
LEFT
RIGHT
FULL
dataShapeName - 열(fieldName)이 있는 데이터 셰이프의 이름
fieldName - 데이터 셰이프에 있는 열 이름
value 또는 values - 데이터베이스의 값 또는 관심 대상 값
alias - 질의 서비스에서 질의하는 데이터 셰이프의 별칭입니다. 별칭이 지정된 경우 select, filters, joinssorts 키에서 alias를 사용해야 합니다.
function:
MIN
MAX
COUNT - DATETIME 필드에 대해 지원되지 않습니다.
AVG
SUM
groupBy
* 
다음 예제 필터에서 PTC.SCA.SCO.JobOrderProcessingResourceRequirementPTC.SCA.SCO.JobOrderName 필드는 해당 데이터 셰이프에 추가된 사용자 정의 속성입니다. 필터를 표시된 바와 같이 사용하려면 데이터 셰이프에 해당 필드를 추가해야 합니다.
JSON 필터에 사용자 정의 속성을 지정할 때 다음 예제와 같이 객체에 대한 기본 데이터 셰이프를 지정할 수 있습니다. 사용자 정의 속성을 추가하는 데 사용되는 관련 _AP 데이터 셰이프를 지정할 필요는 없습니다.
자세한 내용은 데이터 모델 엔티티에 사용자 정의 속성 추가 항목을 참조하십시오.
선택
select 키에서 질의에 의해 반환하려는 특정 데이터 셰이프에서 특정 필드를 선택할 수 있습니다. 각 객체가 질의에 의해 반환될 필드에 대해 dataShapeNamefieldName을 지정하는 JSON 배열을 구성합니다. dataShapeName은 기본 데이터 셰이프(서비스가 실행 중인 데이터 셰이프)의 이름 또는 조인에 의해 질의에 포함된 다른 데이터 셰이프의 이름이 될 수 있습니다. 데이터 셰이프에 대해 alias가 지정된 경우 select 키 내에서 해당 특정 데이터 테이블을 참조하려면 언제든지 alias를 사용합니다. 데이터 셰이프에 대해 정의된 alias가 없으면 질의는 기본적으로 해당 데이터 테이블에 대해 생성된 고유한 별칭 값을 사용합니다. alias를 지정하지 않고 JSON이 동일한 데이터 셰이프를 참조할 때마다 해당 데이터 테이블에 대해 생성된 동일한 고유한 별칭 값이 사용됩니다.
as가 사용되면 출력 인포테이블은 as 값을 필드 이름으로 사용하여 해당 select 키에 대한 필드를 추가합니다.
select 키 내에서 함수(MIN, MAX, COUNT, AVG, SUM)를 사용할 수 있습니다. COUNT 함수가 포함된 예제 JSON 필터는 여기에서 사용할 수 있습니다.
* 
select 키에 집계 함수가 사용되고 select 키에 둘 이상의 select 객체가 있는 경우 groupBy도 필터에 사용해야 합니다. 그렇지 않으면 질의가 실패합니다.
예를 들어, JSON 필터에 다음 select 키를 사용하여 GetJobOrders 서비스가 작업 지시서 처리 리소스 요구 사항의 이름, 작업 지시서의 이름 및 ID, 처리 리소스의 이름 등을 반환하도록 할 수 있습니다.
{
"select": [
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "ID"
},
{
"dataShapeName": "PTC.SCA.SCO.ProcessingResource",
"fieldName": "Name"
}
]
}
앞선 예제에서 PTC.SCA.SCO.JobOrderProcessingResourceRequirementPTC.SCA.SCO.JobOrder 모두에 있는 Name 필드는 데이터 셰이프에 추가된 추가 속성입니다.
* 
PTC.DBConnection.QueryUtils 사물의 BuildSelectFromDataShapes 서비스를 사용하여 지정된 데이터 셰이프에 대한 select 키를 빌드할 수 있습니다. 다음 예제 서비스 입력은 PTC.SCA.SCO.JobOrderPRocessingResourceRequirement, PTC.SCA.SCO.JobORderPTC.SCA.SCO.ProcessingResource 데이터 셰이프에 대한 select 키
{
"dataShapes": [{
"name": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement"
},
{
"name": "PTC.SCA.SCO.JobOrder"
},
{
"name": "PTC.SCA.SCO.ProcessingResource"
}
]
}
를 생성합니다.
Filters
filters 키를 사용하여 특정 값과 일치하는 기록에 대한 질의 결과를 필터링할 수 있습니다. filters라는 JSON 배열을 구성하고 쉼표로 각 필터를 구분한 후 AND 또는 OR 연산자를 연결하여 여러 필터를 함께 사용할 수 있습니다. 각 필터는 dataShapeName, fieldName, typevalue 또는 values(IN 연산자의 경우)를 지정합니다. 그런 다음 단일 필터와 여러 필터 모두 다른 filters 키 아래에서 그룹화해야 합니다.
dataShapeName은 기본 데이터 셰이프(서비스가 실행 중인 데이터 셰이프)의 이름 또는 조인에 의해 질의에 포함된 다른 데이터 셰이프의 이름이 될 수 있습니다. 필터에 dataShapeName이 지정되지 않은 경우, 서비스가 실행 중인 데이터 셰이프로 간주됩니다. 데이터 셰이프에 대해 alias가 지정된 경우 filters 키 내에서 해당 특정 데이터 테이블을 참조하려면 언제든지 alias를 사용합니다. 데이터 셰이프에 대해 정의된 alias가 없으면 질의는 기본적으로 해당 데이터 테이블에 대해 생성된 고유한 별칭 값을 사용합니다. alias를 지정하지 않고 JSON이 동일한 데이터 셰이프를 참조할 때마다 해당 데이터 테이블에 대해 생성된 동일한 고유한 별칭 값이 사용됩니다.
예를 들어, JSON 필터에 다음 filters 키를 사용하여 작업 지시서가 작성 또는 업데이트된 기록 데이터 데이터베이스 테이블에 GetHistoricalData 서비스가 모든 결과를 반환하도록 할 수 있습니다.
{
"filters": {
"filters": [
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "DataShapeName",
"type": "EQ",
"value": "PTC.SCA.SCO.JobOrder",
"isCaseSensitive": true
},
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "ReferenceKey",
"type": "IN",
"values": [1,2]
}
],
"type": "AND"
}
}
Sorts
sorts 키를 사용하면 특정 데이터 셰이프 필드(dataShapeNamefieldName)를 기준으로 질의 결과를 정렬하고, 오름차순 또는 내림차순(isAscending)으로 정렬하며, 필터가 대/소문자를 구분(isCaseSensitive)하는지 여부를 결정할 수 있습니다. 배열에 여러 정렬 객체를 쉼표로 구분하여 포함시켜 여러 필드를 정렬할 수 있습니다.
dataShapeName은 기본 데이터 셰이프(서비스가 실행 중인 데이터 셰이프)의 이름 또는 조인에 의해 질의에 포함된 다른 데이터 셰이프의 이름이 될 수 있습니다. dataShapeName이 지정되지 않은 경우, 서비스가 실행 중인 데이터 셰이프로 간주됩니다. 데이터 셰이프에 대해 alias가 지정된 경우 sorts 키 내에서 해당 특정 데이터 테이블을 참조하려면 언제든지 alias를 사용합니다. 데이터 셰이프에 대해 정의된 alias가 없으면 질의는 기본적으로 해당 데이터 테이블에 대해 생성된 고유한 별칭 값을 사용합니다. alias를 지정하지 않고 JSON이 동일한 데이터 셰이프를 참조할 때마다 해당 데이터 테이블에 대해 생성된 동일한 고유한 별칭 값이 사용됩니다.
예를 들어, 다음 sorts 키를 GetJobOrders 서비스의 JSON 필터에 사용하여 작업 지시서 처리 리소스 요구 사항의 이름별로 결과를 오름차순으로 정렬한 다음, 작업 지시서 이름별로 내림차순으로 정렬할 수 있습니다(작업 지시서 처리 리소스 요구 사항이 조인에 의해 질의에 포함되었다고 가정).
{
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
}
조인
조인은 데이터 셰이프 간의 관련 필드를 기준으로 둘 이상의 데이터 셰이프에서 행을 결합하는 데 사용됩니다. 선택 키나 정렬 키, 필터 키에서 데이터 셰이프의 필드를 사용하려면 조인을 통해 질의에 기본 데이터 셰이프가 아닌 해당 데이터 셰이프를 포함합니다.
각 조인은 조인 유형(type), 소스 또는 왼쪽 데이터 셰이프 및 필드 이름(sourceDataShapeNamesourceFieldName), 대상 또는 오른쪽 데이터 셰이프 및 필드 이름(targetDataShapeNametargetFieldName)으로 구성됩니다.
조인의 소스 및 대상 데이터 셰이프에 각각 sourceAliastargetAlias를 사용합니다. targetAlias는 고유해야 합니다. sourceAlias는 질의에 대한 기본 alias 또는 이전 targetAlias를 참조해야 합니다. 데이터 셰이프에 대해 정의된 sourceAlias 또는 targetAlias가 없으면 질의는 기본적으로 해당 데이터 테이블에 대해 생성된 고유한 별칭 값을 사용합니다. soureAlias 또는 targetAlias를 지정하지 않고 JSON이 동일한 데이터 셰이프를 참조할 때마다 해당 데이터 테이블에 대해 생성된 동일한 고유한 별칭 값이 사용됩니다.
다음 유형의 조인이 지원됩니다. INNER, LEFT, RIGHTFULL.
INNER - 내부 조인은 두 데이터 셰이프 모두에서 일치하는 값이 있는 모든 기록을 반환합니다.
LEFT - 왼쪽 조인은 왼쪽(소스) 데이터 셰이프의 모든 기록과 오른쪽(대상) 데이터 셰이프의 일치하는 기록을 반환합니다. 일치하는 항목이 없는 경우, 조인의 오른쪽(대상) 결과는 NULL입니다.
RIGHT - 오른쪽 조인은 오른쪽(대상) 데이터 셰이프의 모든 기록과 왼쪽(소스) 데이터 셰이프의 일치하는 기록을 반환합니다. 일치하는 항목이 없는 경우, 조인의 왼쪽(소스) 결과는 NULL입니다.
FULL - 전체 조인은 왼쪽(소스) 또는 오른쪽(대상) 데이터 셰이프에 일치하는 항목이 있는 모든 기록을 반환합니다.
조인에 대한 sourceAliastargetAlias 값이 다를 경우 자체 조인이 지원됩니다. 자체 조인이 기본 데이터 셰이프에 있는 경우 sourceAlias는 기본 데이터 셰이프의 alias 값과 일치해야 합니다.
예를 들어, JSON 필터에 다음 joins 키를 사용하여 GetJobOrders 서비스가 작업 지시서의 UID가 작업 지시서 처리 리소스 요구 사항의 JobOrderUID 필드와 일치하는 모든 기록과 작업 지시서 처리 리소스 요구 사항의 ProcessingResourceUID 필드가 처리 리소스의 UID 필드와 일치하는 모든 기록을 반환하도록 할 수 있습니다.
{
"joins": [
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrder",
"sourceFieldName": "UID",
"targetDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"targetFieldName": "JobOrderUID"
},
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"sourceFieldName": "ProcessingResourceUID",
"targetDataShapeName": "PTC.SCA.SCO.ProcessingResource",
"targetFieldName": "UID"
}
]
}
그룹화 기준
groupBy 키를 사용하면 특정 데이터 셰이프 필드(dataShapeNamefieldName)에 따라 출력의 행을 요약 행으로 집계할 수 있습니다. dataShapeName은 기본 데이터 셰이프(서비스가 실행 중인 데이터 셰이프)의 이름 또는 조인에 의해 질의에 포함된 다른 데이터 셰이프의 이름이 될 수 있습니다. dataShapeName이 지정되지 않은 경우, 서비스가 실행 중인 데이터 셰이프로 간주됩니다. groupBy 키는 일반적으로 함수(MIN, MAX, COUNT, AVG, SUM)와 함께 사용됩니다.
데이터 셰이프에 대해 alias가 지정된 경우 groupBy 키 내에서 해당 특정 데이터 테이블을 참조하려면 언제든지 alias를 사용합니다. 데이터 셰이프에 대해 정의된 alias가 없으면 질의는 기본적으로 해당 데이터 테이블에 대해 생성된 고유한 별칭 값을 사용합니다. alias를 지정하지 않고 JSON이 동일한 데이터 셰이프를 참조할 때마다 해당 데이터 테이블에 대해 생성된 동일한 고유한 별칭 값이 사용됩니다.
예를 들어 다음 groupBy 키를 질의 서비스의 JSON 필터에서 사용하여 이유 유형의 이름으로 결과를 그룹화할 수 있습니다.
{
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name"
}
}
JSON 필터 예
예 1: 다음 예에서는 GetHistoricalData 서비스와 함께 사용할 수 있는 필터를 보여줍니다. 이 필터는 작업 지시서가 작성된 기록 데이터 데이터베이스의 모든 결과를 반환한 다음 각 작업 지시서가 작성된 시간을 기준으로 결과를 오름차순으로 정렬합니다.
{
"filters": {
"filters": [
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "DataShapeName",
"type": "EQ",
"value": "PTC.SCA.SCO.JobOrder"
},
{
"dataShapeName": "PTC.DBConnection.HistoricalData",
"fieldName": "ReferenceKey",
"type": "EQ",
"value": 1
}
],
"type": "AND"
},
"sorts": [
{
"fieldName": "TimeStamp",
"isAscending": true,
"isCaseSensitive": false
}
]
}
예 2: 다음 예에서는 GetJobOrders 서비스와 함께 사용할 수 있는 필터를 보여줍니다. 이 필터를 사용할 경우:
각 결과에 대해 작업 지시서의 NameID, 관련 처리 리소스의 Name, 그리고 관련 작업 지시서 처리 리소스 요구 사항의 Name이 반환됩니다.
결과가 ID 값이 WC1인 처리 리소스에 대해서만 필터링됩니다.
반환된 결과는 작업 지시서의 UID가 작업 지시서 처리 리소스 요구 사항의 JobOrderUID 필드와 일치하며 작업 지시서 처리 리소스 요구 사항의 ProcessingResourceUID 필드가 처리 리소스의 UID 필드와 일치하는 기록에 대한 것입니다.
결과가 작업 지시서 처리 리소스 요구 사항의 Name을 기준으로 오름차순으로 정렬된 다음, 작업 지시서의 Name을 기준으로 내림차순으로 정렬됩니다.
{
"select": [
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name"
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "ID"
},
{
"dataShapeName": "PTC.SCA.SCO.ProcessingResource",
"fieldName": "Name"
}
],
"filters": {
"filters": [
{
"dataShapeName": "PTC.SCA.SCO.ProcessingResource",
"fieldName": "ID",
"type": "EQ",
"value": "WC1"
}
],
"type": "AND"
},
"joins": [
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrder",
"sourceFieldName": "UID",
"targetDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"targetFieldName": "JobOrderUID"
},
{
"type": "INNER",
"sourceDataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"sourceFieldName": "ProcessingResourceUID",
"targetDataShapeName": "PTC.SCA.SCO.ProcessingResource",
"targetFieldName": "UID"
}
],
"sorts":[
{
"dataShapeName": "PTC.SCA.SCO.JobOrderProcessingResourceRequirement",
"fieldName": "Name",
"isAscending": true,
"isCaseSensitive": false
},
{
"dataShapeName": "PTC.SCA.SCO.JobOrder",
"fieldName": "Name",
"isAscending": false,
"isCaseSensitive": false
}
]
}
예제 3: 다음 예제는 PTC.ReasonCode.ReasonCategory 데이터 셰이프를 질의의 기본 데이터 셰이프로 질의할 때 사용할 수 있는 필터를 보여줍니다. 이 필터에는 as 키, COUNT 함수 및 groupBy가 포함됩니다.
{
"select": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "count",
"function": "COUNT"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name",
"as": "typeName"
}
],
"joins": [
{
"type": "LEFT",
"sourceDataShapeName": "PTC.ReasonCode.ReasonCategory",
"sourceFieldName": "reasonTypeUid",
"targetDataShapeName": "PTC.ReasonCode.ReasonType",
"targetFieldName": "uid"
}
],
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonType",
"fieldName": "name"
}
]
}
예제 4: 다음 예제는 PTC.ReasonCode.ReasonCategory 데이터 셰이프를 질의의 기본 데이터 셰이프로 질의할 때 사용할 수 있는 필터를 보여줍니다. 이 필터에는 sourceAliastargetAlias, as 키, COUNT 함수 및 groupBy를 사용하는 PTC.ReasonCode.ReasonCategory 데이터 셰이프에 대한 자체 조인이 포함됩니다.
{
"alias": "ReasonCategory1",
"select": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "name",
"alias": "ReasonCategory1"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "name2",
"alias": "ReasonCategory2"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"as": "countName",
"function": "COUNT",
"alias": "ReasonCategory1"
}
],
"filters": {
"filters": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"type": "EQ",
"value": "Scrap",
"alias": "ReasonCategory1"
}
],
"type": "AND"
},
"joins": [
{
"type": "LEFT",
"sourceDataShapeName": "PTC.ReasonCode.ReasonCategory",
"sourceFieldName": "uid",
"sourceAlias": "ReasonCategory1",
"targetDataShapeName": "PTC.ReasonCode.ReasonCategory",
"targetFieldName": "uid",
"targetAlias": "ReasonCategory2"
},
{
"type": "LEFT",
"sourceDataShapeName": "PTC.ReasonCode.ReasonCategory",
"sourceFieldName": "reasonTypeUid",
"sourceAlias": "ReasonCategory1",
"targetDataShapeName": "PTC.ReasonCode.ReasonType",
"targetFieldName": "uid",
"targetAlias": "ReasonType"
}
],
"groupBy": [
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"alias": "ReasonCategory1"
},
{
"dataShapeName": "PTC.ReasonCode.ReasonCategory",
"fieldName": "name",
"alias": "ReasonCategory2"
}
]
}
질의에 필터를 사용하는 방법에 대한 추가 예제는 ThingWorx 도움말 센터의 질의 서비스의 질의 매개 변수를 참조하십시오. 참고 - 이 항목에서 설명한 NearNotNear 필터는 JSON 필터에서 지원되지 않습니다.
도움이 되셨나요?