Pesquisar

Artigo
· Jun. 29 3min de leitura

Definições e Referências de Cubos de Analytics

Talvez isso já seja bem conhecido, mas quis compartilhar para ajudar.

 

Considere que você tem as seguintes definições de classes persistentes:

Uma classe Invoice (Fatura) com uma propriedade de referência para Provider (Prestador de serviço):

Class Sample.Invoice Extends (%Persistent, %Populate)
{
Parameter DSTIME = "AUTO";
Property InvoiceNumber As %Integer(MINVAL = 100000) [ Required ];
Property ServiceDate As %Date(MINVAL = "+$h-730") [ Required ];
Index InvoiceNumber On InvoiceNumber;
Property Provider As Sample.Provider [ Required ];
Index Provider On Provider [ Type = bitmap ];
/// Build some invoices, this will firstly create 100 Providers
/// <Example>
/// Set tSC=##class(Sample.Invoice).Build()
/// </example>
ClassMethod Build(pCount As %Integer = 100020, pInit As %Boolean = 0) As %Status
{
    #dim tSC 			As %Status=$$$OK
    #dim eException  	As %Exception.AbstractException
    try {
        If pInit {
            $$$THROWONERROR(tSC,##class(Sample.Provider).%KillExtent())
            $$$THROWONERROR(tSC,##class(Sample.Invoice).%KillExtent())
        }
        $$$THROWONERROR(tSC,##class(Sample.Provider).Populate(100))
        $$$THROWONERROR(tSC,##class(Sample.Invoice).Populate(pCount))
    }
    catch eException {
        Set tSC=eException.AsStatus()
    }
    Quit tSC
}
}

E a classe Provider

Class Sample.Provider Extends (%Persistent, %Populate)
{

Property Name As %String [ Required ];
Property NPI As %Integer(MAXVAL = 9000000000, MINVAL = 100000000) [ Required ];
}

Se você chamar o método Build da Sample.Invoice, poderá consultar isso via SQL:

SELECT
InvoiceNumber,Provider->Name, Provider As ProviderId,ServiceDate
FROM Sample.Invoice

E verá algo como:

O ponto que este artigo discute é: como criar uma dimensão no Provider.

O que eu descobri que funciona bem é seguir esse padrão:

O que isso faz:

  1. Define o identificador único da dimensão como o Id do Provider (que vem de Sample.Provider).
    Isso é importante porque é perfeitamente possível existir mais de um prestador com o nome SMITH, JOHN.
    Ao definir o nível da dimensão na propriedade Provider, estamos dizendo para construir a tabela de dimensão baseada em um Provider único.

Se olharmos na tabela de dimensão gerada, veremos:

  1. Define uma propriedade para o nível que:
    • Identifica a propriedade como Provider.Name
    • Define que o valor deve ser buscado em tempo de execução (Get value at runtime = Yes)
    • Usa esse valor como nome dos membros da dimensão (Use as member names = Yes)

Isso tem como efeito colateral gerar na tabela de dimensão a seguinte declaração de propriedade:

/// Dimension property: Name<br/>
/// Source: Provider.Name
Property Name As %String(COLLATION = "SQLUPPER(113)", MAXLEN = 2000) 
[ Calculated, 
SqlComputeCode = {Set {Name}=##class(Sample.BI.Cube.Invoice.Provider).%FetchName({Provider})}, SqlComputed ];

Com o método %FetchName assim:

/// Fetch the current value of %FetchName.<br/>
/// Generated by %DeepSee.Generator:%CreateStarTable.
ClassMethod %FetchName(pKey As %String) As %String
{
 // If we don't a value, show key as this is most likely the NULL substitute
 Set tValue=pKey
 &SQL(SELECT Name INTO :tValue FROM Sample.Provider WHERE %ID = :pKey)
 Quit tValue
}

 

O que isso significa?
Quando os membros da dimensão são recuperados, o que será exibido é o nome do Provider e não o seu Id.

No Analyzer, podemos ver:

Por que isso é importante?

  • Se o nome de um Provider for alterado na Sample.Provider, o cubo não precisa ser reconstruído ou sincronizado.
    Se tivermos centenas de milhões de faturas e o nome de um único Provider mudar, não queremos reconstruir ou sincronizar todo o cubo de Invoice só por isso.
  • A tabela de dimensão para Provider é baseada no Provider.Id, o que permite termos mais de um Provider com o mesmo nome na tabela de dimensões/cubo.
  • Se, em vez de definir a propriedade do nível da dimensão dessa forma, definirmos como Provider.Name, o identificador único da dimensão passa a ser o nome, o que faz com que todos os Providers com o mesmo nome sejam agrupados sob o mesmo nome.
  • E, se o nome de um Provider for alterado, somos obrigados a reconstruir o cubo.
Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Jun. 29 1min de leitura

Depuração de API REST: Situação de Página Não Encontrada

Olá desenvolvedores. Só quero compartilhar com vocês uma descoberta que pode salvar alguns minutos importantes da sua vida como desenvolvedor com o InterSystems IRIS.

Mas!

Deveria funcionar; você implantou a API REST corretamente e tudo está no lugar.

O que poderia dar errado?

O problema, no meu caso, foi que eu escrevi o nome da classe errado, como na imagem abaixo:

 

(Havia um erro de digitação ali. E não houve erros de compilação, nem mensagens no console — nenhum indício do que estava errado.)

Então, se você se deparar com um problema semelhante — uma mensagem de “Not Found” para uma página que “deveria funcionar” — dê uma olhada na sua classe Dispatch. O nome está correto?

E, claro, pergunte para a comunidade. Talvez isso economize alguns minutos preciosos da nossa vida de desenvolvedor.

Saudações!

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Jun. 29

JSON fields and Class properties - are they case sensitive?

Hi noble devs!

Just building a simple frontend->JSON->IRIS backend story, and figured that IRIS while importing via %JSON.Adaptor wants JSON fields to match property names, meaning even should match the case. Like:

{ name: "John", 

surname: "Doe"}

will have issues while saving the dynamic object to a class Sample.Person with:

Class Sample.Person Extends (%Persistent, %JSON.Adaptor)

{

Property Name: %Sting;
Property Surname: %String;
}

As soon as the case is not the same... 

Is there any setting to fix this?) By fixing I mean I want IRIS to don't care about the case JSON fields, as it doesn't matter from SQL point of view, .e.g., IRIS will not allow two same properties but different case:

Property Name : %String;
Property name: %String;

Thoughts?

15 Comments
Discussão (15)4
Entre ou crie uma conta para continuar
Artigo
· Jun. 29 1min de leitura

REST API Debug: Page Not Found situation

Hi developers. Just want to share with you a finding that might save you a few important minutes of your developer life with InterSystems IRIS.

But!

It should work; you deployed the REST API correctly, and everything is just in place.

What can go wrong?

The issue in my case was that I misspelled the name of the class, like in this picture:

 

It was a typo there. And there were no compilation errors, no console messages - no evidence of what is wrong. 

So, if you face a similar problem - Not Found message for a page that "just should work" - take a look at the Dispatch class? if the name is accurate?

And of course ask the community. Maybe it will save you a few important minutes of our precious developers' life.

Cheers!

Discussão (0)1
Entre ou crie uma conta para continuar
Artigo
· Jun. 29 3min de leitura

Retour sur InterSystems Ready 2025

Salut la Communauté !

J’ai eu le plaisir d’être votre reporter sur place pour InterSystems Ready 2025, le plus grand événement de l’année dédié aux développeurs d'InterSystems. Comme toujours, ce sommet mondial a été riche en découvertes, en échanges et en innovations. Cette année encore, la Communauté Francophone s’est brillamment illustrée et a pleinement participé à cette aventure inspirante !

@Dean Andrews, @Irène Mykhailova, @Anastasia Dyubaylo, @Adeline Icard et @Guillaume Rongier:

Dès la journée précédant le sommet, les activités ont battu leur plein : golf à l’aube, ateliers techniques passionnants, et moments conviviaux entre collègues. Même si la chaleur et les 18 trous de golf ont eu raison de certains, pour le reste de la journée l’ambiance était au rendez-vous !

Le sommet a véritablement commencé lors de la réception d’ouverture. C’était un vrai plaisir de retrouver des visages connus et de rencontrer de nouveaux membres de la communauté.

@Iryna Mykhailova, @Johan Jacob, @Lorenzo Scalese, @Adeline Icard, @Guillaume Rongier 

Au fil des sessions, @Guillaume Rongier a animé plusieurs démonstrations techniques sur Python et IRIS, captant l’attention des visiteurs du Tech Exchange

On a également croisé Lorenzo Scalese, Guillaume Rongier et Luc Chatty à divers moments phares, notamment lors des jeux "Ready Games", des sessions sur l'IA, et bien sûr, autour de la fameuse "roue de la fortune" au stand de la Developer Community !

@Lorenzo Scalese, @Dean Andrews , @Derek Gervais 

@Muhammad Waseem, @Guillaume Rongier, @Anastasia Dyubaylo, @Oliver Wilms 

@Anzelem Sanyatwe, @Iryna Mykhailova, Luc Chatty

Et que dire du concert à Universal City Walk avec le groupe Integrity Check ?

Même @Randy Pallotta, le guitariste vedette, a fait quelques apparitions parmi nous après le show !

La dernière matinée fut l’occasion de se dire au revoir, de profiter des dernières présentations. Et bien sûr, la session principale de Ready 2025 : InterSystems Developer Ecosystem – les nouvelles ressources et outils à connaître. @Dean Andrews et @Anastasia Dyubaylo ont présenté un aperçu complet de toutes les nouveautés de l’écosystème Developer Community.

Par la suite, @David Reche a mis à l’épreuve l’attention des participants en animant un quiz Kahoot!

Accueillons chaleureusement les gagnants : @Vishal Pallerla, @Rochael Ribeiro et @Jason Morgan. Félicitations ! Nous espérons que vous profiterez bien de votre récompense !

Tout le monde était heureux :

@Juliana Yamao Modesto, @Derek Gervais, @Rochael Ribeiro, @Iryna Mykhailova, @Katia Neves, @Anastasia Dyubaylo, @Dean Andrews, @Enrico Parisi, @Vishal Pallerla, @Eduard Lebedyuk

Merci à toute l’équipe, et en particulier à @Maureen Flaherty, véritable marraine de cet événement. Chapeau bas pour l’organisation impeccable !

@Maureen Flaherty, @Enrico Parisi, @Iryna Mykhailova

À l’année prochaine pour InterSystems Ready 2026 ! Rumeurs confirmées : le prochain sommet aura lieu en avril à Washington, D.C. Notez la date dans vos calendriers, car on espère y voir encore plus de membres francophones !

La Communauté Francophone InterSystems, c’est vous – et nous avons hâte de vous retrouver à Ready 2026 !

Discussão (0)1
Entre ou crie uma conta para continuar