1. 윈도우 원격 접속 활성화

설정 > '원격' 검색

원격 데스크톱 설정에서 아래 빨간줄 친 2가지 항목을 점검

 

2. RDP 설정 확인 및 계정 추가

여기 들어가는 ID와 비밀번호는 VM 윈도우의 계정과 비밀번호다.

 

3. RDP 접속 설정하기

1 ) PC 이름에는 Host Address를 넣어준다.

내부망일 경우 IP주소를, 외부망일 경우 DDNS를 넣어준다. 공유기 DDNS를 이용하려면 공유기 DDNS를, 시놀로지 DDNS를 이용하려면 시놀로지 DDNS를 넣는다.

 

2 ) User account에는 2번에서 설정한 계정을 넣어준다. 비워두게 되면 매 접속 시 윈도우 ID와 비밀번호를 입력해줘야한다.

 

3 ) 'Optimize for Retina displays'와 'Update the session resolution on resize'를 체크해준다. ('Fit session to window'는 'Optimize~~'체크하면 저렇게 자동으로 음영 체크 된다.) 이렇게 해줘야 창 크기를 조절 시 해상도가 조절되고, 레티나 디스플레이에 맞춰 비율을 조정해준다.

 

DAX로 계산을 하면 숫자가 커도 ',' 콤마가 찍히지 않는다.

다음과 같이 포맷팅을 해줌으로써 해결할 수 있다.

기본 DAX 결과
> 1234567

FORMAT(DAX결과, "#,##0")
> 1,234,567

FORMAT(DAX결과, "$ #,##0")
> $ 1,234,567

FORMAT(DAX결과, "#,##0 (m/s)")
> 1,234,567 (m/s)

FORMAT(A/B, "##0.00 %") // %를 붙이면 알아서 100을 곱해주기 때문에 DAX 수식에 100을 곱하지 않아도 된다.
> 67.21 %

1. FROM
2. ON
3. JOIN
4. WHERE
5. GROUP BY
6. WITH CUBE or WITH ROLLUP
7. HAVING
8. SELECT
9. DISTINCT
10. ORDER BY
11. TOP

join을 할 때는 SQL 실행 순서를 고려하자

SQL Error [8101] [S0001]: 테이블 'OOO'에 있는 ID 열의 명시적 값은 열 목록이 사용되고 IDENTITY_INSERT가 ON일 때만 지정할 수 있습니다.

Auto Increment 설정이 되어있는데 값을 임의로 넣으려 할 때 발생하는 에러다.

다음과 같이 ON/OFF를 통해 해결한다.

 

1. 테이블에 직접 Insert 시

-- 1. 쓰기 작업 켜기
SET IDENTITY_INSERT 테이블명 ON;

-- 2. 값 입력하기
INSERT INTO 테이블명
(IDX, 컬럼1, 컬럼2)
VALUES(1, 값1, 값2);

-- 3. 쓰기작업 끄기
SET IDENTITY_INSERT 테이블명 OFF;

 

2. 테이블 복사시

-- 1. 쓰기 작업 켜기
SET IDENTITY_INSERT 타겟테이블명 ON;

-- 2. 값 입력하기
INSERT INTO 타겟테이블명
(IDX, 컬럼1, 컬럼2)
SELECT *
FROM 원본테이블명 origin
WHERE origin.IDX > 500;

-- 3. 쓰기작업 끄기
SET IDENTITY_INSERT 타겟테이블명 OFF;

주의 : 일반적으로 테이블 복사할 때 처럼 '*'을 써서 하면 에러가 발생한다. 컬렴명을 명시적으로 넣어주도록 한다.

INSERT INTO 타겟테이블명
SELECT *
FROM 원본테이블명 origin
WHERE origin.IDX > 500;

이걸 그대로 쓰면 에러남, 아래와 같이 명시해준다.

INSERT INTO 타겟테이블명 
(IDX, 컬럼1, 컬럼2)
SELECT *
FROM 원본테이블명 origin
WHERE origin.IDX > 500;

 

참고로 DBeaver 기준, 1~3 단계는 각각 쿼리를 실행하지 않고 ';'로 종료를 구분지어 3개의 쿼리를 작성한 다음 드래그하고 한 번에 실행하면 된다.

 

Tag. 다중쿼리, 쿼리 여러줄, 복수 쿼리, 쿼리 다중, 쿼리 다중 실행, 쿼리 다중실행, 쿼리 복수 실행

'개발자 > Database & SQL' 카테고리의 다른 글

SQL 실행 순서  (0) 2021.01.07
DBeaver SQL 키워드 자동 대문자  (0) 2020.12.30
SQL View 만들기  (0) 2020.12.29
SQL 마지막 날짜 데이터만 가져오기  (0) 2020.12.24
SQL 변수 사용에 따른 속도  (0) 2020.12.23

1. Command + ',' 를 눌러서 설정에 들어간다

 

2. 'sql'을 검색 'SQL 포맷(SQL Formatting)'에 가서 'Keyword case : Upper'로 바꾼다.

 

Tag. dbeaver 대문자, Dbeaver 대문자, DBeaver 대문자, dbeaver uppercase, Dbeaver uppercase, DBeaver uppercase, dbeaver upper case, Dbeaver upper case, DBeaver upper case

Stored Procedure(SP)는 PreparedStatement를 사용하는 것 처럼 DB단에서부터 컴파일을 미리 해놔 쿼리 실행 속도를 높이는 방법으로 실행을 할 수 있다.

하지만 문제는 SP는 조인을 할 수 없다.

이럴때 View(뷰)를 사용하면 된다.

View는 미리 컴파일을 하지는 않는다고 하지만 테이블 조인으로 인해 속도 문제가 발생할 경우 View 또한 쿼리를 직접 날려 수행하는 것보다 훨씬 빠르게 문제를 해결할 수 있다.

CREATE VIEW 뷰이름_V AS
SELECT A.OOO 
		, A.PPP
		, A.TTT
		, B.KKK
		, B.GGG
FROM TABLE1 A
LEFT OUTER JOIN TABLE2 B
ON A.OOO = B.OOO
WHERE 1=1
AND A.TTT = '신규'
AND B.DateKey >= (CONVERT(VARCHAR(10), DATEADD(YEAR, -1, DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0)), 112))	-- 작년 시작일

이런식으로 쿼리를 작성해 날리면 뷰가 생성된다.

ApparelSales라는 의류 판매 테이블에서 마지막 날짜의 Slacks의 판매량을 조회하고 싶다면 어떻게 해야할까?

 

DB SQL의 경우는 아래와 같이 조회할 수 있다.

SELECT SUM(Slacks)
FROM ApparelSales
WHERE 1=1
AND Datekey IN (SELECT MAX(Datekey) FROM ApparelSales)

SELECT SUM(Slacks)
FROM ApparelSales
WHERE 1=1
AND Datekey = (SELECT MAX(Datekey) FROM ApparelSales)

 

Power BI에서 이런 WHERE Condition을 어떻게 줄 수 있을까?

아래와 같이 CALCULATE와 FILTER를 사용하면 된다.

최근 합계 = CALCULATE(SUM(ApparelSales[Slacks]), FILTER(ApparelSales, MAX(ApparelSales[Datekey])))

설명 : 

CALCULATE의 expression에 WHERE절을 제외한 SQL을 넣고, 그 뒤 filter에 WHERE 조건들을 넣으면 된다.

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

FILTER는 아래와 같이 테이블에 조건을 걸어준다.

FILTER(<table>,<filter>)

 

즉... SQL에서는 서브쿼리에 원하는 값을 조회시키고, 그 값을 WHERE절에 조건을 걸어 조회를 했는데, Power BI에서는 FILTER에 원하는 조건만 담긴 테이블을 생성하고, CALCULATE를 통해 그 테이블 내에서 수식을 수행한다. 즉... SQL의 WITH AS와 비슷한 방식이라 볼 수 있다.

SELECT *
FROM 테이블명
WHERE 1=1
AND Datekey IN (SELECT MAX(Datekey) FROM 테이블명)

SELECT *
FROM 테이블명
WHERE 1=1
AND Datekey = (SELECT MAX(Datekey) FROM 테이블명)

Datekey의 최종값을 통해 가져오는 방법이다.

두 방법의 시간 차이는 없는 것 같다.

+ Recent posts