.net f# reporting etl

.net - F#y "informe a nivel empresarial"



reporting etl (6)

En función de su experiencia real , un documento técnico u otro estudio referenciable respetable, ¿actualmente F # es una herramienta viable para la presentación de informes a nivel corporativo o empresarial?

Atención: antes de votar para cerrar esta pregunta como "no constructiva", lea el bit en la parte inferior.

Fondo
Actualmente trabajo en una corporación grande que hace un uso intensivo de muchas herramientas de informes diferentes, que incluyen (pero no se limitan a) SAS, Cognos, SSRS e incluso una buena cantidad de COBOL. Cada herramienta tiene el lugar que le corresponde y muchas de ellas son, en muchos aspectos, equivalentes en el conjunto de características, etc. La mayoría de nuestras herramientas pueden enviarse a PDF, Excel y bases de datos con relativa facilidad y en esos casos funcionan maravillosamente.

Desafortunadamente, mi organización, al igual que muchas otras, hace uso de las hojas de cálculo de Excel y, le encanta o lo odia, pasamos muchas horas escribiendo aplicaciones de consola .NET para extraer información e insertar información en hojas de cálculo de Excel. (No estoy interesado en discutir los méritos o desventajas de este enfoque. Es lo que es y no hay forma de que pueda cambiarlo).

A pesar de lo excelentes que son las tecnologías de elaboración de informes enumeradas anteriormente, no se ajustan a ETL avanzado desde o hacia hojas de cálculo. Simplemente no fueron diseñados para eso y si bien son perfectamente adeptos al formato de un informe como una hoja de cálculo de Excel, no son muy buenos para actualizar una hoja de cálculo existente o extraer datos de una manera muy específica (extraer solo los valores resaltados en rojo, por ejemplo). Así que terminamos escribiendo MUCHAS aplicaciones de consola .NET para hacer este bit. (Nuevamente, no estoy interesado en debatir el enfoque. Es lo que es. Lo sé, tampoco me gusta).

.NET es, en mi opinión, un marco fantástico y lo suficientemente flexible como para manejar casi cualquier tarea de programación, por lo que podríamos manejar teóricamente todos los informes en .NET. Pero, tratar de manejar todos los informes en .NET lleva demasiado tiempo. Tenemos que escribir todas las cosas repetitivas nosotros mismos. Me gusta aprovechar el poder, la simplicidad y la solidez de las herramientas de informes reales que ya tenemos.

Por lo tanto, terminamos escribiendo dos aplicaciones para una sola tarea, por ejemplo, un trabajo SAS para cargar los datos de varias fuentes de datos, hacer las transformaciones y almacenar el resultado en una ubicación permanente o temporal, y un segundo trabajo .NET para tomar los resultados y cargarlos en la hoja de cálculo. (Lo sé.)

El punto
He estado viendo y escuchando mucho sobre F # en los últimos dos años y me he metido un poco en ello. Aprendí OCAML en la universidad y me encanta la programación funcional. Cuando lo solicite, me gustaría hacer toda la programación de un informe en particular en una sola plataforma (si no en un solo idioma). La pregunta, sin embargo, es si el lenguaje F # y el marco .NET están completamente listos para los informes a nivel empresarial, y estoy hablando de informes que deben ejecutarse de manera precisa y eficiente . Microsoft ciertamente lo está vendiendo duro , pero quiero saber si alguien con experiencia en otras tecnologías de informes realmente lo ha probado en un entorno de producción. ¿Cómo se compara con otras tecnologías de informes y se puede integrar fácilmente en un entorno corporativo? ¿Cómo abordaron la seguridad? Hecho bien, ¿qué tipo de memoria-perfil requiere F # (estamos hablando de millones de registros)? ¿Procesa bien los datos tabulares? ¿Es eficiente? ¿Qué tan fácil es de mantener (especialmente si el código crece)? ¿Qué tipo de complementos de terceros, complementos, etc. son necesarios para que algo funcione (o puede hacer la mayoría de las cosas de la caja)? ¿Cuánto trabajo (horas de programación, etc.) se requiere en comparación con otros sistemas de informes (para resultados similares)?

Si no tienes experiencia con F #, o si usas F # exclusivamente, entonces no estoy particularmente interesado en tu opinión. Me gustaría saber de aquellos que han salvado la brecha y pueden relacionar, desde la experiencia, las oportunidades y dificultades en el uso de F # como un motor de generación de informes para big data (millones de registros, generados en una variedad de formatos).

He visto algunas preguntas que ya cubren parte de este terreno:

Pero tienen algunos años. Varias versiones más adelante, ¿es F # hasta la tarea? ¿O soy un perro ladrando el árbol equivocado?

EDITAR

Solo por claridad, estoy particularmente interesado en la nueva programación rica en información de F #. Antes de F # 3.0, era simplemente una tecnología interesante, pero las capacidades recientemente agregadas de F # para usar proveedores de tipo de base de datos y sus expresiones de consulta hacen que parezca una alternativa viable a otras tecnologías de creación de informes. Microsoft ciertamente lo sugiere .

Una respuesta aceptable contendría una cuenta de primera mano (o una referencia a un estudio de caso documentado) de la implementación de un motor de generación de informes a nivel empresarial construido en F # y una comparación con otra tecnología de generación de informes de cualquier ganancia o pérdida de rendimiento, etc. No lo hace Tiene que ser demasiado detallado, lo suficiente como para convencer a un gerente medio (competente) de que F # sería una tecnología apropiada / inapropiada para el procesamiento de datos a granel / por lotes. Ha sido hecho? ¿Quién lo hizo? ¿Cuáles fueron los resultados? ¿Qué tan complicada fue la implementación (en relación con tecnologías similares)? ¿Funciona bien?

¿Por qué estoy haciendo una pregunta subjetiva?
Al igual que la mayoría de los buenos miembros de stackoverflow, con frecuencia voto para cerrar preguntas subjetivas. De acuerdo con las FAQ , las preguntas subjetivas deben evitarse, pero no están prohibidas por completo. Las preguntas más frecuentes enlazan a seis pautas para grandes preguntas subjetivas que he tratado de seguir. Lea estas pautas antes de votar para cerrar esta pregunta.


¿Cómo se compara con otras tecnologías de informes y se puede integrar fácilmente en un entorno corporativo?

No sé cómo se compara F # con otras tecnologías de informes, pero lo he implementado en más de un entorno corporativo y básicamente es lo mismo que C #, es decir, fácil y robusto.

¿Cómo abordaron la seguridad?

Igual que C #.

Hecho bien, ¿qué tipo de memoria-perfil requiere F # (estamos hablando de millones de registros)?

Encontré un error de GC en .NET en 5 años de uso y no era específico de F #. He tenido varios problemas con objetos grandes (una vez más, no específicos de F #) pero, en general, el GC es robusto y eficiente, y se acumula agresivamente.

He procesado miles de millones de registros y he descubierto que F # es extremadamente rápido y muy confiable. Tenga en cuenta que F # se utiliza en Bing AdCenter de Microsoft (para la ubicación de anuncios) y Halo 3 de Microsoft, los cuales requieren que se procesen conjuntos de datos de terabytes.

¿Procesa bien los datos tabulares?

Sí, y tiene un fácil paralelismo (consulte el módulo Array.Parallel ), pero su principal fortaleza en relación con otras herramientas es la manipulación de datos estructurados, como árboles y gráficos.

¿Es eficiente?

Sí.

Nuestro cliente actual, una de las compañías de seguros más grandes del mundo, vio un cambio en la mejora del rendimiento 10x de C ++ a F # (así como una reducción de 10 veces en el tamaño del código).

Un cliente anterior vio una mejora en el rendimiento al mover un compilador de OCaml a F #. Esto es impresionante porque OCaml fue específicamente diseñado para escribir compiladores y es extremadamente rápido.

Un antiguo cliente nos hizo reescribir su plataforma de operaciones y vimos un rendimiento de latencia de 100x y mejoras en la latencia a pesar de que estábamos pasando de C ++ que no era de GC a F de GC.

¿Qué tan fácil es de mantener (especialmente si el código crece)?

Facil de mantener. En ML, agregar funciones es una tarea fácil y el sistema estático atrapa muchas reacciones al extender tipos de unión.

Nuestro cliente actual puso su primer código F # en vivo en abril pasado y su responsable no tuvo problemas a pesar de no haber recibido ningún entrenamiento en F # (u OCaml).

¿Qué tipo de complementos de terceros, complementos, etc. son necesarios para que algo funcione (o puede hacer la mayoría de las cosas de la caja)?

Nunca hemos usado ninguno (¡pero vendemos dos!). Las únicas cosas de terceros que he considerado son los controles de WPF que, una vez más, no son específicos de F #.

¿Cuánto trabajo (horas de programación, etc.) se requiere en comparación con otros sistemas de informes (para resultados similares)?

No tengo idea, lo siento. Parece que tenemos algo de trabajo con Dialogue y HP Extreme por venir, así lo sabré lo suficientemente pronto ...

¿Qué tan complicada fue la implementación (en relación con tecnologías similares)?

El código F # es mucho más simple que los lenguajes más antiguos como C ++, C # y Java.

Me gustaría enfatizar que F # realmente paga dividendos cuando lo usas para atacar problemas que son demasiado complicados de resolver usando herramientas más tradicionales, en lugar de solo reescribir el código anterior en F #.

Por ejemplo, nuestro cliente actual ha estado usando un motor de reglas de negocios que les costó alrededor de £ 1,000,000 para comprar, pero no resuelve su problema de negocios (lucha con grandes tablas, lucha con las matemáticas) así que les escribí una demostración de un negocio a medida gobierna el motor en una semana en alrededor de 1,000 líneas de código F #. No podría haber hecho eso con ninguna otra herramienta.


Fuera del tema, pero es posible que desee automatizar un poco su flujo de trabajo de Excel utilizando otras herramientas como XLReport o su primo más grande DBxtra , ambos pueden leer archivos de Excel, realizar consultas basadas en ellos y exportar los resultados manualmente, o en el caso de DBxtra automáticamente, lo bueno de ambos es que si la estructura de los archivos de Excel no cambia, debe diseñar las consultas solo una vez.


No estoy seguro de cuánto ayuda esto, pero hay algunos informes sobre F # en el sitio web de Microsoft. El primero que vinculé a continuación menciona específicamente el procesamiento estadístico / bases de datos, por lo que puede ser el más útil de los tres.

También hay un proveedor de tipo R para F # , lo que facilita la interoperación entre F # y R.


Para responder a su pregunta, está en el camino correcto. Lo digo como alguien que ha creado varios sistemas de informes y big data. Creé una de las plataformas de Big Data Analytics utilizadas en eBay en Scala y R. Más recientemente construí el Proveedor de Tipo Hadoop / Hive F # para MSRC. Puedo decir que nada se acerca a la pila de F # .net para este propósito. Gran rendimiento, interoperabilidad nativa fácil de usar, muchas bibliotecas, REPL, proveedores de tipos, WPF para la creación de gráficos. Desde MSRC he estado construyendo un F # IDE con todas las funciones que puede integrarse en Excel, donde puede utilizar un Proveedor de tipos para interactuar con el libro completo con Intelisense. Envíame un correo electrónico si quieres verlo.

Editar;

Por supuesto; Reemplacé una de mis clientes de la base de datos de Infobright con F # usando datos en memoria y un motor de consultas desde cero. Redujo el tiempo de consulta en 10 s de GB de datos de 30 minutos a 100 s de milisegundos. Todo me llevó 6 horas construirlo y solo tenía unos cientos de líneas de código. La base de datos fue el back-end de un servicio de informes basado en web que se volvió inmensamente más receptivo después de la actualización.

Mientras que en eBay solía hacer mi postprocesamiento de Big Data (bulk / batch) en R. Los archivos planos básicos eran 10s de GB, por lo que eran demasiado grandes para Excel. R hizo una gran cantidad de asignación de memoria innecesaria durante los pases de agregación; 10 GB se convertiría en 40 GB y se detendría una vez que comenzó a golpear el archivo de paginación. Dependiendo de los datos, tomaría minutos, horas o nunca terminaría. Hay bibliotecas R pagas que arreglan esto pero están limitando de otras maneras. Hacer las agregaciones en F # redujo esto a cientos de milisegundos con espacio constante. Estas agregaciones fueron 10s de líneas de código, casi lo mismo que R pero mucho más fáciles de entender y fueron revisadas. Tener una falla de trabajo R después de una hora de procesamiento debido a un error tipográfico es exasperante.

Solía ​​usar cubos OLAP (por ejemplo, Microsoft Analysis Services), pero estos sistemas han sido completamente eclipsados ​​por los clústeres Big Data y las máquinas Big Memory. Ahora es fácil construir su propia máquina Big Memory con F # y el nuevo Garbage Collector en .NET 4.5.

Espero que ayude.


Si espera crear un "sistema de informes de nivel empresarial con una mejor automatización de Excel", creo que está ladrando al árbol correcto (es decir, es factible), pero hay un oso (no una ardilla) en el árbol. En otras palabras, raramente valdría la pena. Ahora, tal vez su situación es la excepción. Las necesidades extraordinarias requieren medidas extraordinarias. Pero, me pregunto si hay alguna manera de abstraer las partes de esto que su sistema de informes no puede hacer y centrarse en mejorar la interoperabilidad ... en lugar de construir todo desde cero. El enfoque correcto, creo, dependerá en gran medida de los detalles, que usted conoce mejor y, supongo, son demasiados para enumerarlos aquí.


Una vez probé F # para agregar en un archivo de texto delimitado por tabuladores que contiene 890,000 registros (500mb) en aproximadamente 20 segundos. Debería ser aún más rápido en hardware más nuevo con Win8 y .Net 4.5. Creo que es razonablemente rápido.

No estoy seguro de cuáles son sus requisitos de informes, pero consulte SQL Server Analysis Services (SSAS) y Reporting Services.

SSAS ahora viene con un motor ''tabular'' en memoria. Recientemente probé eso con mil millones de filas. Las consultas de tabla dinámica de Excel que agregan más de mil millones de filas ocurrieron en aproximadamente 2 segundos.