Tools and Examples¶
Core Stored Procedures (Recap)¶
- spMFSetup_Reporting 
- spMFCreateTable / spMFCreateAllMFTables 
- spMFUpdateTable / spMFUpdateTableInBatches 
- spMFUpdateMFilesToMFSQL 
- spMFUpdateAllIncludedInAppTables 
- spMFClassTableStats 
- spMFGetMfilesLog (event log export) 
Helper Functions¶
- fnMFParseDelimitedString: Split multi‑lookup delimited list for joins. 
Inspection Queries¶
Class Portfolio .. code:: sql
SELECT Name, IncludeInApp, LastObjectCount, LastUpdateOnUTC FROM dbo.MFClass WHERE IncludeInApp = 1 ORDER BY Name;
Recent Batch Outcomes .. code:: sql
SELECT TOP 50 ProcessBatch_ID, CreatedOnUTC, Status, LogText FROM dbo.MFProcessBatch ORDER BY ProcessBatch_ID DESC;
Batch Detail (Verbose) .. code:: sql
SELECT TOP 100 pbd.ProcessBatch_ID, pbd.ColumnName, pbd.ColumnValue FROM dbo.MFProcessBatchDetail pbd ORDER BY pbd.ProcessBatch_ID DESC;
High Churn Classes (Last Hour) .. code:: sql
SELECT mc.Name, COUNT(*) AS ChangeRows FROM dbo.MFProcessBatchDetail pbd INNER JOIN dbo.MFProcessBatch pb ON pb.ProcessBatch_ID = pbd.ProcessBatch_ID INNER JOIN dbo.MFClass mc ON pbd.Class_ID = mc.Class_ID WHERE pb.CreatedOnUTC > DATEADD(HOUR,-1, SYSUTCDATETIME()) GROUP BY mc.Name ORDER BY ChangeRows DESC;
Explode Multi‑Lookup Example¶
SELECT so.ObjID, f.ListItem AS CustomerID
FROM MFSalesOrder so
CROSS APPLY dbo.fnMFParseDelimitedString(so.Customer_ID, ',') f;
Analytic View Pattern¶
CREATE VIEW custom.vwInvoiceTotals AS
SELECT InvoiceDate, Customer, SUM(TotalAmount) AS Total
FROM MFInvoice
GROUP BY InvoiceDate, Customer;
Row Drift Audit (Random Sample)¶
SELECT TOP 20 * FROM MFInvoice ORDER BY NEWID();
Event Log Join Sketch¶
SELECT e.ID, e.TimeStamp, e.Type, t.NameOrTitle, t.ObjID
FROM MFilesEvents e
CROSS APPLY (SELECT e.Events.value('(/event/data/objectversion/objver/objid)[1]','int') AS ObjID,
                    e.Events.value('(/event/data/objectversion/title)[1]','nvarchar(255)') AS NameOrTitle) t
INNER JOIN MFInvoice i ON i.ObjID = t.ObjID;
Next¶
Performance tuning: Performance and Optimization