Aprobaciones de Pagina de SharePoint

Microsoft acaba de anunciar que para finales del mes de Julio de 2018 se habilitará una nueva característica la cual tiene como objetivo permitir a los propietarios del sitio configurar la aprobación de página para agregar al proceso de publicación estándar de un sitio. Después de esto las paginas nuevas y actualizadas se publicarán directamente cuando se finalice el flujo de aprobación.


Para más detalle: https://techcommunity.microsoft.com/t5/SharePoint/Announcing-SharePoint-page-approvals/m-p/215466

Limites de consultas ODATA para #ProjectOnline #ProjectServer

Realizar consultas a la base de datos de Reporte de Project Server o Project Online mediante OData tienen una serie de limitantes que es necesario tener en cuenta al momento de realizar consultas de cierta complejidad o de un gran volumen de registros esperados.

En la página oficial de referencia ProjectData – Project OData service reference se puede identificar todas las limitaciones, en particular las más representativas a continuación:

  • No es posible utilizar los comandos $links o $expand en una consulta, los cuales permiten traer datos de una segunda tabla relacionada.
  • La consulta por ODATA devuelve diferente número de registros según la tabla de consulta y según la plataforma (Server o Online).
  • Para el caso de Project Online los limites en el número de registros NO puede modificarse.
  • El comando $top no aplicará para valores que sobrepasen los límites de cada tabla, pero no mostrará errores de ejecución.
  • El comando $apply y aggregate no funcionan, aunque no devuelve error la consulta, simplemente los omite. Estos son los comandos por los cuales se milita mucho ODATA en Project.

Los límites de registros cuando se realiza una consulta, según la tabla, son los siguientes

Tabla de Consulta Project Server Project Online
Proyectos 100 300
Tareas 100 300
Riesgos 200 1.000
Problemas 200 1.000
Recursos 100 1.000

Para el caso de Project Server, se pueden cambiar lo límites ejecutando el siguiente comando:

Set-SPProjectOdataConfiguration -EntitySetName Projects -PageSizeOverride 200

Si queremos consultar los límites actuales de la plataforma podemos ejecutar el siguiente comando:

(Get-SPProjectOdataConfiguration).EntitySetsWithMaxPAgeSizeOverride

Conoces alguna otra limitante?


Publicación Original: https://myprojectserver.wordpress.com/2018/06/28/limites-de-consultas-odata-para-projectonline-projectserver/

 

Visualizaciones de Power BI dentro de Microsoft Excel

Microsoft esta mejorando la integración de Power BI con Excel de forma sorprendente. en una próxima actualización de Microsoft Excel podremos utilizar los gráficos que utilizamos en Power BI.

Aún esta en versión de prueba para quienes hacen parte del Office Insiders program. pero calma, pronto estará disponible para todos.

clip_image002

podremos usar más de 150 visualizaciones que hacer parte de Power BI, entre las propias de Microsoft y las diseñadas por sus colaboradores.

la forma como se crean estos gráficos si cambian con respecto a como venimos acostumbrados en Excel, ya que tiene un panel de configuración más cercano a como se personalizan en Power BI:

Si quieres conocer un poco más te invito a consultar la publicación original: Excel announces new data visualization capabilities with Power BI custom visuals

 

Tabla de fechas con DAX para Power BI

Una de las funcionalidades que no puede faltar en un buen reporte de Power BI es una tabla de fechas. A continuación se comparto los pasos y el código que se requiere para que mediante una expresión DAX podamos crearla:

  • En Power BI Desktop, la pestaña modeling damos clic en la opción New Table.
  • Copiamos el siguiente código en la línea de comando visualizada:

Fechas = GENERATE (
CALENDAR( DATE( 2017; 1; 1 ); DATE( 2030; 12; 31 ));
VAR startOfWeek = 1 // Where 1 is Sunday and 7 is Saturday, thus a 3 would be Tuesday
VAR currentDay = [Date]
VAR days = DAY( currentDay )
VAR months = MONTH ( currentDay )
VAR years = YEAR ( currentDay )
VAR nowYear = YEAR( TODAY() )
VAR nowMonth = MONTH( TODAY() )
VAR dayIndex = DATEDIFF( currentDay; TODAY(); DAY) * -1
VAR todayNum = WEEKDAY( TODAY() )
VAR weekIndex = INT( ROUNDDOWN( ( dayIndex + -1 * IF( todayNum + startOfWeek <= 6; todayNum + startOfWeek; todayNum + startOfWeek – 7 )) / 7; 0 ) )
RETURN ROW (
“Año”; years;
“Mes”; months;
“Día”; days;
“Día Index”; dayIndex;
“Semana Index”; weekIndex;
“Semana Día”; WEEKDAY(currentDay;2);
“Semana Nombre”; SWITCH(WEEKDAY(currentDay;2);1;”Lunes”;2;”Martes”;3;”Miercoles”;4;”Jueves”;5;”Viernes”;6;”Sábado”;”Domingo”);
“Quincena”; IF(days<=15;1; 2);
“Quincena Nombre”; IF(days<=15;”1ra Quincena”; “2da Quincena”);
“Mes Index”; INT( (years – nowYear ) * 12 + months – nowMonth );
“Año Index”; INT( years – nowYear );
“Año Mes”; INT(years*100)+months;
“Semestre”;IF(months<=6;1; 2);
“Semestre Nombre”;IF(months<=6;”1er Semestre”; “2do Semestre”);
“Trimestre”; IF(months<=3;1; IF(months<=6;2;if(months<=9;3;4)));
“Trimestre Nombre”; IF(months<=3;”1er Trimestre”; IF(months<=6;”2do Trimestre”;if(months<=9;”3er Trimestre”;”4to Trimestre”)));
“Bimestre”; IF(months<=2;1; IF(months<=4;2;if(months<=6;3;if(months<=8;4;if(months<=10;5;6)))));
“Bimestre Nombre”; IF(months<=2;”ENE-FEB”; IF(months<=4;”MAR-ABR”;if(months<=6;”MAY-JUN”;if(months<=8;”JUL-AGO”;if(months<=10;”SEP-OCT”;”NOV-DIC”)))));
“Cuatrimestre”; IF(months<=4;1; IF(months<=8;2;3));
“Cuatrimestre Nombre”; IF(months<=4;”1er Cuatrimestre”; IF(months<=8;”2do Cuatrimestre”;”3er Cuatrimestre”));
“Mes Ingles”; SWITCH(months;1;”January”;2;”February”;3;”March”;4;”April”;5;”May”;6;”June”;7;”July”;8;”August”;9;”September”;10;”October”;11;”November”;12;”December”;”Invalid Month Number”);
“Mes Español”; SWITCH(months;1;”Enero”;2;”Febrero”;3;”Marzo”;4;”Abril”;5;”Mayo”;6;”Junio”;7;”Julio”;8;”Agosto”;9;”Septiembre”;10;”Octobre”;11;”Noviembre”;12;”Diciembre”;”Mes Invalido”)
)
)

Consideraciones del comando establecido:

  • Rango de fechas desde 2017 hasta 2030.
  • Se incluyen meses en español e ingles.
  • se definen semestres, trimestres, cuatrimestres, bimestres y quincenas en número y nombre.
  • Se definen los días de la semana en número y nombre.

Definiciones adicionales en Power BI Desktop:

  • Se recomienda definir la tabla, como tabla de fechas.
  • Los campos de tipo texto se recomienda que se ordenen por el campo de tipo número correspondiente.
    • Ej. Mes Español ordenarlo por Mes
    • Ej. Cuatrimestre Nombre ordenarlo por Cuatrimestre
  • Crear las jerarquías para que en los gráficos podamos usar drill down como:
    • Año, semestre, mes, quincena, día
    • Año, trimestre, mes
    • Año, bimestre, mes, día
    • Entre otros…

Pregunta de interes:

¿Alguien sabe como agregarle los días festivos a esta tabla de fechas?

En el siguiente archivo encontraran el calendario desde el año 2000 hasta el año actual con festivos de estados unidos automatizados:

  • DAX Date Template
  • La tabla Date tiene automatizados los festivos de estados unidos, Francia, España, Inglaterra, entre otros países.
  • La tabla DateESCO tiene un intento de agregar los festivos de Colombia, pero aún no logro ajustar los festivos cambiantes. Si alguien puede ayudar.
  • de resto funciona igual a la otra formula, solo que los comentarios están en español en todo el código.

Archivo original y sin cambios publicado en DaxDateTemplate 


Publicación Original:https://myprojectserver.wordpress.com/2018/06/20/tabla-de-fechas-con-dax-para-power-bi/

Línea base para Proyectos y Tareas: Formula con Indicador

En Project Professional 2013/2016 tanto para Project Server como para Project Online es posible crear formulas que identifiquen si el proyecto como un todo o las tareas individuales tienen asignada línea base asignada.

  • Línea base de Proyecto

IIf(ProjDateValue(“NOD”) <> [Comienzo previsto]; 1; 0)

El campo es de tipo marca o de tipo número

  • Devuelve 1 si el proyecto tiene línea base 0 asignada
  • En caso de tener Project Professional en otro idioma se deben validar los nombres de los campos
  • El valor “NOD” puede cambiar por “NA” según el idioma del Project Professional.
  • Este campo se crea desde PWA, ya que desde Project Professional no se pueden crear campos de tipo proyecto.

 

  • Línea base de Tarea

IIf([Fin previsto] <> ProjDateValue(“NOD”); 1; 0)

  • El campo es de tipo marca o de tipo número
  • Devuelve 1 si la tarea tiene línea base 0 asignada
  • En caso de tener Project Professional en otro idioma se deben validar los nombres de los campos
  • El valor “NOD” puede cambiar por “NA” según el idioma del Project Professional.
  • Este campo se crea desde desde Project Professional o desde PWA.
  • Se puede crear un indicador grafico para diferenciar los valores devueltos.

2018-06-09

  • Indicador de Pin para indicar línea base asignada.
  • indicador de reloj para indicar que no tiene línea base asignada.

Si se quieren crear formulas para líneas base diferentes se debe tener en cuenta:

El campo comienzo previsto o fin previsto deben ser cambiados por Comienzo de línea base1,2,3…10 o Fin de línea base1,2,3…10

si adicional al indicador de línea base se quiere crear el calculo de porcentaje esperado les recomiendo consultar el siguiente enlace: % Esperado o Avance Planeado a Nivel de Proyecto en PWA #ProjectOnline #ProjectServer


Publicación Original:https://myprojectserver.wordpress.com/2018/06/14/linea-base-para-proyectos-y-tareas-formula-con-indicador/

Error de ReportingWssSyncListFailed después de cambiar las listas integradas en Project Server

Cuando las listas de riesgos y problemas en Project Server 2013/2016 son personalizadas realizando cambios como eliminación de campos, renombramientos o cambios en los tipos de datos, se genera el siguiente error:

ReportingWssSyncListFailed (24018) – Error al preparar la transferencia de la lista de SP 1100 para el proyecto ‘ProjectUID’. El Nombre_de_campo campo era falta en la lista de SP y se omitió.. Detalles: id = ‘24018’
name=’ReportingWssSyncListFailed’
uid=’uid’
ProjectUID=’ProjectUID’
SPListType=’1101′

Donde el campo de SPListType identifica al 1100 a problemas, 1101 a riesgos y 1104 a entregables.

Para solucionar este error se debe realizar los siguientes pasos:

  • Iniciar sesión en Power Shell de SharePoint Server con usuario administrador

Add-PsSnapin Microsoft.SharePoint.PowerShell

function Repair-ListFields
{
param
(
[Parameter(Mandatory=$true)][String]$ReferenceWebUrl,
[Parameter(Mandatory=$true)][String]$WebUrl,
[Parameter(Mandatory=$true)][String]$ListTitle
)
$currentVerbosePreferenceValue = $VerbosePreference
$VerbosePreference = “SilentlyContinue”
try
{
$SourceWeb = Get-SPWeb $ReferenceWebUrl -ErrorAction Stop
$web = Get-SPWeb $WebUrl -ErrorAction Stop
$SourceList = $SourceWeb.Lists[$ListTitle]
$List = $web.Lists[$listTitle]
if ( $SourceList -eq $null -or $list -eq $null )
{
throw “Source List or TargetList not found”
}
}
catch
{
Write-host $_.exception.Message -ForegroundColor Red
Break
}
$VerbosePreference = $currentVerbosePreferenceValue
function Delete-Field
{
param
(
[Parameter(Mandatory=$true)][Object]$fld
)
try
{
[xml]$schema = $fld.SchemaXml
$schema.Field.SetAttribute(‘AllowDeletion’,’TRUE’)
$schema.Field.SetAttribute(‘CanToggleHidden’,’TRUE’)
$fld.SchemaXml = $schema.OuterXml
$fld.Delete()
return $true
}
catch
{
Write-host “Delete Field: $($fld.Title) failed. Exception $_”
return $false
}
}
#Get all the customFields, leave out OOB fields (From GenericList template)
$SourceFields = $SourceList.Fields | where { $_.SourceID -notmatch “http” }
$schemas = @{}
$DisplayNameDict = @{}
#Build Schema dictionary and dictionary for Title & internalname mismatch
foreach ($sourceField in $SourceFields)
{
[xml]$FieldSchema = $sourceField.schemaxml
$FieldSchema.Field.RemoveAttribute(‘ColName’)
$FieldSchema.Field.RemoveAttribute(‘SourceID’)
$DisplayName = [System.Xml.XmlConvert]::DecodeName($FieldSchema.Field.Name)
if ( $FieldSchema.field.DisplayName -cne $DisplayName )
{
$FieldSchema.field.SetAttribute(‘DisplayName’, $DisplayName)
$DisplayNameDict.Add($sourceField.InternalName, $SourceField.Title)
}
$schemas.Add($sourcefield.InternalName, $FieldSchema.OuterXml)
}
$FieldsToCreate = New-Object system.collections.arraylist
#Identify and delete fields with Wrong id, if Title and internal names are wrong, fix them without deleting the fields
foreach ($SourceField in $SourceFields)
{
try
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Processing Field:–>” $sourceField.Title -ForegroundColor Green }
$field = $null
$field = $list.Fields.GetFieldByInternalName($sourceField.InternalName)
if ( $field.id -ne $sourceField.id )
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Field found by internalName but Id does not match:” $field.title }
$FieldsToCreate.Add($sourceField.InternalName) | Out-Null
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Deleting Field:” $Field.Title }
$result = delete-Field $Field
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Deleted:” $result }
}
}
catch
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Field not found by InternalName:” $sourceField.InternalName }
$field = $list.Fields[$SourceField.Id]
if ( $field -eq $null )
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Field not found by id:” $sourceField.Title }
$field = $list.Fields[$SourceField.Title]
if ( $field -ne $null )
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Field found by Title:” $sourceField.Title }
$FieldsToCreate.Add($sourceField.InternalName) | Out-Null
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Deleting Field:” $Field.Title }
$result = delete-Field $Field
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Field Deleted:” $true }
}
else
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Field not found by Title:” $SourceField.Title }
$FieldsToCreate.Add($sourceField.InternalName) | Out-Null
}
}
else
{
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Fixing Field:” $sourceField.Title }
$field.sealed = $false
$field.update()
[xml]$Schema = $field.Schemaxml
$schema.field.SetAttribute(‘Name’,$SourceField.InternalName)
$schema.field.SetAttribute(‘DisplayName’,$SourceField.Title)
$field.schemaXml = $Schema.OuterXml
$field.update()
}
}
}
#create deleted or missing fields
foreach ( $field in $FieldsToCreate )
{
$list.Fields.AddFieldAsXml($schemas[$field]) | Out-Null
$DisplayName = $null
if ( $VerbosePreference.value__ -eq 2 ) { Write-host “Created field:” $field }
if ( $DisplayNameDict.ContainsKey($field))
{
$DisplayName = $DisplayNameDict[$field]
$NewField = $list.Fields.GetFieldByInternalName($field)
$NewField.Title = $DisplayName
$NewField.Update()
if ( $VerbosePreference.value__ -eq 2 ) { Write-host `t “Updated Title of field:” $DisplayName }
}
}
}

  • Ejecutamos el siguiente comando para reparar la lista de riesgos del sitio seleccionado:

Repair-Listfields -ReferenceWebUrl <RefSite_URL> -WebUrl <site_URL> -ListTitle “Risks” -Verbose

  • Ejecutamos el siguiente comando para reparar la lista de problemas del sitio seleccionado:

Repair-Listfields -ReferenceWebUrl <RefSite_URL> -WebUrl <site_URL> -ListTitle “Issues” -Verbose

Los parámetros utilizados corresponden a:

  1. <RefSite_URL> es la URL es la referencia al sitio de proyecto que no tiene problemas.
  2. <site_URL> es la URL al sitio que tiene errores.

Una vez se ejecuta el comando se vuelve a publicar el proyecto y no debería salir nuevamente el error de sincronización.


publicación original en: Error de ReportingWssSyncListFailed después de cambiar las listas integradas en Project Server


 

Nuevas funcionalidades de Power BI para Junio/2018

Como cada mes, las novedades de Power BI nos permiten agregar nuevas funcionalidades a nuestros reportes de una forma fácil y rápida. Para este mes, las novedades son las siguientes:

  • Manejo de contrastes en colores con funcionalidades nativa de Windows
    • Aplica de forma automática cuando configuramos a Windows para que aplique contrastes en los colores.
    • La funcionalidad también aplica para navegadores Microsoft. Para otros tipos de navegadores se tienen limites en la funcionalidad.
  • Mejoras en gráficos de Donas y Pie:
    • Las donas permiten definir un radio interior personalizado.
    • Ambas graficas permiten definir donde ubicar las etiquetas (labels) y valores. antes solo se podía externamente. ahora es posible indicar posiciones internas o externas y combinaciones.
  • Mejoras en las graficas de combos (barras y líneas)
    • Se permite personalizar por separado los opciones de series (valores, formato, ubicación, tamaño).
  • Aumento en el tamaño de los reportes para Smartphone:
    • La cantidad de elementos que ahora se pueden agregar al layout de celulares es mayor, permitiendo agregar las graficas a esta visualización.
  • Mejoras en los filtros de datos:
    • En la vista de datos de Power BI Desktop ahora podemos filtrar y ordenar los datos. esta funcionalidad no estaba permitida.
  • Nueva grafica de jerarquía organizacional:
    • Grafica disponible en la tienda. no viene por defecto.
    • Permite crear gráficos de tipo árbol B para definir jerarquías.
    • Se podrían realizar graficas de estructura organización o diagramas como EDT/WBS para gestión de proyectos.
  • Nuevo mapa de calor especialmente para China.
    • Grafica disponible en la tienda. no viene por defecto.
    • Igual a la de otros países, donde se puede establecer el mapa por regiones y manejar colores según escalas de valores.

Para mas detalles de las nuevas funcionalidades observa el video o consulta la página oficial en Power BI Desktop June Feature Summary


Publicación original: https://myprojectserver.wordpress.com/2018/06/11/nuevas-funcionalidades-de-power-bi-para-junio-2018/