Ciao,
in questi giorni sto installando lo stesso progetto di BI su diverse macchine.
Uno dei problemi che piu' mi ha disturbato e' stato quello di capire, non avendo a disposizione un excel, se la mia BI e' fruibile dall'utente finale.
I controlli che faccio (e che quindi magari vi potrebbero far risparmiare del tempo) sono sostanzialmente due:
. provo una select veloce da SSMS connesso ad SSAS in locale sul Server con credenziali amministrative.
Se ottengo un errore in connessione il problema potrebbe essere dovuto ad SSAS non attivo.
Se ottengo un errore nella schermata degli oggetti (aprendo una "nuova query") il problema potrebbe essere dovuto ad un NON processamento del progetto
A quel punto procedo aprendo una finestra DOS e con:
. telnet su LOCALHOST 2383
Per verificare che il servizio sia aperto ed in attesa (ma basterebbe anche un bel NETSTAT -na e la verifica che la porta 2383 sia su LISTEN). Devo riceve una schermata nera, altrimenti ho un messaggio di time-out.
Passo poi su un client e procedo sempre da DOS con:
. telnet sul nomemacchina 2383.
Se ricevo una schermata nera vuol dire che il servizio e' raggiungibile da quel client, altrimenti potrebbero esserci dei problemi di rete.
Spero di essere stato utile.
Ciao
Ale
HHHOOOOOLLAAAAAAA!!!!
Ecco il mio primo blog.
Speriamo di non aver scritto cavolate!!!! ^_^
Ci ho lavorato un pochino perche' a me e' risultato utile, ma magari esiste gia' un sistema che mi permette di fare le stesse cose senza stressarsi.
ANYWAY...
***************
SCENARIO
***************
Ci sono 50 clienti che hanno lo stesso programma che si appoggia alla stessa basedati ma con versioni diverse.
Le versioni oltre al codice si portano dietro anche cambiamenti strutturali delle tabelle impattate.
***************
OBIETTIVO
***************
Effettuare un retrieve di dati indipendente dalla struttura delle tabelle.
Voglio fornire al mio supporto una query che si possa lanciare su tutte le istanze dei clienti senza dover ogni volta cambiare i campi che vengono coinvolti.
Allo stesso tempo vorrei avere anche un'idea di chi ha quali differenze sulla tabella che vado ad analizzare.
***************
SOLUZIONE (Buahhahahahahahha!!!!)
***************
Vado a parametrizzare ogni singolo campo coinvolto nella select.
Se questo esiste, prendo il campo, se non esiste ci SKIANTO una frase del tipo "CAMPO MANCANTE" che mi permette cosi' di vedere immediatamente a chi manca cosa :-)
Qui di seguito il codice sia per SQL2005 che, piu' sotto, quello per SQL2000.
ESSENDO CHE IO SAREI AL PRIMO BLOG TECNICO,
ogni commento ed insulto e' gradito!
ABBASSO LE MUKKE E VIVA LE REGINE (Presidente passa ad HONDA!)
Alex
********************************************************
CODICE PER SQL 2005
********************************************************
/*** CREO DUE TABELLE DI PROVA ***/
-- Questa con il campo TETA non presente!
if object_id('dbo.provacampi_1') IS NOT NULL
DROP TABLE dbo.provacampi_1;
GO
CREATE TABLE [dbo].[provacampi_1](
[alfa] [int] NULL,
[uno] [int] NULL,
[eli] [varchar](50) NULL
) ON [PRIMARY]
GO
if object_id('dbo.provacampi_2') IS NOT NULL
DROP TABLE dbo.provacampi_2;
GO
CREATE TABLE [dbo].[provacampi_2](
[alfa] [int] NULL,
[teta] [int] NULL,
[uno] [int] NULL,
[eli] [varchar](50) NULL
) ON [PRIMARY]
GO
/*** CI SKIANTO (ABenedetti DOCET!) DENTRO DEI DATI ***/
insert into provacampi_1(alfa, uno, eli) values (100,111,'ciao1' )
insert into provacampi_1(alfa, uno, eli) values (200,222,'ciao2' )
insert into provacampi_1(alfa, uno, eli) values (300,333,'ciao3' )
insert into provacampi_1(alfa, uno, eli) values (400,444,'ciao4' )
insert into provacampi_1(alfa, uno, eli) values (500,555,'ciao5' )
GO
insert into provacampi_2(alfa, teta, uno, eli) values (1000,1555,9119,'111ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (2000,2555,9229,'222ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (3000,3555,9339,'333ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (4000,4555,9449,'444ciao5' )
GO
/*** CREO LA MIA FUNZIONCINA VALORIZZANDO TUTTI I CAMPI CHE VOGLIO VALUTARE ***/
DECLARE @TBLNAME VARCHAR(100)
/*** --QUI SETTO QUALE TABELLA VOGLIO ANDARE A VERIFICARE ***/
SET @TBLNAME = 'dbo.provacampi_1'
-- SET @TBLNAME = 'dbo.provacampi_2'
DECLARE @OBJID INT
SET @objid = (SELECT (Object_id(@TBLNAME)))
DECLARE @SQLEXEC NVARCHAR(4000)
/*** per ogni campo creo una variabile ***/
DECLARE @uno VARCHAR(50) -- dichiaro la variabile
SET @uno = 'uno' -- assegno alla variabile il nome del campo
IF (SELECT name -- verifico se esiste o no il campo
FROM sys.columns
WHERE object_id = @OBJID
AND name = @uno) IS NULL
SET @uno = CHAR(39) -- Se non esiste lo setto con 'MancaCampo'
+ 'MancaCampo'
+ CHAR(39)
+ 'as uno' -- ed assegno un alias con lo stesso nome del campo che manca
DECLARE @alfa VARCHAR(50)
SET @alfa = 'alfa'
IF (SELECT name
FROM sys.columns
WHERE object_id = @OBJID
AND name = @alfa) IS NULL
SET @alfa = CHAR(39)
+ 'MancaCampo'
+ CHAR(39)
+ 'as alfa'
DECLARE @teta VARCHAR(50)
SET @teta = 'teta'
IF (SELECT name
FROM sys.columns
WHERE object_id = @OBJID
AND name = @teta) IS NULL
SET @teta = CHAR(39)
+ 'MancaCampo'
+ CHAR(39)
+ 'as teta'
DECLARE @eli VARCHAR(50)
SET @eli = 'eli'
IF (SELECT name
FROM sys.columns
WHERE object_id = @OBJID
AND name = @eli) IS NULL
SET @eli = CHAR(39)
+ 'MancaCampo'
+ CHAR(39)
+ 'as eli'
/*** COSTRUISCO LA MIA SELECT A COLPI DI VARIABILI ***/
SET @SQLEXEC = 'select '
+ @uno
+ ', '
+ @alfa
+ ', '
+ @teta
+ ', '
+ @eli
+ ' from '
+ @TBLNAME
/*** ESEGUO LA MIA SELECT ***/
EXEC( @SQLEXEC)
********************************************************
CODICE PER SQL 2000
********************************************************
/*** CREO DUE TABELLE DI PROVA ***/
-- Questa con il campo TETA non presente!
if object_id('dbo.provacampi_1') IS NOT NULL
DROP TABLE dbo.provacampi_1;
GO
CREATE TABLE [dbo].[provacampi_1](
[alfa] [int] NULL,
[uno] [int] NULL,
[eli] [varchar](50) NULL
) ON [PRIMARY]
GO
if object_id('dbo.provacampi_2') IS NOT NULL
DROP TABLE dbo.provacampi_2;
GO
CREATE TABLE [dbo].[provacampi_2](
[alfa] [int] NULL,
[teta] [int] NULL,
[uno] [int] NULL,
[eli] [varchar](50) NULL
) ON [PRIMARY]
GO
/*** CI SKIANTO (ABenedetti DOCET!) DENTRO DEI DATI ***/
insert into provacampi_1(alfa, uno, eli) values (100,111,'ciao1' )
insert into provacampi_1(alfa, uno, eli) values (200,222,'ciao2' )
insert into provacampi_1(alfa, uno, eli) values (300,333,'ciao3' )
insert into provacampi_1(alfa, uno, eli) values (400,444,'ciao4' )
insert into provacampi_1(alfa, uno, eli) values (500,555,'ciao5' )
GO
insert into provacampi_2(alfa, teta, uno, eli) values (1000,1555,9119,'111ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (2000,2555,9229,'222ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (3000,3555,9339,'333ciao5' )
insert into provacampi_2(alfa, teta, uno, eli) values (4000,4555,9449,'444ciao5' )
GO
/*** CREO LA MIA FUNZIONCINA VALORIZZANDO TUTTI I CAMPI CHE VOGLIO VALUTARE ***/
DECLARE @TBLNAME VARCHAR(100)
/*** --QUI SETTO QUALE TABELLA VOGLIO ANDARE A VERIFICARE ***/
SET @TBLNAME = 'dbo.provacampi_1'
-- SET @TBLNAME = 'dbo.provacampi_2'
DECLARE @OBJID INT
SET @objid = (SELECT (Object_id(@TBLNAME)))
DECLARE @SQLEXEC NVARCHAR(4000)
/*** per ogni campo creo una variabile ***/
DECLARE @uno VARCHAR(50) -- dichiaro la variabile
SET @uno = 'uno' -- assegno alla variabile il nome del campo
IF (SELECT name -- verifico se esiste o no il campo
FROM syscolumns
WHERE id = @OBJID
AND name = @uno) IS NULL
SET @uno = CHAR(39) -- Se non esiste lo setto con 'MancaCampo'
+ 'MancaCampo'
+ CHAR(39)
+ 'as uno' -- ed assegno un alias con lo stesso nome del campo che manca
DECLARE @alfa VARCHAR(50)
SET @alfa = 'alfa'
IF (SELECT name
FROM syscolumns
WHERE id = @OBJID
AND name = @alfa) IS NULL
SET @alfa = CHAR(39)
+ 'MancaCampo'
+ CHAR(39)
+ 'as alfa'
DECLARE @teta VARCHAR(50)
SET @teta = 'teta'
IF (SELECT name
FROM syscolumns
WHERE id = @OBJID
AND name = @teta) IS NULL
SET @teta = CHAR(39)
+ 'MancaCampo'
+ CHAR(39)
+ 'as teta'
DECLARE @eli VARCHAR(50)
SET @eli = 'eli'
IF (SELECT name
FROM syscolumns
WHERE id = @OBJID
AND name = @eli) IS NULL
SET @eli = CHAR(39)
+ 'MancaCampo'
+ CHAR(39)
+ 'as eli'
/*** COSTRUISCO LA MIA SELECT A COLPI DI VARIABILI ***/
SET @SQLEXEC = 'select '
+ @uno
+ ', '
+ @alfa
+ ', '
+ @teta
+ ', '
+ @eli
+ ' from '
+ @TBLNAME
/*** ESEGUO LA MIA SELECT ***/
EXEC( @SQLEXEC)