go to post Eduard Lebedyuk · May 31, 2016 Here it is: /// Returns MDX string used to create pivot.<br> /// <b>pPivotName</b> - fullname of pivot. Eg: "KPIs & Plugins/HoleFoods.pivot". Case insensitive.<br> /// <b>pStatus</b> - Status of query execution.<br> /// <b>MDX</b> - MDX query with filters<br> /// <b>BaseMDX</b> - MDX query without filters<br> ClassMethod GetMdx(pPivotName As %String, Output MDX, Output BaseMDX) As %Status { #dim tPivot As %DeepSee.Dashboard.Pivot #dim tPivotTable As %DeepSee.Component.pivotTable set MDX = "" set BaseMDX = "" set tPivot = ##class(%DeepSee.UserLibrary.Utils).%OpenFolderItem(pPivotName,.pStatus) return:'$IsObject(tPivot) $$$OK return:$$$ISERR(pStatus) pStatus set tPivotTable = ##class(%DeepSee.Component.pivotTable).%New() set pStatus = tPivot.%CopyToComponent(tPivotTable) return:$$$ISERR(pStatus) pStatus // returns tQueryText - mdx without filters set rs = tPivotTable.%CreateResultSet(.pStatus, .tParms, .tFilterInfo, .tAdvancedFilters, .BaseMDX) return:$$$ISERR(pStatus) pStatus set pStatus = tPivotTable.%GetFilterInfo(.tFilterInfo, .tAdvancedFilters) //return:$$$ISERR(pStatus) pStatus if (($d(tFilterInfo)=0) &&($d(tAdvancedFilters)=0)) { set MDX = BaseMDX // no filters, so we're good } else { // returns tQueryText - mdx with filters set rs = tPivotTable.%CreateResultSet(.pStatus, .tParms, .tFilterInfo, .tAdvancedFilters, .MDX) return:$$$ISERR(pStatus) pStatus } // Remove \n set MDX = $TR(MDX, $C(10), "") set BaseMDX = $TR(BaseMDX, $C(10), "") return pStatus } It is a part of MDX2JSON REST API.
go to post Eduard Lebedyuk · May 25, 2016 If you're okay with /api/deepsee as it is - use it.If, however, you want to change some settings (auth methods for one), then it's better to define your own application, since your changes may be lost during system update.
go to post Eduard Lebedyuk · May 24, 2016 Save timestamp with user timezone (get timezone from request), for example (returns server timezone): write $ZDATETIME($HOROLOG, 1, 5) Return timestamp to a client, there are a lot of js libraries which automatically convert incoming timestamp with a different timezone into user's local time. The advantage of this approach is that you only need to convert timezone once, the rest would be done on client. Check out ISO 8601 for timestamp formats with timezone support and which js understands. This approach works best, when you don't need to access your application data from the systems without support for this type of timestamp.
go to post Eduard Lebedyuk · May 23, 2016 s array = [] While (result.Next()) { s object = {} s object.data = {} s object.data.id = result.Data("ID") s object.data.reg = result.Data("Registration") s object.data.snNum = result.Data("SatNavVehNumber") do array.$push(object) } w !!,array.$toJSON() This should produce the desired output.
go to post Eduard Lebedyuk · May 19, 2016 1) I tried all three with the same result.2) I linked the procedure, and it does not work when I select data from a linked table. When I check the int code for a query, there is no call to my procedure or linked procedure to be found.
go to post Eduard Lebedyuk · May 13, 2016 Some comments on code.rename fileToImport to mysqldumpFileremove 2 references to other classes That said, it does not work on my sql script on the table creation part, despite throwing no errors (data insert throws an error - Table not found, but previous statement which creates the table seems to run okay, but the table does not get created) UPD: Reread your post, only INSERT, ok.
go to post Eduard Lebedyuk · May 13, 2016 Documentation, Measures That Refer to Other Cells. There is an example in Samples which shows how to implement 'relative' measure: "Pareto Chart for Category" dashboard.
go to post Eduard Lebedyuk · May 12, 2016 Tried it again, got the same results as you. $find performs better on both short (20 chars per piece, 100 pieces) and long strings (2000 chars per piece, 100 pieces).
go to post Eduard Lebedyuk · May 12, 2016 Graphs (and measurements in a method) include conversion times. >$find I tried this: $$$START("Using $find (hardcoded delimiter): ") For i=1:1:pIterations { Set tPosition = 0 Do { Set tNewPosition = $Find(tString,",",tPosition) Set tValue = $Select(tNewPosition'=0:$Extract(tString,tPosition,tNewPosition-2),1:$Extract(tString,tPosition,*)) Set tPosition = tNewPosition } While tPosition '= 0 } $$$END It was slow. Is there any way to write this faster - eg. without select (or other condition for the last piece)?
go to post Eduard Lebedyuk · May 12, 2016 Also Set a = $List(list, *) is slower than Set a = $List(list, 3) for 3-element list, on the other hand: Set a = $List(list) is faster than Set a = $List(list, 1)
go to post Eduard Lebedyuk · May 12, 2016 > Pros/Cons for multiple simple deployments vs single more complex deployment)If you have a virtualization platform and clients are heavy users, it would probably make a lot of sense to go with multiple simple deployments, and if you'll have many clients who can't load a single smallest node then "single complex" would be better.Developing "lots of simple" system (so 1 simple system with multiple deploys) would be cheaper (as you don't have tyo think about domains and security would be simpler, maybe some other simplifications would be possible), but hosting would (maybe) be more expensive as there is a lot of overhead in resources (to run OS/Cache for each deploy).
go to post Eduard Lebedyuk · May 10, 2016 As I understand, you need Caché users + some way to:Store additional informationProvide methods for web-login-account managementProvide additional security checksI guess domains could be used, okay. Also, here's somewhat related thread.>And if so, when deploying updates to the applications, would each domain/user-pool context be replicated environments> that would each need to be updated?Why? You have production server with real users and a test one(s) with some test users.
go to post Eduard Lebedyuk · May 10, 2016 Documentation has some information, see "Making Your Own Studio Templates".
go to post Eduard Lebedyuk · May 9, 2016 What's the advantage of using $$$ERRORCODE macro? ^%qCacheObjectErrors global contains the same values.
go to post Eduard Lebedyuk · May 8, 2016 See %ZEN.proxyObject class, SaveDocument / OpenDocument methods for sample global storage of dynamic objects. You can convert JSON to %ZEN.proxyObject to Global (and back) with it.There is also MonCache project - implementation of basic MongoDB functions using Caché as a database engine. It implements json-global engine.
go to post Eduard Lebedyuk · Apr 28, 2016 Use $Piece function to return a substring identified by a delimiter. : SELECT $PIECE('96842-2-AEV.00001-63561-001958-100728760I-42', '-', 2) Yields 2.